In passato, la creazione di un servizio MySQL multimaster sicuro e tollerante ai guasti era complicato. Richiedeva diversi passaggi e pacchetti dipendenti. Configurazione della replica, sincronizzazione dei dati e più file di configurazione aggiunti alla complessità. La creazione di una soluzione su un sistema operativo rinforzato come Red Hat Enterprise Linux (RHEL) 8 e l'utilizzo di una distribuzione MySQL multi-master professionale di Percona rende tutto più semplice. Questa guida ti mostra come.
Schema architettonico:
[ Potresti anche divertirti con: Continua e alta disponibilità:argomenti avanzati ]
Installa il software del cluster
Esegui i seguenti comandi su tutti e tre i server (DB1 , DB2 e DB3 ):
# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# percona-release enable-only pxc-80 release
# percona-release enable tools release
# yum repolist
Updating Subscription Management repositories.
repo id repo name
prel-release-noarch Percona Release release/noarch YUM repository
pxc-80-release-x86_64 Percona XtraDB Cluster 8.0 release/x86_64 YUM repository
rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
satellite-tools-6.8-for-rhel-8-x86_64-rpms Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs)
tools-release-x86_64 Percona Tools release/x86_64 YUM repository
Poiché i repository RHEL 8 includono una versione di MySQL, è necessario disabilitarne l'accesso affinché l'installazione di Percona venga completata correttamente.
# yum -y module disable mysql
# yum -y install percona-xtradb-cluster
Configura il cluster
Sul DB1 server, avviare il servizio database per accedervi tramite il client MySQL in modo da aggiornare la password predefinita e consentire a qualsiasi host di connettersi in remoto per la gestione:
# systemctl start mysql
# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p
Modifica la password di root predefinita con ALTER
comando:
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';
Abilita l'accesso da qualsiasi host con UPDATE
comando:
# mysql> UPDATE mysql.user SET host='%' WHERE user='root';
Esci dall'amministrazione di MySQL:
# mysql> exit
Sul DB1 server, interrompere il servizio database:
# systemctl stop mysql
Sul DB2 e DB3 server, avviare/arrestare il servizio MySQL per creare le strutture di file iniziali:
# systemctl start mysql
# systemctl stop mysql
Su tutti i server di database nel cluster (DB1 , DB2 e DB3 ) assicurati il file di configurazione /etc/my.cnf
contiene i seguenti campi univoci:
wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=
Aggiungi l'indirizzo IP di ciascun server di database. Ecco come comunica il cluster ea chi:
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
Aggiungi un nome cluster univoco. Questo deve essere lo stesso su tutti i server nel cluster. Questo identificherà il cluster da altri cluster:
wsrep_cluster_name=pxc-cluster
Aggiungi un nome di nodo univoco e il relativo indirizzo IP. Il cluster deve avere un modo per identificare ogni nodo:
wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91
Esegui questo comando su ciascun server di database per assicurarti che le impostazioni che hai effettuato siano corrette:
[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.91
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db1
[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.92
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db2
[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.93
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db3
Avvia il cluster
Una volta che la configurazione è corretta, il passaggio successivo è avviare il DB1 server. Questo viene fatto con un servizio speciale chiamato [email protected] :
# systemctl start [email protected]
Accedi per verificare lo stato con i seguenti comandi:
# mysql -u root -p
# mysql> show status like 'wsrep%';
Cerca wsrep_cluster_size, che dovrebbe essere 1 , poiché l'unico server nel cluster in questo momento è DB1 .
Il servizio bootstrap genera i certificati di sicurezza TLS utilizzati per le comunicazioni cluster sicure. Copia questi file in /var/lib/mysql
sugli altri due server di database:server-key.pem
,ca.pem
e server-cert.pem
# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/
Configura il firewall per operazioni di cluster sicure
Il cluster Percona richiede che le seguenti quattro porte siano aperte per funzionare correttamente:3306, 4444, 4567 e 4568. Esegui questi comandi firewall su tutti e tre i server (DB1 , DB2 e DB3 ) per configurarli.
Assicurati che il firewalld il servizio è in esecuzione:
# systemctl enable firewalld
# systemctl start firewalld
La zona predefinita è pubblica , quindi, a meno che tu non lo abbia modificato, puoi aggiungere le quattro porte richieste in questo modo:
# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent
# firewall-cmd --add-port 4568/tcp --zone=public --permanent
Oppure, se preferisci, aggiungi più porte contemporaneamente da un unico comando:
# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent
Ricarica il firewalld service con il comando seguente e quindi elenca le porte per confermare che il servizio è configurato come previsto:
# firewall-cmd --reload
# firewall-cmd --list-ports
3306/tcp 4444/tcp 4567/tcp 4568/tcp
Puoi trovare maggiori informazioni sul firewall RHEL 8 qui.
Fai crescere il cluster
Ora è il momento di aggiungere più server al cluster esistente di uno attualmente in esecuzione dopo il bootstrap. L'obiettivo è aggiungere entrambi i DB2 e DB3 al cluster in esecuzione su DB1 .
Uno alla volta, avvia il servizio MySQL su ciascun server, aspettando che finisca prima di passare al server successivo.
Su DB2 , digita:
# systemctl start mysql
Fai lo stesso su DB3 :
# systemctl start mysql
Su DB1 , tail
il mysql.log
file per verificare la presenza di nuovi server che si uniscono al cluster. Questo ti consentirà di sapere se le cose stanno funzionando come previsto o se si verificano errori durante la fase di unione del cluster:
# tail -f /var/log/mysqld.log | grep db3
2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3)
0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3
2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.
2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete.
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0
(pxc-cluster-node-db1) complete.
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.
Nell'output del file di registro sopra, puoi vedere che DB3 si è unito al cluster, ha richiesto il trasferimento dello stato e ha sincronizzato correttamente i suoi dati da DB1. Un altro modo per verificare la dimensione del cluster consiste nell'accedere a qualsiasi server membro del cluster ed eseguire questi comandi:
# mysql -u root -p
# mysql> show status like 'wsrep%';
Cerca wsrep_cluster_size , che dovrebbe essere 3 , poiché tutti e tre i server (DB1 , DB2 e DB3 ) si sono uniti al cluster ora.
Cerca wsrep_incoming_addresses , che dovrebbe mostrare tutti e tre gli indirizzi IP del server. Ancora una volta, questo è un altro modo per confermare che tutti i server sono nel cluster e comunicano correttamente.
Test dei cluster
Ora che disponi di un cluster a tre nodi attivo e funzionante, devi testare le funzionalità attivo-attivo-attivo.
Sul server DB1 , crea un nuovo database con il seguente comando:
# mysql -u root -p
# mysql> create database myACTIVEdb;
Sul server DB2 o DB3 , esegui i seguenti comandi per verificare se il database appena creato viene visualizzato:
# mysql -u root -p
# mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myACTIVEdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Il nuovo database dovrebbe apparire quasi immediatamente. Indipendentemente da quali scritture del server vengono eseguite, i dati vengono replicati sugli altri server di database. Congratulazioni, ora hai un server MySQL Percona a tre nodi, attivo-attivo-attivo in esecuzione su RHEL 8!
Manutenzione del cluster
Di tanto in tanto, uno dei server di database potrebbe necessitare di manutenzione che richiede un riavvio. Dovresti sempre spegnere correttamente il servizio MySQL prima di riavviare:
# systemctl stop mysql
Questo comando può richiedere del tempo, poiché prepara il cluster a essere in uno stato interrotto. Lascia che si spenga correttamente per sincronizzare e aggiornare lo stato del cluster su tutti i server.
Riavvia il server in manutenzione, quindi unisciti nuovamente al cluster con il comando seguente:
# systemctl start mysql
L'integrità del cluster dipende dal mantenimento del quorum . Ricorda sempre di mantenere attivo e funzionante una dimensione superiore alla metà del cluster. Per un gruppo di tre, il quorum sarebbe due. Per un gruppo di cinque, il quorum sarebbe tre. Far crescere il grappolo da tre a cinque è facile; ripeti semplicemente i passaggi descritti sopra. È consigliabile avere un numero dispari di server nel cluster, per semplificare la gestione del quorum.
Se l'intero cluster è spento e deve essere riavviato, ricordarsi di selezionare un server per avviare il cluster. Questo viene fatto con il processo di bootstrap. Ad esempio, su DB1 :
# systemctl start [email protected]
Sugli altri due server, uniscili una volta completato il processo di bootstrap, con il seguente comando:
# systemctl start mysql
Il cluster è ora attivo e operativo.
SELinux
RHEL 8 viene fornito con SELinux in Applicazione modalità. Red Hat, Percona e MySQL hanno svolto un buon lavoro con SELinux che ha funzionato immediatamente in Applicazione modalità. Non è necessario apportare modifiche. Puoi trovare maggiori dettagli sul sito Web di Percona se è necessario modificare le modifiche a determinati parametri di configurazione di Percona.
[ Ottieni questo ebook gratuito:Gestione dei cluster Kubernetes per i manichini. ]
Concludi
RHEL 8 fornisce una piattaforma per i carichi di lavoro del database che è allo stesso tempo supportabile e offre prestazioni eccezionali. Percona ha fatto un ottimo lavoro nel confezionare un'implementazione multi-master facile da implementare del server MySQL tenendo conto dei dettagli di sicurezza.