Mysql
 sql >> Database >  >> RDS >> Mysql

Installazione del cluster Percona XtraDB su CentOS 7

Benvenuto in un altro blog. Questa volta sono qui per mostrarvi come configurare il cluster percona XtraDB. Ok, quindi cos'è percona XtraDB? XtraDB è una soluzione di clustering MySQL, garantisce un'elevata disponibilità, previene i tempi di inattività e la perdita di dati e fornisce scalabilità lineare per un ambiente in crescita. Quando si esegue una query, questa viene eseguita localmente sul nodo. Tutti i dati sono disponibili localmente, non è necessario l'accesso remoto. Una buona soluzione per ridimensionare un carico di lavoro di lettura. Puoi inserire query di lettura su qualsiasi nodo. Dopo aver installato percona XtraDB non è necessario installare MySQL separatamente, XtraDB lo otterrà dal repository percona e sarai in grado di preparare il cluster dopo aver letto questo articolo.

prerequisito:

Per configurare un cluster percona XtraDB su server Linux abbiamo bisogno di tre server, le informazioni sono le seguenti:

server percona1:192.168.56.110

server percona2:192.168.56.113

Server percona3:192.168.56.114

Sistema operativo:CentOS 7

puoi anche usare due server ma il documento ufficiale consiglia un numero dispari di server. ad esempio 3,5,7 e così via. semplicemente non scegliere un numero pari di nodi, lo chiamano split-brain. Uno split-brain è uno stato in cui i nodi perdono il contatto tra loro e quindi entrambi cercano di assumere il controllo delle risorse condivise o di fornire contemporaneamente il servizio cluster

