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 "
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: 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]: 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.
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): Eenmaal gestart, kunnen we de andere knooppunten (db2 en db3) starten met het standaard startcommando (één knooppunt tegelijk): Je kunt verifiëren met de volgende regel in /var/log/mysqld.log: 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.
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:
SSH naar de ClusterControl-server en installeer ClusterControl met de volgende opdrachten: 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.
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: Genereer nu een SSH-sleutel voor gebruiker root: Kopieer vervolgens de openbare sleutel naar alle databaseknooppunten die we gaan implementeren en beheren. In dit geval alle 3 Galera-knooppunten: 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: Nu zijn we klaar om ons cluster te implementeren met ClusterControl UI of CLI, zoals weergegeven in de volgende secties.
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.
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:
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.$ 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!
wsrep_cluster_address=gcomm://
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
Cluster-bootstrapping
$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]
$ systemctl stop mysql
$ systemctl start mysql
2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections
Automatische implementatie met ClusterControl
ClusterControl installeren
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc
SSH zonder wachtwoord
$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh [email protected] "ls /root"
PXC-implementatie met ClusterControl UI
PXC-implementatie met ClusterControl CLI
$ 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