Vereist ClusterControl 1.6 of hoger. Geldt voor op MySQL gebaseerde instanties/clusters.
In sommige gevallen wilt u misschien meerdere exemplaren van MySQL op één machine uitvoeren. Misschien wil je verschillende gebruikers toegang geven tot hun eigen MySQL-servers die ze zelf beheren, of misschien wil je een nieuwe MySQL-release testen terwijl je een bestaande productie-installatie ongestoord laat.
Het is mogelijk om per instance een andere MySQL-server binary te gebruiken, of dezelfde binary voor meerdere instances (of een combinatie van beide benaderingen). U kunt bijvoorbeeld een server uitvoeren vanuit MySQL 5.6 en een server vanuit MySQL 5.7, om te zien hoe de verschillende versies een bepaalde workload afhandelen. Of u kunt meerdere instanties van de nieuwste MySQL-versie gebruiken, die elk een andere set databases beheren.
Of u nu wel of niet afzonderlijke serverbinaire bestanden gebruikt, elke instantie die u uitvoert, moet worden geconfigureerd met unieke waarden voor verschillende bedieningsparameters. Dit elimineert de kans op conflicten tussen instanties. U kunt MySQL Sandbox gebruiken om meerdere MySQL-instanties te maken. Of u kunt mysqld_multi, beschikbaar in MySQL, gebruiken om een willekeurig aantal afzonderlijke mysqld-processen te starten of te stoppen die op verschillende TCP/IP-poorten en UNIX-sockets worden uitgevoerd.
In deze blogpost laten we u zien hoe u ClusterControl kunt configureren om meerdere MySQL-instanties op één host te controleren.
ClusterControl-beperking
Op het moment van schrijven ondersteunt ClusterControl geen monitoring van meerdere instanties op één host per cluster/servergroep. Het gaat uit van de volgende best practices:
- Slechts één MySQL-instantie per host (fysieke server of virtuele machine).
- MySQL-gegevensredundantie moet worden geconfigureerd op de N+1-server.
- Alle MySQL-instanties draaien met uniforme configuratie voor de cluster/servergroep, bijv. luisterpoort, foutenlogboek, datadir, basedir, socket zijn identiek.
Met betrekking tot de bovengenoemde punten gaat ClusterControl ervan uit dat in een cluster/servergroep:
- MySQL-instanties zijn uniform geconfigureerd in een cluster; dezelfde poort, dezelfde locatie van logs, base/data directory en andere kritieke configuraties.
- Het bewaakt, beheert en implementeert slechts één MySQL-instantie per host.
- MySQL-client moet op de host zijn geïnstalleerd en beschikbaar zijn op het uitvoerbare pad voor de corresponderende OS-gebruiker.
- De MySQL is gebonden aan een IP-adres dat bereikbaar is via het ClusterControl-knooppunt.
- Het houdt de hoststatistieken bij, bijvoorbeeld CPU/RAM/schijf/netwerk voor elke MySQL-instantie afzonderlijk. In een omgeving met meerdere instanties per host, zou u redundante hoststatistieken moeten verwachten, aangezien dezelfde host meerdere keren wordt gecontroleerd.
Met de bovenstaande aannames werken de volgende ClusterControl-functies niet voor een host met meerdere instanties:
Back-up - Percona Xtrabackup ondersteunt niet meerdere instanties per host en mysqldump uitgevoerd door ClusterControl maakt alleen verbinding met de standaard socket.
Procesbeheer - ClusterControl gebruikt de standaard 'pgrep -f mysqld_safe' om te controleren of MySQL op die host draait. Met meerdere MySQL-instanties is dit een fout-positieve benadering. Als zodanig werkt automatisch herstel voor node/cluster niet.
Configuratiebeheer - ClusterControl voorziet de standaard MySQL-configuratiedirectory. Het bevindt zich meestal onder /etc/ en /etc/mysql.
Tussenoplossing
Het monitoren van meerdere MySQL-instanties op een machine is nog steeds mogelijk met ClusterControl met een eenvoudige oplossing. Elke MySQL-instantie moet worden behandeld als een enkele entiteit per servergroep.
In dit voorbeeld hebben we 3 MySQL-instanties op een enkele host gemaakt met MySQL Sandbox:
ClusterControl bewaakt meerdere instanties op dezelfde hostWe hebben onze MySQL-instanties gemaakt met de volgende opdrachten:
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
Standaard maakt MySQL Sandbox mysql-instanties die luisteren naar 127.0.0.1. Het is noodzakelijk om elk knooppunt op de juiste manier te configureren om ze naar alle beschikbare IP-adressen te laten luisteren. Hier is de samenvatting van onze MySQL-instanties in de host:
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json
{
"node1":
{
"host": "master",
"port": "15024",
"socket": "/tmp/mysql_sandbox15024.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node2":
{
"host": "master",
"port": "15025",
"socket": "/tmp/mysql_sandbox15025.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node3":
{
"host": "master",
"port": "15026",
"socket": "/tmp/mysql_sandbox15026.sock",
"username": "[email protected]%",
"password": "msandbox"
}
}
De volgende stap is het wijzigen van de configuratie van de nieuw gemaakte instanties. Ga naar my.cnf voor elk van hen en hash bind_address variabele:
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox 13086 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox 13805 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox 14065 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1
Installeer vervolgens mysql op uw hoofdknooppunt en start alle instanties opnieuw met behulp van het restart_all-script.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started
Vanuit ClusterControl moeten we voor elke instantie 'Importeren' uitvoeren, omdat we ze in een andere groep moeten isoleren om het te laten werken.
ClusterControl importeer bestaande serverVoer voor node1 de volgende informatie in ClusterControl> Importeren in:
ClusterControl importeer bestaande serverZorg ervoor dat u de juiste poorten (verschillend voor verschillende instanties) en host (zelfde voor alle instanties) plaatst.
U kunt de voortgang volgen door op het pictogram Activiteit/Vacatures in het hoofdmenu te klikken.
ClusterControl importeer bestaande servergegevensU ziet node1 in de gebruikersinterface zodra ClusterControl de taak heeft voltooid. Herhaal dezelfde stappen om nog twee knooppunten met poort 15025 en 15026 toe te voegen. Je zou zoiets als het onderstaande moeten zien zodra ze zijn toegevoegd:
ClusterControl-dashboardDaar ga je. We hebben zojuist onze bestaande MySQL-instanties toegevoegd aan ClusterControl voor monitoring. Veel plezier met volgen!
PS.:Klik hier om aan de slag te gaan met ClusterControl!