NOTA:Abbiamo bisogno dell'accesso come root sul nodo in cui installeremo Percona XtraDB Cluster
(accedere come utente con privilegi di root o essere in grado di eseguire comandi con Sudo

Controlli preliminari:

Aggiungi le voci sottostanti nel tuo file /etc/hosts ——> su tutti i server (percona1,percona2,percona3)

192.168.56.110 percona1.localdomain percona1
192.168.56.113 percona2.localdomain percona2
192.168.56.114 percona3.localdomain percona3

Aprire le porte del firewall:

Dobbiamo aprire sotto le porte su tutti i server (percona1,percona2,percona3)
3306
4444
4567
4568

firewall-cmd --zone=public --add-service=mysql --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent
firewall-cmd --reload
firewall-cmd --list-all
[[email protected] ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources: 
services: ssh dhcpv6-client mysql
ports: 3306/tcp 4567/tcp 4568/tcp 4444/tcp 4567/udp
protocols: 
masquerade: no
forward-ports: 
source-ports: 
icmp-blocks: 
rich rules

Disabilita SELinux:——->su tutti i server(percona1,percona2,percona3)

[[email protected] ~]# setenforce 0

Questo metterà SELinux in modalità permissiva per la sessione corrente, ma è necessario disabilitarlo in modo permanente.
edit /etc/sysconfig/selinux file imposta la variabile selinux come disabilitata su tutti i server (percona1,percona2,percona3):
vi /etc/sysconfig/selinux
SELINUX=disabled

Tutti i server dovrebbero essere accessibili tra loro, per verificare l'accessibilità esegui il ping di ciascun server.

Installa sotto prereq RPM:——->su tutti i server(percona1,percona2,percona3)

epel-release
libev
socat

[[email protected] ~]# yum -y install epel-release 
Installed:
epel-release.noarch 0:7-11

[[email protected] yum.repos.d]# yum -y install libev 
Installed:
libev.x86_64 0:4.15-7.el7

[[email protected] Desktop]# yum -y install socat 
Installed:
socat.x86_64 0:1.7.3.2-2.el7

Aggiungi repository Percona:——->su tutti i server(percona1,percona2,percona3)

Ora aggiungeremo il repository percona in tutti e tre i server (percona1,percona2,percona3):

[[email protected] ~]# sudo yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Installed:
percona-release.noarch 0:1.0-13 
Complete!

Installa Percona-XtraDB-Cluster:——->su tutti i server(percona1,percona2,percona3)

[[email protected] ~]# yum install -y Percona-XtraDB-Cluster-57
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
.
.
.

Installed:
Percona-XtraDB-Cluster-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-shared-57.x86_64 0:5.7.27-31.39.1.el7 
Percona-XtraDB-Cluster-shared-compat-57.x86_64 0:5.7.27-31.39.1.el7

Dependency Installed:
Percona-XtraDB-Cluster-client-57.x86_64 0:5.7.27-31.39.1.el7 Percona-XtraDB-Cluster-server-57.x86_64 0:5.7.27-31.39.1.el7 
percona-xtrabackup-24.x86_64 0:2.4.17-1.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 
perl-Digest.noarch 0:1.17-245.el7 perl-Digest-MD5.x86_64 0:2.52-3.el7 
qpress.x86_64 0:11-1.el7

Replaced:
mariadb-libs.x86_64 1:5.5.60-1.el7_5
Complete!

Verifichiamo che Percona XtraDB sia installato o meno.

[[email protected] ~]# yum search Percona-XtraDB

NOTE: Till here all above steps should be perfomed on all servers (percona1,percona2,percona3)
Configurazione dei nodi per la replica dei set di scrittura
ON Percona1:

Avviamo il server MySQL e cambiamo la password di root solo su percona1 server

[[email protected] ~]# systemctl start mysql
[[email protected] ~]# grep password /var/log/mysqld.log
2019-12-11T10:35:12.135133Z 1 [Note] A temporary password is generated for [email protected]: hJ(l8ySe>f>E

Note : copy the password "hJ(l8ySe>f>E" we are going to change this password :

[[email protected] ~]# mysql_secure_installation ------->on all server(percona1,percona2,percona3)

Securing the MySQL server deployment.
Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: 
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : yes
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : yes
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : yes
Success.

All done!

Ora ferma il server MySQL su percona1.

[[email protected] ~]# systemctl stop mysql

Ora configureremo la nostra replica, aggiungeremo le informazioni sulla replica nel file my.cnf.

Configura le impostazioni di replica su percona1:
cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona1
wsrep_node_address=192.168.56.110
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ora inizializza il cluster eseguendo il bootstrap del primo nodo. Questo deve essere il nodo con il tuo database principale, che verrà utilizzato come origine dati per il cluster nel nostro caso è percona1 server

[[email protected] ~]# systemctl start [email protected]

Before configuring replication we need to create a separate user for replication which will be used for the replication process. why we need replication user? when you add a new node to the cluster it dumps the current node configuration and transfers it to the second node for that reason we need a separate user.

NOTA: Assicurati che l'utente sia lo stesso menzionato rispetto alla variabile "wsrep_sst_auth" nella configurazione di replica utilizzata nel file my.cnf.

[[email protected] ~]#mysql -u root -p 
mysql>create user [email protected]'%' identified by 'perconapasswd';
mysql>grant all on *.* to [email protected]'%';
mysql>flush privileges;
ON Percona2:

Configura le impostazioni di replica su percona2:

cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona2
wsrep_node_address=192.168.56.113
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ora avvia mysql e questo aggiungerà questo nodo al cluster.

[[email protected] ~]# systemctl start mysql
ON Percona3:

Configura le impostazioni di replica su percona3:

cat >>/etc/my.cnf<<EOF
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=perconacluster
wsrep_cluster_address=gcomm://192.168.56.110,192.168.56.113,192.168.56.114
wsrep_node_name=percona3
wsrep_node_address=192.168.56.114
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=perconarep:perconapasswd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
EOF

Ora avvia mysql e questo aggiungerà questo nodo al cluster.

[[email protected] ~]# systemctl start mysql

osserverai tali messaggi nel log di mysql (var/log/mysqld.log)

(percona2):trasferimento statale da 0,0 (percona1) completato

1.0 (percona3):trasferimento statale da 0.0 (percona1) completato

Per assicurarti che il cluster sia stato inizializzato, esegui quanto segue:

mysql> show status like 'wsrep%';
+----------------------------------+-------------------------------------------------------------+
| Variable_name | Value |
+----------------------------------+-------------------------------------------------------------+
| wsrep_local_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
| wsrep_protocol_version | 9 |
| wsrep_last_applied | 6 |
.
.
.
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_interval | [ 173, 173 ] |
| wsrep_flow_control_interval_low | 173 |
| wsrep_flow_control_interval_high | 173 |
| wsrep_flow_control_status | OFF |
.
.
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_cert_index_size | 1 |
| wsrep_cert_bucket_count | 22 |
| wsrep_gcache_pool_size | 2384 |
.
.
| wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306 |
| wsrep_cluster_weight | 3 |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | OPERATIONAL |
| wsrep_gcomm_uuid | 1d16f574-1c1b-11ea-b5dd-574c9a653584 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 6d95cd36-1c1a-11ea-999a-83631204f6e3 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 0 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <[email protected]> |
| wsrep_provider_version | 3.39(rb3295e6) |
| wsrep_ready | ON |
+----------------------------------+-------------------------------------------------------------+
71 rows in set (0.00 sec)

Come puoi vedere, la dimensione del cluster è 3 “wsrep_cluster_size | 3” e puoi anche vedere l'IP dei nostri tre nodi
wsrep_incoming_addresses | 192.168.56.110:3306,192.168.56.114:3306,192.168.56.113:3306

Testa il nostro cluster:

Sto creando un database su percona 1 e poi verificheremo su percoan 3 che sia stato replicato.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.03 sec)
mysql> CREATE DATABASE perconatest;
Query OK, 1 row affected (0.03 sec)

Ora controlliamo su percona3 vedremo che verrà creato il DB 'perconatest'

[[email protected] ~]# mysql -uroot -p -e "show databases"
Enter password: 
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| perconatest |
| performance_schema |
| sys |
+--------------------+