sql >> Database >  >> RDS >> Mysql

Percona XtraDB Cluster 8 implementeren voor hoge beschikbaarheid

Percona XtraDB Cluster 8.0 is gebaseerd op Percona Server voor MySQL 8.0, ingebed met Galera-schrijfsetreplicatie-API en Galera-replicatiebibliotheek, om een ​​zeer beschikbare multi-masterreplicatie te vormen voor op MySQL gebaseerde databaseserver. Percona XtraDB Cluster wordt geleverd met XtraDB-opslagengine (een drop-in-vervanging van InnoDB) en volgt de upstream Oracle MySQL-releases op de voet (inclusief alle bugfixes erin), met enkele extra variabelen en statusspecifiek voor deze build.

In deze blogpost gaan we kijken hoe u een Percona XtraDB Cluster 8.0 kunt implementeren voor hoge beschikbaarheid met behulp van de handmatige en geautomatiseerde manier.

Opmerkelijke kenmerken

Voordat we verder gaan met de implementatiestappen, is het de moeite waard om opmerkelijke functies en significante verbeteringen te noemen in deze belangrijke versie die is gebaseerd op Percona Server voor MySQL 8.0 (zonder Group Replication-plug-in) en Galera 4:

  • Streaming-replicatie - Hiermee kunnen schrijfset-replicatie grote gegevenstransacties in kleinere, beter beheersbare fragmenten verwerken, waardoor gegevensconflicten worden geminimaliseerd.
  • De synchronisatie MySQL-functies voor actiecoördinatie (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
  • Nieuwe Galera-systeemtabellen, die zullen helpen om de status van het cluster te bewaken onder het "mysql"-schema - wsrep_cluster, wsrep_cluster_members en wsrep_streaming_log.
  • Gcache-codering.
  • De wsrep-infrastructuur van Galera 4 is robuuster dan die van Galera 3. Het biedt een snellere uitvoering van code met betere statusafhandeling, verbeterde voorspelbaarheid en foutafhandeling.

Bekijk de release-opmerkingen voor een volledige lijst met wijzigingen.

Handmatige implementatie van Percona XtraDB Cluster 8.0

Installatiestappen

Voor de Percona XtraDB Cluster hebben we minimaal drie nodes nodig:

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

De stappen die in deze sectie worden beschreven, moeten worden uitgevoerd op alle databaseknooppunten (db1, db2 en db3) die op CentOS 8 draaien. Schakel eerst SELinux uit (anders zou het IST-proces mislukken):

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

Installeer het Percona-repositorypakket:

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

De nieuwste stabiele versie op dit moment is Percona XtraDB Cluster 8.0, maar standaard is het repositorypakket geconfigureerd tot versie 5.7. Het percona-releasepakket bevat een script dat extra opslagplaatsen voor de nieuwere producten kan inschakelen. Laten we dat script uitvoeren en de pxc80-specifieke repository inschakelen:

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

Kies "y" om de mysql DNF-module uit te schakelen. Dit is nodig om prioriteit te geven aan de Percona-repository voor MySQL-gerelateerde pakketten.

Installeer vervolgens de nieuwste Percona XtraDB Cluster en Percona Xtrabackup:

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

Op dit moment zou u een Percona XtraDB Cluster 8.0.0-11.3 moeten installeren. Alle afhankelijkheidspakketten worden geïnstalleerd, zoals shared-compat-, shared- en client-pakketten. We kunnen dan de MySQL-service starten voor de eerste configuratie:

$ systemctl start mysql

Er wordt een nieuw root-wachtwoord gegenereerd tijdens de eerste keer opstarten. We moeten eerst de root-wachtwoordinformatie ophalen uit het MySQL-foutlogboek (standaard is /var/log/mysqld.log in op RHEL gebaseerde systemen):

$ 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

Zoals je kunt zien is het gegenereerde wachtwoord "

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

Het gegenereerde root-wachtwoord zal onmiddellijk verlopen bij de eerste root-login. Het bovenstaande helperscript helpt ons een nieuw MySQL-rootwachtwoord te configureren, een wachtwoordvalidatiebeleid in te stellen, extern inloggen voor root uit te schakelen, testdatabase en anonieme gebruikers te verwijderen en ook de privilegetabellen opnieuw te laden.

Het standaardconfiguratiebestand (/etc/my.cnf) is geconfigureerd met een lege gcomm://-verbindingsreeks onder de variabele wsrep_cluster_address, zoals hieronder weergegeven:

wsrep_cluster_address=gcomm://

De bovenstaande regel moet worden ingesteld met een lijst met IP-adressen van alle deelnemende nodes in het cluster. Als u deze stap hebt gemist, wordt er op elk knooppunt (3 afzonderlijke cluster met 1 knooppunt) een nieuw Galera-cluster gemaakt nadat de service op elk knooppunt is gestart. Daarom moeten de volgende regels dienovereenkomstig worden gewijzigd in de sectie [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

Verwacht dat het wsrep_cluster_address identiek is in alle databasehosts, terwijl wsrep_node_address en wsrep_node_name verschillend moeten zijn op elke databasehost. De laatste regel pxc-encrypt-cluster-traffic=OFF betekent dat we de codering voor het clusterverkeer willen uitschakelen. Houd er rekening mee dat dit de bedoeling is om onze implementatiestappen te vereenvoudigen, anders zouden we sleutel-/certificaatbeheerstappen moeten uitvoeren. Raadpleeg dit artikel als u codering wilt inschakelen.

Herhaal de bovenstaande stappen voor de overige databaseknooppunten voordat u doorgaat met het opstarten van het cluster.

Cluster-bootstrapping

Galera vereist dat u een knooppunt in een cluster als referentiepunt start voordat de resterende knooppunten zich kunnen aansluiten en het cluster kunnen vormen. Dit proces staat bekend als clusterbootstrap. Bootstrapping is een eerste stap om een ​​databaseknooppunt te introduceren als het primaire onderdeel voordat anderen het zien als een referentiepunt om gegevens te synchroniseren.

In dit voorbeeld gaan we db1 gebruiken als referentieknooppunt en starten met het bootstrap-commando (u kunt ook andere knooppunten kiezen aangezien dit een nieuw cluster zonder gegevens is):

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

Eenmaal gestart, kunnen we de andere knooppunten (db2 en db3) starten met het standaard startcommando (één knooppunt tegelijk):

$ systemctl stop mysql
$ systemctl start mysql

Je kunt verifiëren met de volgende regel in /var/log/mysqld.log:

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

Op dit moment is onze Percona XtraDB Cluster-service gestart en is de handmatige implementatie nu voltooid. Raadpleeg deze blogpost How to Bootstrap MySQL of MariaDB Galera Cluster voor meer informatie over het bootstrapping-proces van Percona XtraDB Cluster.

Automatische implementatie met ClusterControl

Er zijn twee manieren waarop u een Percona XtraDB Cluster 8.0 kunt implementeren met ClusterControl. U kunt de ClusterControl UI (web-based GUI) of ClusterControl CLI genaamd s9s gebruiken. We laten u in deze sectie beide manieren zien. ClusterControl moet zich op een aparte host bevinden, weg van uw databasecluster. Daarom kan onze architectuur als volgt worden geïllustreerd:

ClusterControl installeren

SSH naar de ClusterControl-server en installeer ClusterControl met de volgende opdrachten:

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

Volg de installatiewizard totdat de installatie is voltooid. Nadat de installatie is voltooid, opent u de webbrowser en gaat u naar http://192.168.20.19/clustercontrol . Maak een admin-gebruiker aan en de licentie wordt automatisch geïnstalleerd. Alle nieuwe installaties worden geleverd met een proeflicentie voor de enterprise-editie gedurende 30 dagen. Zodra deze proeflicentie verloopt, wordt deze standaard teruggezet naar de community-editie die voor altijd gratis is.

SSH zonder wachtwoord

ClusterControl vereist dat SSH zonder wachtwoord wordt ingesteld vanaf de ClusterControl-server naar alle beheerde knooppunten. Om dit te bereiken, moeten we eerst een SSH-sleutel op de ClusterControl-server genereren. De SSH-gebruiker moet een supergebruikersprivilege hebben (sudo of root). In dit geval gaan we de rootgebruiker gebruiken:

$ whoami
root

Genereer nu een SSH-sleutel voor gebruiker root:

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

Kopieer vervolgens de openbare sleutel naar alle databaseknooppunten die we gaan implementeren en beheren. In dit geval alle 3 Galera-knooppunten:

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

Voer het root-wachtwoord van de respectievelijke hosts in wanneer daarom wordt gevraagd.

Test het uit met het volgende commando en zorg ervoor dat je een correct antwoord krijgt:

$ ssh [email protected] "ls /root"

Nu zijn we klaar om ons cluster te implementeren met ClusterControl UI of CLI, zoals weergegeven in de volgende secties.

PXC-implementatie met ClusterControl UI

Het is praktisch eenvoudig om een ​​Percona XtraDB-cluster te implementeren met ClusterControl, en standaard zal ClusterControl het cluster configureren met Galera-codering ingeschakeld. Nadat de wachtwoordloze SSH is geconfigureerd, gaat u naar ClusterControl -> Deploy -> MySQL Galera en specificeert u de vereiste details zoals hieronder:

Klik vervolgens op "Doorgaan" om door te gaan naar de volgende stap waar we configureren de MySQL-specificatie:

Kies "Percona" voor de leverancier en 8.0 als de versie. Houd de rest als standaard en voer het MySQL-rootwachtwoord in. Geef het IP-adres of de hostnaam van de database-hosts één voor één op en zorg ervoor dat u na elke invoeging de groene vinkjes krijgt. Dit geeft aan dat ClusterControl de corresponderende hosts kan bereiken via SSH zonder wachtwoord met de verstrekte SSH-gebruiker en sleutel zoals gedefinieerd in stap 1. Klik op de knop "Deploy" om de implementatie te starten.

ClusterControl activeert vervolgens een implementatietaak waar u de voortgang van de implementatie kunt volgen door naar ClusterControl -> Activiteit -> Taken -> Cluster maken -> Volledige taakdetails te gaan, zoals weergegeven in de volgende schermafbeelding:

Zodra het proces is voltooid, zou u moeten zien dat het cluster wordt vermeld in het Dashboard :

Dat is het. De implementatie is nu voltooid.

PXC-implementatie met ClusterControl CLI

Als u de cluster liever via de opdrachtregel implementeert, kunnen we eenvoudig de ClusterControl-opdrachtregelclienttool "s9s" gebruiken. Deze tool stuurt een implementatietaak naar de ClusterControl-controller en voert alle noodzakelijke stappen uit om de cluster te implementeren.

Voer de volgende opdracht uit op de ClusterControl-server:

$ 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

U zult zien dat de taakberichten verschijnen en u kunt de voortgang van de implementatie daar volgen en u kunt de taakvoortgang ook volgen via ClusterControl UI -> Activiteit -> Taken . Wacht 15-20 minuten (afhankelijk van de internetverbinding) totdat u de melding dat de taak is voltooid, ziet. Onze Percona XtraDB Cluster 8.0 is nu geïmplementeerd en u kunt deze zien in de ClusterControl-gebruikersinterface.


  1. BESTELLEN OP datum en tijd VOORDAT GROEP OP naam in mysql

  2. Hoe parallelle plannen opstarten - deel 1

  3. Prestaties van SQL Server 2005-query

  4. Basisprincipes van automatisering van SQL Server-taken