sql >> Databasteknik >  >> RDS >> Mysql

Hur man distribuerar Percona XtraDB Cluster 8 för hög tillgänglighet

Percona XtraDB Cluster 8.0 är baserat på Percona Server för MySQL 8.0 inbäddad med Galera Writeset-replikerings-API och Galera-replikeringsbibliotek, för att bilda en högtillgänglig multimasterreplikering för MySQL-baserad databasserver. Percona XtraDB Cluster kommer med XtraDB-lagringsmotor (en drop-in ersättning för InnoDB) och följer uppströms Oracle MySQL-utgåvorna mycket noga (inklusive alla buggfixar i den), med några ytterligare variabler och statusspecifika för denna build.

I det här blogginlägget kommer vi att undersöka hur man distribuerar ett Percona XtraDB Cluster 8.0 för hög tillgänglighet på det manuella och automatiserade sättet.

Anmärkningsvärda funktioner

Innan vi går vidare med implementeringsstegen är det värt att nämna anmärkningsvärda funktioner och betydande förbättringar i denna stora version som är baserad på Percona Server för MySQL 8.0 (utan Group Replication-plugin) och Galera 4:

  • Strömmande replikering – Detta tillåter replikering av skrivuppsättningar för att bearbeta stora datatransaktioner i mindre, mer hanterbara fragment, vilket minimerar datakonflikter.
  • Synkroniseringen MySQL-funktioner för åtgärdskoordinering (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
  • Nya Galera-systemtabeller, som hjälper till att övervaka klustrets tillstånd under "mysql"-schemat - wsrep_cluster, wsrep_cluster_members och wsrep_streaming_log.
  • Gcache-kryptering.
  • Wsrep-infrastrukturen i Galera 4 är mer robust än den i Galera 3. Den har en snabbare exekvering av kod med bättre tillståndshantering, förbättrad förutsägbarhet och felhantering.

För en fullständig lista över ändringar, kolla in release notes.

Manuell distribution av Percona XtraDB Cluster 8.0

Installationssteg

För Percona XtraDB-klustret behöver vi minst tre noder:

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

Stegen som beskrivs i det här avsnittet bör utföras på alla databasnoder (db1, db2 och db3) som körs på CentOS 8. Inaktivera först SELinux (annars skulle IST-processen misslyckas):

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

Installera Percona repository-paketet:

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

Den senaste stabila versionen för närvarande är Percona XtraDB Cluster 8.0, men som standard är repository-paketet konfigurerat fram till version 5.7. Percona-release-paketet innehåller ett skript som kan aktivera ytterligare förråd för de nyare produkterna. Låt oss köra det skriptet och aktivera det specifika arkivet för 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]

Välj "y" för att inaktivera mysql DNF-modulen. Detta är nödvändigt för att prioritera Percona-förvaret för MySQL-relaterade paket.

Installera sedan det senaste Percona XtraDB Cluster och Percona Xtrabackup:

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

I detta ögonblick bör du få ett Percona XtraDB Cluster 8.0.0-11.3 installerat. Alla beroendepaket kommer att installeras som shared-compat, shared och klientpaket. Vi kan sedan starta MySQL-tjänsten för initial konfiguration:

$ systemctl start mysql

Ett nytt root-lösenord kommer att genereras under den första uppstarten. Vi måste hämta informationen om root-lösenordet först från MySQL-felloggen (standard är /var/log/mysqld.log i RHEL-baserade system):

$ 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

Som du kan se är det genererade lösenordet "

$ 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!

Det genererade root-lösenordet kommer att upphöra att gälla omedelbart efter den första root-inloggningen. Ovanstående hjälpskript hjälper oss att konfigurera ett nytt MySQL root-lösenord, ställa in lösenordsvalideringspolicy, inaktivera fjärrinloggning för root, ta bort testdatabas och anonyma användare och även ladda om privilegietabellerna.

Standardkonfigurationsfilen (/etc/my.cnf) är konfigurerad med en tom gcomm://-anslutningssträng under variabeln wsrep_cluster_address, som visas nedan:

wsrep_cluster_address=gcomm://

Ovanstående rad måste ställas in med en lista över IP-adresser för alla deltagande noder i klustret. Om du missade det här steget skulle ett nytt Galera-kluster skapas på varje nod (3 separata 1-nodskluster) efter att tjänsten på varje nod startades. Därför bör följande rader modifieras i enlighet med detta under [mysqld]-sektionen:

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

Förvänta dig att wsrep_cluster_address ska vara identisk i alla databasvärdar, medan wsrep_node_address och wsrep_node_name måste vara distinkta på varje databasvärd. Den sista raden pxc-encrypt-cluster-traffic=OFF betyder att vi skulle vilja inaktivera kryptering för klustertrafiken. Observera att detta är avsiktligt för att förenkla våra implementeringssteg, annars skulle vi behöva utföra nyckel-/certhanteringssteg. Om du vill aktivera kryptering, se den här artikeln.

Upprepa stegen ovan för de återstående databasnoderna innan du fortsätter att bootstrap klustret.

Cluster Bootstrapping

Galera kräver att du startar en nod i ett kluster som en referenspunkt innan de återstående noderna kan gå med och bilda klustret. Denna process är känd som klusterbootstrap. Bootstrapping är ett första steg för att introducera en databasnod som den primära komponenten innan andra ser den som en referenspunkt för att synkronisera data.

