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

Come distribuire Percona XtraDB Cluster 8 per l'alta disponibilità

Percona XtraDB Cluster 8.0 è basato su Percona Server per MySQL 8.0 integrato con l'API di replica del set di scrittura Galera e la libreria di replica Galera, per formare una replica multi-master ad alta disponibilità per il server di database basato su MySQL. Percona XtraDB Cluster viene fornito con il motore di archiviazione XtraDB (un sostituto drop-in di InnoDB) e segue molto da vicino le versioni di Oracle MySQL a monte (incluse tutte le correzioni di bug in esso contenute), con alcune variabili aggiuntive e lo stato specifici per questa build.

In questo post del blog, esamineremo come distribuire un Percona XtraDB Cluster 8.0 per un'elevata disponibilità utilizzando il modo manuale e automatizzato.

Caratteristiche notevoli

Prima di andare oltre con i passaggi di distribuzione, vale la pena menzionare le caratteristiche notevoli e i miglioramenti significativi in ​​questa versione principale che si basa su Percona Server per MySQL 8.0 (senza plug-in di replica di gruppo) e Galera 4:

  • Replica in streaming:consente alla replica del writeset di elaborare transazioni di dati di grandi dimensioni in frammenti più piccoli e più gestibili, riducendo al minimo i conflitti di dati.
  • Le funzioni di sincronizzazione MySQL per il coordinamento delle azioni (wsrep_last_seen_gtid, wsrep_last_write_gtid, wsrep_sync_wait_upto_gtid).
  • Nuove tabelle di sistema Galera, che aiuteranno a monitorare lo stato del cluster sotto lo schema "mysql" - wsrep_cluster, wsrep_cluster_members e wsrep_streaming_log.
  • Crittografia Gcache.
  • L'infrastruttura wsrep di Galera 4 è più robusta di quella di Galera 3. Presenta un'esecuzione più rapida del codice con una migliore gestione dello stato, una migliore prevedibilità e gestione degli errori.

Per un elenco completo delle modifiche, consulta le note di rilascio.

Distribuzione manuale di Percona XtraDB Cluster 8.0

Passaggi di installazione

Per il Cluster Percona XtraDB, abbiamo bisogno di almeno tre nodi:

  • db1 (192.168.20.61)
  • db2 (192.168.20.62)
  • db3 (192.168.20.63)

I passaggi descritti in questa sezione devono essere eseguiti su tutti i nodi del database (db1, db2 e db3) in esecuzione su CentOS 8. Innanzitutto, disabilita SELinux (altrimenti il ​​processo IST fallirebbe):

$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

Installa il pacchetto del repository Percona:

$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

L'ultima versione stabile a questo punto è Percona XtraDB Cluster 8.0, ma per impostazione predefinita, il pacchetto del repository è configurato fino alla versione 5.7. Il pacchetto percona-release contiene uno script che può abilitare repository aggiuntivi per i prodotti più recenti. Eseguiamo lo script e abilitiamo il repository specifico di pxc80:

$ percona-release setup pxc80
* Disabling all Percona Repositories

On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]

Scegli "y" per disabilitare il modulo mysql DNF. Ciò è necessario per dare priorità al repository Percona per i pacchetti relativi a MySQL.

Quindi, installa l'ultimo Percona XtraDB Cluster e Percona Xtrabackup:

$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80

In questo momento, dovresti avere installato un Percona XtraDB Cluster 8.0.0-11.3. Tutti i pacchetti di dipendenze verranno installati come pacchetti condivisi, condivisi e client. Possiamo quindi avviare il servizio MySQL per la configurazione iniziale:

$ systemctl start mysql

Una nuova password di root verrà generata durante il primo avvio. Dobbiamo recuperare prima le informazioni sulla password di root dal log degli errori MySQL (l'impostazione predefinita è /var/log/mysqld.log nei sistemi basati su RHEL):

$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk

Come puoi vedere la password generata è "

$ mysql_secure_installation

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 COMPONENT 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 component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Using existing password for root.
Estimated strength of the password: 100

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

New password:

Re-enter new password:

Estimated strength of the password: 100

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

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) : y
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) : y
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) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

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) : y

Success.

All done!

La password di root generata scadrà immediatamente al primo accesso di root. Lo script di supporto sopra ci aiuta a configurare una nuova password di root MySQL, impostare la politica di convalida della password, disabilitare l'accesso remoto per root, rimuovere il database di test e gli utenti anonimi e anche ricaricare le tabelle dei privilegi.

Il file di configurazione predefinito (/etc/my.cnf) è configurato con una stringa di connessione gcomm:// vuota nella variabile wsrep_cluster_address, come mostrato di seguito:

wsrep_cluster_address=gcomm://

La riga sopra deve essere impostata con un elenco di indirizzi IP di tutti i nodi partecipanti nel cluster. Se hai saltato questo passaggio, un nuovo cluster Galera verrebbe creato su ogni nodo (3 cluster separati da 1 nodo) dopo l'avvio del servizio su ogni nodo. Pertanto, le seguenti righe dovrebbero essere modificate di conseguenza nella sezione [mysqld]:

wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF

Prevedi che wsrep_cluster_address sia identico in tutti gli host di database, mentre wsrep_node_address e wsrep_node_name devono essere distinti su ogni host di database. L'ultima riga pxc-encrypt-cluster-traffic=OFF significa che vorremmo disabilitare la crittografia per il traffico del cluster. Tieni presente che questo è intenzionale per semplificare i nostri passaggi di distribuzione, altrimenti dovremmo eseguire passaggi di gestione delle chiavi/certificati. Se desideri abilitare la crittografia, consulta questo articolo.

