GNU/Linux >> Linux Esercitazione >  >> Linux

Come costruire un cluster attivo-attivo-attivo con RHEL 8 e Percona MySQL

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.pemserver-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.


Linux
  1. Come creare un database in MySQL con MySQL Workbench

  2. Come installare Lighttpd con PHP5 FastCGI e MySQL su openSUSE 12.1

  3. Come installare Nginx con PHP-FPM e MySQL su openSUSE 12.1

  4. Come configurare LogAnalyzer con Rsyslog e MySQL

  5. Come attivare e montare 2 gruppi di volumi con gli stessi nomi in CentOS/RHEL

Come installare Lighttpd con PHP-FPM 7 e MySQL 5.7 su Ubuntu 18.04 LTS

Come configurare il cluster Percona con HAproxy Loadbalancer su CentOS 7

Come distribuire CouchDB come cluster con Docker

Come eseguire il multi-master MySQL con Percona e Keepalived

Come distribuire un'applicazione PHP con Nginx e MySQL utilizzando Docker e Docker Compose

Come configurare il cluster Linux con 2 nodi su RedHat e CentOS