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

Sådan implementeres Percona XtraDB Cluster 8 for høj tilgængelighed

Percona XtraDB Cluster 8.0 er baseret på Percona Server til MySQL 8.0 indlejret med Galera-skrivesæt-replikerings-API og Galera-replikeringsbibliotek for at danne en meget tilgængelig multi-master-replikering til MySQL-baseret databaseserver. Percona XtraDB Cluster leveres med XtraDB-lagringsmotor (en drop-in-erstatning af InnoDB) og følger opstrøms Oracle MySQL-udgivelser meget tæt (inklusive alle fejlrettelserne i den), med nogle yderligere variabler og status, der er specifikke for denne build.

I dette blogindlæg skal vi se på, hvordan man implementerer en Percona XtraDB Cluster 8.0 for høj tilgængelighed ved hjælp af den manuelle og automatiserede måde.

Bemærkelsesværdige funktioner

Før vi går videre med implementeringstrinnene, er det værd at nævne bemærkelsesværdige funktioner og væsentlige forbedringer i denne store version, som er baseret på Percona Server til MySQL 8.0 (uden Group Replication plugin) og Galera 4:

  • Streaming-replikering – Dette tillader skrivesætreplikering at behandle store datatransaktioner i mindre, mere håndterbare fragmenter, hvilket minimerer datakonflikter.
  • Synkroniseringen MySQL-funktioner til handlingskoordinering (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
  • Nye Galera-systemtabeller, som vil hjælpe med at overvåge klyngens tilstand under "mysql"-skemaet - wsrep_cluster, wsrep_cluster_members og wsrep_streaming_log.
  • Gcache-kryptering.
  • Wsrep-infrastrukturen i Galera 4 er mere robust end den i Galera 3. Den har en hurtigere udførelse af kode med bedre tilstandshåndtering, forbedret forudsigelighed og fejlhåndtering.

For en komplet liste over ændringer, tjek udgivelsesbemærkningerne.

Manuel implementering af Percona XtraDB Cluster 8.0

Installationstrin

Til Percona XtraDB Cluster har vi brug for mindst tre noder:

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

De trin, der er beskrevet i dette afsnit, skal udføres på alle databasenoder (db1, db2 og db3), der kører på CentOS 8. Deaktiver først SELinux (ellers ville IST-processen mislykkes):

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

Installer Percona repository-pakken:

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

Den seneste stabile version på dette tidspunkt er Percona XtraDB Cluster 8.0, men som standard er repository-pakken konfigureret indtil version 5.7. Percona-release-pakken indeholder et script, der kan aktivere yderligere repositories til de nyere produkter. Lad os køre det script og aktivere det pxc80-specifikke lager:

$ 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ælg "y" for at deaktivere mysql DNF-modulet. Dette er nødvendigt for at prioritere Percona-lageret til MySQL-relaterede pakker.

Installer derefter den seneste Percona XtraDB Cluster og Percona Xtrabackup:

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

På dette tidspunkt bør du få installeret en Percona XtraDB Cluster 8.0.0-11.3. Alle afhængighedspakker vil blive installeret som shared-compat, shared og client-pakker. Vi kan derefter starte MySQL-tjenesten til indledende konfiguration:

$ systemctl start mysql

En ny root-adgangskode vil blive genereret under den første opstart. Vi skal først hente oplysninger om root-adgangskoden fra MySQL-fejlloggen (standard er /var/log/mysqld.log i RHEL-baserede systemer):

$ 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 er den genererede adgangskode "

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

Den genererede root-adgangskode vil blive udløbet umiddelbart efter det første root-login. Ovenstående hjælpescript hjælper os med at konfigurere en ny MySQL root-adgangskode, indstille adgangskodevalideringspolitik, deaktivere fjernlogin for root, fjerne testdatabase og anonyme brugere og også genindlæse privilegietabellerne.

Standardkonfigurationsfilen (/etc/my.cnf) er konfigureret med en tom gcomm://-forbindelsesstreng under wsrep_cluster_address-variablen, som vist nedenfor:

wsrep_cluster_address=gcomm://

Ovenstående linje skal angives med en liste over IP-adresser på alle deltagende noder i klyngen. Hvis du gik glip af dette trin, ville der blive oprettet en ny Galera-klynge på hver node (3 separate 1-node-klynge), efter at tjenesten på hver node blev startet. Derfor bør følgende linjer ændres i overensstemmelse hermed 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

Forvent at wsrep_cluster_addressen er identisk i alle databaseværter, mens wsrep_node_address og wsrep_node_name skal være forskellige på hver databasevært. Den sidste linje pxc-encrypt-cluster-traffic=OFF betyder, at vi gerne vil deaktivere kryptering for klyngetrafikken. Bemærk, at dette er bevidst for at forenkle vores implementeringstrin, ellers ville vi være nødt til at udføre nøgle-/certstyringstrin. Se denne artikel, hvis du gerne vil aktivere kryptering.

Gentag ovenstående trin for de resterende databasenoder, før du fortsætter med at bootstrap klyngen.

Cluster Bootstrapping

Galera kræver, at du starter en node i en klynge som et referencepunkt, før de resterende noder er i stand til at slutte sig til og danne klyngen. Denne proces er kendt som cluster bootstrap. Bootstrapping er et indledende trin til at introducere en databasenode som den primære komponent, før andre ser den som et referencepunkt til at synkronisere data.

I dette eksempel vil vi bruge db1 som referencenoden og starte den med bootstrap-kommandoen (du kan også vælge andre noder, da dette er en ny klynge uden data):

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

Når vi er startet, kan vi starte de andre noder (db2 og db3) med standardstartkommandoen (en node ad gangen):

$ systemctl stop mysql
$ systemctl start mysql

Du kan bekræfte med følgende linje inde i /var/log/mysqld.log:

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

På dette tidspunkt er vores Percona XtraDB Cluster-tjeneste startet, og den manuelle implementering er nu fuldført. For mere information om Percona XtraDB Cluster bootstrapping-proces, tjek dette blogindlæg Sådan bootstraps MySQL eller MariaDB Galera Cluster.

Automatisk implementering med ClusterControl

Der er to måder, du kan implementere en Percona XtraDB Cluster 8.0 ved hjælp af ClusterControl. Du kan bruge ClusterControl UI (web-baseret GUI) eller ClusterControl CLI kaldet s9s. Vi viser dig begge veje i dette afsnit. ClusterControl skal ligge på en separat vært, væk fra din databaseklynge. Derfor kan vores arkitektur illustreres således:

Installation af ClusterControl

SSH ind i ClusterControl-serveren og installer ClusterControl med følgende kommandoer:

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

Følg installationsguiden, indtil installationen er færdig. Når installationen er fuldført, skal du åbne webbrowseren og gå til http://192.168.20.19/clustercontrol. Opret en admin-bruger, og licensen installeres automatisk. Alle nye installationer leveres med en prøvelicens til enterprise-udgave i 30 dage. Når denne prøvelicens udløber, vil den som standard vende tilbage til fællesskabsudgaven, som er gratis for evigt.

SSH uden adgangskode

ClusterControl kræver, at SSH uden adgangskode sættes op fra ClusterControl-serveren til alle de administrerede noder. For at opnå dette skal vi først generere en SSH-nøgle på ClusterControl-serveren. SSH-brugeren skal have et superbrugerprivilegium (sudo eller root). I dette tilfælde skal vi bruge root-brugeren:

$ whoami
root

Generer nu en SSH-nøgle til brugerrod:

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

Kopiér derefter den offentlige nøgle til alle databasenoder, som vi skal implementere og administrere. I dette tilfælde, alle 3 Galera noder:

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

Indtast root-adgangskoden for de respektive værter, når du bliver bedt om det.

Test det med følgende kommando, og sørg for, at du får et korrekt svar:

$ ssh [email protected] "ls /root"

Nu er vi klar til at implementere vores klynge ved hjælp af ClusterControl UI eller CLI, som vist i de næste afsnit.

PXC-implementering ved hjælp af ClusterControl UI

Det er praktisk talt nemt at implementere en Percona XtraDB Cluster med ClusterControl, og som standard vil ClusterControl konfigurere klyngen med Galera-kryptering aktiveret. Når den adgangskodeløse SSH er blevet konfigureret, skal du gå til ClusterControl -> Deploy -> MySQL Galera og angive de nødvendige detaljer som nedenfor:

Klik derefter på "Fortsæt" for at fortsætte til næste trin, hvor vi konfigurerer MySQL-specifikationen:

Vælg "Percona" for leverandøren og 8.0 som version. Behold resten som standard, og indtast MySQL root-adgangskoden. Angiv IP-adressen eller værtsnavnet på databaseværterne én efter én, og sørg for, at du får det grønne flueben efter hver indsættelse. Dette indikerer, at ClusterControl er i stand til at nå de tilsvarende værter via adgangskodefri SSH med den angivne SSH-bruger og nøgle som defineret i trin 1. Klik på knappen "Deploy" for at starte implementeringen.

ClusterControl udløser derefter et implementeringsjob, hvor du kan overvåge implementeringsprocessen ved at gå til ClusterControl -> Aktivitet -> Jobs -> Opret klynge -> Fuld jobdetaljer, som vist på følgende skærmbillede:

Når processen er fuldført, bør du se, at klyngen er opført i Dashboardet :

Det var det. Installationen er nu fuldført.

PXC-implementering ved hjælp af ClusterControl CLI

Hvis du foretrækker at implementere klyngen ved hjælp af kommandolinje, kan vi blot bruge ClusterControl-kommandolinjeklientværktøjet kaldet "s9s". Dette værktøj sender et implementeringsjob til ClusterControl-controlleren, og det udfører alle de nødvendige trin for at implementere klyngen.

Kør følgende kommando på ClusterControl-serveren:

$ 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 vil se, at jobmeddelelserne skal vises, og du kan overvåge implementeringsforløbet der, og du kan også overvåge jobfremskridtene fra ClusterControl UI -> Aktivitet -> Jobs . Vent i 15-20 minutter (afhængigt af internetforbindelsen), indtil du ser beskeden om fuldførelse af job. Vores Percona XtraDB Cluster 8.0 er nu implementeret, og du kan se det opført i ClusterControl UI.


  1. Sådan ændres mysql root-adgangskoden

  2. Stjerneskemaet

  3. Postgres og indekser på fremmednøgler og primærnøgler

  4. Clustered og Non Clustered Index:7 Top Points Forklaret