Ripetere i passaggi precedenti per i restanti nodi del database prima di procedere con il bootstrap del cluster.

Riavvio del cluster

Galera richiede di avviare un nodo in un cluster come punto di riferimento prima che i nodi rimanenti possano unirsi e formare il cluster. Questo processo è noto come bootstrap del cluster. Il bootstrap è un passaggio iniziale per introdurre un nodo di database come componente principale prima che altri lo vedano come punto di riferimento per sincronizzare i dati.

In questo esempio, useremo db1 come nodo di riferimento e lo avvieremo con il comando bootstrap (potresti scegliere anche altri nodi poiché questo è un nuovo cluster senza dati):

$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]

Una volta avviato, possiamo avviare gli altri nodi (db2 e db3) con il comando di avvio standard (un nodo alla volta):

$ systemctl stop mysql
$ systemctl start mysql

Puoi verificare con la seguente riga all'interno di /var/log/mysqld.log:

2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections

A questo punto, il nostro servizio Cluster Percona XtraDB è stato avviato e la distribuzione manuale è ora completata. Per ulteriori informazioni sul processo di bootstrap del cluster Percona XtraDB, consulta questo post del blog How to Bootstrap MySQL o MariaDB Galera Cluster.

Distribuzione automatica con ClusterControl

Esistono due modi per distribuire un Percona XtraDB Cluster 8.0 utilizzando ClusterControl. È possibile utilizzare ClusterControl UI (GUI basata sul Web) o ClusterControl CLI denominata s9s. Ti mostreremo entrambi i modi in questa sezione. ClusterControl deve risiedere su un host separato, lontano dal cluster di database. Pertanto, la nostra architettura può essere illustrata in questo modo:

Installazione di ClusterControl

SSH nel server ClusterControl e installare ClusterControl con i seguenti comandi:

$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc

Segui la procedura guidata di installazione fino al termine dell'installazione. Al termine dell'installazione, apri il browser web e vai a http://192.168.20.19/clustercontrol . Crea un utente amministratore e la licenza verrà installata automaticamente. Tutte le nuove installazioni vengono fornite con una licenza di prova per l'edizione Enterprise per 30 giorni. Una volta scaduta questa licenza di prova, tornerà per impostazione predefinita all'edizione community, che è gratuita per sempre.

SSH senza password

ClusterControl richiede la configurazione di SSH senza password dal server ClusterControl a tutti i nodi gestiti. Per ottenere ciò, dobbiamo prima generare una chiave SSH sul server ClusterControl. L'utente SSH deve disporre di un privilegio di superutente (sudo o root). In questo caso, utilizzeremo l'utente root:

$ whoami
root

Ora genera una chiave SSH per l'utente root:

$ ssh-keygen -t rsa # press Enter on all prompts

Quindi, copia la chiave pubblica su tutti i nodi del database che andremo a distribuire e gestire. In questo caso, tutti e 3 i nodi Galera:

$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

Inserisci la password di root dei rispettivi host quando richiesto.

Provalo con il seguente comando e assicurati di ottenere una risposta corretta:

$ ssh [email protected] "ls /root"

Ora siamo pronti per distribuire il nostro cluster utilizzando ClusterControl UI o CLI, come mostrato nelle prossime sezioni.

Distribuzione PXC tramite l'interfaccia utente ClusterControl

È praticamente facile distribuire un cluster Percona XtraDB con ClusterControl e, per impostazione predefinita, ClusterControl configurerà il cluster con la crittografia Galera abilitata. Dopo aver configurato l'SSH senza password, vai su ClusterControl -> Deploy -> MySQL Galera e specifica i dettagli richiesti come di seguito:

Quindi, fai clic su "Continua" per procedere al passaggio successivo in cui configuriamo la specifica MySQL:

Scegli "Percona" per il fornitore e 8.0 come versione. Mantieni il resto come predefinito e inserisci la password di root di MySQL. Specificare uno per uno l'indirizzo IP o il nome host degli host del database e assicurarsi di visualizzare le icone di spunta verde dopo ogni inserimento. Ciò indica che ClusterControl è in grado di raggiungere gli host corrispondenti tramite SSH senza password con l'utente e la chiave SSH forniti come definito nel passaggio 1. Fare clic sul pulsante "Distribuisci" per avviare la distribuzione.

ClusterControl avvia quindi un processo di distribuzione in cui è possibile monitorare lo stato di avanzamento della distribuzione andando su ClusterControl -> Attività -> Lavori -> Crea cluster -> Dettagli processo completo, come mostrato nella schermata seguente:

Una volta completato il processo, dovresti vedere che il cluster è elencato nella Dashboard :

Ecco fatto. La distribuzione è ora completa.

Distribuzione PXC tramite ClusterControl CLI

Se preferisci distribuire il cluster utilizzando la riga di comando, possiamo semplicemente utilizzare lo strumento client della riga di comando ClusterControl chiamato "s9s". Questo strumento invierà un lavoro di distribuzione al controller ClusterControl ed eseguirà tutti i passaggi necessari per distribuire il cluster.

Eseguire il comando seguente sul server ClusterControl:

$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log

Vedrai apparire i messaggi di lavoro e potrai monitorare lo stato di avanzamento della distribuzione e puoi anche monitorare lo stato di avanzamento del lavoro da ClusterControl UI -> Attività -> Lavori . Attendi 15-20 minuti (a seconda della connessione Internet) finché non viene visualizzata la notifica di completamento del lavoro. Il nostro Percona XtraDB Cluster 8.0 è ora distribuito e puoi vederlo elencato nell'interfaccia utente di ClusterControl.