I det här exemplet kommer vi att använda db1 som referensnod och starta den med kommandot bootstrap (du kan också välja andra noder eftersom detta är ett nytt kluster utan data):

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

När vi har startat kan vi starta de andra noderna (db2 och db3) med standardstartkommandot (en nod i taget):

$ systemctl stop mysql
$ systemctl start mysql

Du kan verifiera med följande rad inuti /var/log/mysqld.log:

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

Vid denna tidpunkt har vår Percona XtraDB Cluster-tjänst startat och den manuella distributionen är nu klar. För mer information om Percona XtraDB Cluster bootstrapping-processen, kolla in det här blogginlägget Hur man startar upp MySQL eller MariaDB Galera Cluster.

Automatisk distribution med ClusterControl

Det finns två sätt att distribuera ett Percona XtraDB Cluster 8.0 med ClusterControl. Du kan använda ClusterControl UI (webbaserat GUI) eller ClusterControl CLI som kallas s9s. Vi kommer att visa dig åt båda hållen i det här avsnittet. ClusterControl måste finnas på en separat värd, borta från ditt databaskluster. Därför kan vår arkitektur illustreras så här:

Installera ClusterControl

SSH till ClusterControl-servern och installera ClusterControl med följande kommandon:

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

Följ installationsguiden tills installationen är klar. När installationen är klar öppnar du webbläsaren och går till http://192.168.20.19/clustercontrol . Skapa en administratörsanvändare så kommer licensen att installeras automatiskt. Alla nya installationer kommer med en testlicens för företagsutgåva i 30 dagar. När den här testlicensen löper ut kommer den som standard tillbaka till community-utgåvan som är gratis för alltid.

Lösenordslös SSH

ClusterControl kräver att lösenordslös SSH konfigureras från ClusterControl-servern till alla hanterade noder. För att uppnå detta måste vi först skapa en SSH-nyckel på ClusterControl-servern. SSH-användaren måste ha en superanvändarbehörighet (sudo eller root). I det här fallet kommer vi att använda root-användaren:

$ whoami
root

Generera nu en SSH-nyckel för användarrot:

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

Kopiera sedan den publika nyckeln till alla databasnoder som vi ska distribuera och hantera. I det här fallet, alla tre Galera-noderna:

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

Ange root-lösenordet för respektive värddator när du uppmanas.

Testa det med följande kommando och se till att du får ett korrekt svar:

$ ssh [email protected] "ls /root"

Nu är vi redo att distribuera vårt kluster med ClusterControl UI eller CLI, som visas i nästa avsnitt.

PXC-distribution med ClusterControl UI

Det är praktiskt taget enkelt att distribuera ett Percona XtraDB-kluster med ClusterControl, och som standard kommer ClusterControl att konfigurera klustret med Galera-kryptering aktiverad. Efter att den lösenordslösa SSH har konfigurerats, gå till ClusterControl -> Deploy -> MySQL Galera och ange den nödvändiga informationen enligt nedan:

Klicka sedan på "Fortsätt" för att gå vidare till nästa steg där vi konfigurerar MySQL-specifikationen:

Välj "Percona" för leverantören och 8.0 som version. Behåll resten som standard och ange MySQL root-lösenordet. Ange IP-adressen eller värdnamnet för databasvärdarna en efter en och se till att du får de gröna bockikonerna efter varje infogning. Detta indikerar att ClusterControl kan nå motsvarande värdar via lösenordslös SSH med den angivna SSH-användaren och nyckeln som definieras i steg 1. Klicka på knappen "Distribuera" för att starta distributionen.

ClusterControl utlöser sedan ett distributionsjobb där du kan övervaka distributionsförloppet genom att gå till ClusterControl -> Aktivitet -> Jobb -> Skapa kluster -> Fullständig jobbinformation, som visas i följande skärmdump:

När processen är klar bör du se att klustret är listat i instrumentpanelen :

Det var allt. Distributionen är nu klar.

PXC-distribution med ClusterControl CLI

Om du föredrar att distribuera klustret med hjälp av kommandoraden kan vi helt enkelt använda kommandoradsklientverktyget ClusterControl som heter "s9s". Det här verktyget skickar ett distributionsjobb till ClusterControl-kontrollern och det kommer att utföra alla nödvändiga steg för att distribuera klustret.

Kör följande kommando på ClusterControl-servern:

$ 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

Du kommer att se att jobbmeddelandena ska visas och du kan övervaka driftsättningsförloppet där och du kan också övervaka jobbförloppet från ClusterControl UI -> Aktivitet -> Jobb . Vänta i 15-20 minuter (beroende på internetanslutning) tills du ser meddelandet om slutfört jobb. Vårt Percona XtraDB Cluster 8.0 är nu distribuerat och du kan se det listat i ClusterControl UI.


  1. MySQL-utlösare kan inte uppdatera rader i samma tabell som utlösaren är tilldelad. Föreslagen lösning?

  2. Varför du bör använda PHPs PDO för databasåtkomst

  3. Ändra lösenord med Oracle SQL Developer

  4. Hur får jag asynkront/händelsedrivet LISTEN/NOTIFY-stöd i Java med hjälp av en Postgres-databas?