een MySQL 8 Cluster met drie knooppunten opzetten op Debian 10

MySQL is een gratis, open-source, en relationeel databasemanagement systeem. Het wordt gebruikt om gegevens op te slaan in verschillende toepassingen, waaronder, data warehousing, e-commerce, en logging toepassingen. MySQL Cluster is een technologie die schaalbaarheid en beschikbaarheid biedt tegen lage kosten.

In deze handleiding gebruiken we één master node om de configuratie van het cluster op te slaan en twee data nodes om de gegevens van het cluster op te slaan. Het IP adres van elke node staat hieronder:

  • Master of Manager Knooppunt – 104.245.33.61
  • Gegevensknooppunt1 – 104.245.32.195
  • Gegevensknooppunt2 – 69.87.218.169

Voorwaarde

  • Drie servers met Debian 10, één voor de manager node en de andere zijn de gegevens nodes.
  • Op elke server wordt een root wachtwoord ingesteld.

Aan de slag

Eerst moet je alle servers bijwerken naar de nieuwste versie. Je kunt ze allemaal updaten met het volgende commando:

apt-get update -y

Als alle servers geüpdatet zijn, kun je verder gaan met de volgende stap.

Installeer en installeer MySQL Cluster Manager

Eerst moet je het MySQL cluster management pakket installeren op de master node. Dit pakket zit standaard niet in de Debian 10 standaard repository. Je zult het dus moeten downloaden van de officiële website van MySQL.

Je kunt het downloaden met het volgende commando:

wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb

Na het downloaden van het deb bestand installeer je het met het volgende commando:

dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb

Als de installatie voltooid is, maak je een map om de cluster configuratie in op te slaan met het volgende commando:

mkdir /var/lib/mysql-cluster

Maak vervolgens een nieuw configuratiebestand aan met het volgende commando:

nano /var/lib/mysql-cluster/config.ini

Voeg de volgende regels toe:

[ndbd default]
NoOfReplicas=2  # Number of replicas

[ndb_mgmd]
# Management process options:
hostname=104.245.33.61 #IP of the MySQL Cluster Manager
datadir=/var/lib/mysql-cluster
[ndbd]
hostname=104.245.32.195 #IP of the first data node
NodeId=2            # Node ID for this data node
datadir=/usr/local/mysql/data   # Remote directory for the data files
[ndbd]
hostname=69.87.218.169 #IP of the second data node
NodeId=3            # Node ID for this data node
datadir=/usr/local/mysql/data   # Remote directory for the data files
[mysqld]
# SQL node options:
hostname=104.245.33.61 #IP of the MySQL Cluster Manager

Bewaar en sluit het bestand als je klaar bent en start dan de clustermanager met het volgende commando:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Je zou de volgende uitvoer moeten krijgen:

MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24
2021-05-10 08:23:05 [MgmtSrvr] INFO     -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2021-05-10 08:23:05 [MgmtSrvr] INFO     -- Sucessfully created config directory

Dood nu de draaiende server met het volgende commando:

pkill -f ndb_mgmd

Maak vervolgens een systemd service bestand voor MySQL Cluster Manager om de dienst te beheren:

nano /etc/systemd/system/ndb_mgmd.service

Voeg de volgende regels toe:

[Unit]
Description=MySQL NDB Cluster Management Server
After=network.target auditd.service
[Service]
Type=forking
ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de Cluster Manager en zet hem aan om te starten bij het herstarten van het systeem met het volgende commando:

systemctl start ndb_mgmd
systemctl enable ndb_mgmd

Je kunt nu de status van de dienst controleren met het volgende commando:

systemctl status ndb_mgmd

Je zou de volgende uitvoer moeten krijgen:

    ? ndb_mgmd.service - MySQL NDB Cluster Management Server
   Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago
  Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS)
 Main PID: 985 (ndb_mgmd)
    Tasks: 12 (limit: 2359)
   Memory: 6.5M
   CGroup: /system.slice/ndb_mgmd.service
           ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server...
May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24
May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.

Als je klaar bent, kun je verder gaan met de volgende stap.

Installeer en configureer Gegevensknooppunten

Vervolgens zullen we het data node pakket op andere servers installeren en configureren om met MySQL Cluster Manager te communiceren.

Installeer eerst de vereiste afhankelijkheden op beide dataknooppunten met het volgende commando:

apt-get install libclass-methodmaker-perl -y

Als alle afhankelijkheden geïnstalleerd zijn, download je het nieuwste versie van MySQL Data Nodes deb bestand met het volgende commando:

wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb

Zodra de download voltooid is, installeer je het gedownloade bestand met het volgende commando:

dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb

Standaard slaan gegevensknooppunten alle configuraties op in het bestand /etc/my.cnf.

Maak dus op beide gegevensknooppunten een nieuw /etc/my.cnf bestand aan met het volgende commando:

nano /etc/my.cnf

Voeg het cluster IP toe zoals hieronder:

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager

Bewaar en sluit het bestand en maak dan een gegevensmap aan op beide gegevensknooppunten:

mkdir -p /usr/local/mysql/data

Start nu de gegevensknooppunten met het volgende commando:

ndbd

Je zou de volgende uitvoer moeten krijgen:

2021-05-10 08:27:13 [ndbd] INFO     -- Angel connected to '104.245.33.61:1186'
2021-05-10 08:27:13 [ndbd] INFO     -- Angel allocated nodeid: 2

Dood vervolgens het draaiende ndbd proces met het volgende commando:

pkill -f ndbd

Maak vervolgens een systemd service bestand voor ndbd op beide gegevensknooppunten met het volgende commando:

nano /etc/systemd/system/ndbd.service

Voeg de volgende regels toe:

[Unit]
Description=MySQL NDB Data Node Daemon
After=network.target auditd.service
[Service]
Type=forking
ExecStart=/usr/sbin/ndbd
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de ndbd dienst en laat hem starten bij het herstarten van het systeem met het volgende commando:

systemctl start ndbd
systemctl enable ndbd

Je kunt ook de status van de ndbd dienst controleren met het volgende commando:

systemctl status ndbd

Je zou de volgende uitvoer moeten krijgen:

? ndbd.service - MySQL NDB Data Node Daemon
   Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago
  Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS)
 Main PID: 741 (ndbd)
    Tasks: 46 (limit: 2359)
   Memory: 827.1M
   CGroup: /system.slice/ndbd.service
           ??741 /usr/sbin/ndbd
           ??742 /usr/sbin/ndbd

May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon...
May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO     -- Angel connected to '104.245.33.61:1186'
May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO     -- Angel allocated nodeid: 2
May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.

Installeer en configureer MySQL Server

Vervolgens zullen we de MySQL Server en Client pakketten downloaden en installeren op de MySQL Cluster Manager Node.

Download eerst de nieuwste versie van MySQL Cluster Bundle met het volgende commando:

wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar

Pak vervolgens het gedownloade bestand uit binnen de /opt directory met het volgende commando:

tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt

Verander vervolgens de directory in /opt en installeer de vereiste afhankelijkheden met het volgende commando:

cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y

Installeer vervolgens het MySQL Common deb bestand met het volgende commando:

dpkg -i mysql-common*

Installeer vervolgens de MySQL Client pakketten met het volgende commando:

dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb
dpkg -i mysql-client_8.0.24-1debian10_amd64.deb
dpkg -i mysql-cluster-community-server*

Als je een afhankelijkheidsfout krijgt, voer dan het volgende commando uit:

apt-get install -f

Installeer vervolgens het MySQL Server pakket met het volgende commando:

dpkg -i mysql-server_8.0.24-1debian10_amd64.deb

Tijdens de installatie wordt je gevraagd een MySQL root wachtwoord in te stellen.

Nadat je de MySQL server geïnstalleerd hebt, moet je het MySQL hoofdconfiguratiebestand bewerken en het cluster IP definiëren:

nano /etc/mysql/my.cnf

Voeg de volgende regels toe:

[mysqld]
# Options for mysqld process:
ndbcluster                      # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=104.245.33.61  #IP of the MySQL Cluster Manager

Sla het bestand op en sluit het als je klaar bent. Start vervolgens de MySQL service opnieuw op en zet hem aan om te starten bij het herstarten van het systeem:

systemctl restart mysql
systemctl enable mysql

Je kunt de status van de MySQL server controleren met het volgende commando:

systemctl status mysql

Je zou de volgende uitvoer moeten zien:

? mysql.service - MySQL Cluster Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 1985 (mysqld)
   Status: "Server is operational"
    Tasks: 47 (limit: 2359)
   Memory: 372.0M
   CGroup: /system.slice/mysql.service
           ??1985 /usr/sbin/mysqld

May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server...
May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.

Als je klaar bent, kun je verder gaan met de volgende stap.

Test MySQL Cluster

Nu hebben we de drie-node MySQL Cluster met succes geïnstalleerd en geconfigureerd. Nu moet je controleren of het werkt of niet.

Log eerst in op de MySQL Cluster Manager node en log in op MySQL met het volgende commando:

mysql -u root -p

Geef je MySQL root wachtwoord op en controleer dan de cluster informatie met het volgende commando:

mysql> SHOW ENGINE NDB STATUS \G

Als alles in orde is, zou je de volgende uitvoer moeten krijgen:

*************************** 1. row ***************************
  Type: ndbclus
  Name: connection
Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0
*************************** 2. row ***************************
  Type: ndbclus
  Name: NdbTransaction
Status: created=2, free=2, sizeof=392
*************************** 3. row ***************************
  Type: ndbclus
  Name: NdbOperation
Status: created=4, free=4, sizeof=944
*************************** 4. row ***************************
  Type: ndbclus
  Name: NdbIndexScanOperation
Status: created=0, free=0, sizeof=1152
*************************** 5. row ***************************
  Type: ndbclus
  Name: NdbIndexOperation
Status: created=0, free=0, sizeof=952
*************************** 6. row ***************************
  Type: ndbclus
  Name: NdbRecAttr
Status: created=0, free=0, sizeof=88
*************************** 7. row ***************************
  Type: ndbclus
  Name: NdbApiSignal
Status: created=16, free=16, sizeof=144
*************************** 8. row ***************************
  Type: ndbclus
  Name: NdbLabel
Status: created=0, free=0, sizeof=200
*************************** 9. row ***************************
  Type: ndbclus
  Name: NdbBranch
Status: created=0, free=0, sizeof=32
*************************** 10. row ***************************
  Type: ndbclus
  Name: NdbSubroutine
Status: created=0, free=0, sizeof=72
*************************** 11. row ***************************
  Type: ndbclus
  Name: NdbCall
Status: created=0, free=0, sizeof=24
*************************** 12. row ***************************
  Type: ndbclus
  Name: NdbBlob
Status: created=0, free=0, sizeof=592
*************************** 13. row ***************************
  Type: ndbclus
  Name: NdbReceiver
Status: created=0, free=0, sizeof=128
*************************** 14. row ***************************
  Type: ndbclus
  Name: NdbLockHandle
Status: created=0, free=0, sizeof=48
*************************** 15. row ***************************
  Type: ndbclus
  Name: binlog
Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0
15 rows in set (0.00 sec)

Verlaat nu de MySQL shell met het volgende commando:

mysql> exit

Nu zullen we nog een test uitvoeren om te bevestigen dat het cluster goed werkt.

Maak verbinding met de Cluster management console met het volgende commando:

ndb_mgm

Je zou de volgende uitvoer moeten zien:

-- NDB Cluster -- Management Client --
ndb_mgm>

Voer nu het volgende commando uit om alle gegevens ndo’s te controleren:

ndb_mgm> SHOW

Je zou de volgende uitvoer moeten krijgen:

Connected to Management Server at: 104.245.33.61:1186
Cluster Configuration
---------------------
[ndbd(NDB)]	2 node(s)
id=2	@104.245.32.195  (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *)
id=3	@69.87.218.169  (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0)

[ndb_mgmd(MGM)]	1 node(s)
id=1	@104.245.33.61  (mysql-8.0.24 ndb-8.0.24)

[mysqld(API)]	1 node(s)
id=4	@104.245.33.61  (mysql-8.0.24 ndb-8.0.24)

Om de status van de eerste gegevensknoop te controleren, voer je het volgende commando uit:

ndb_mgm> 2 STATUS

Je zou de volgende uitvoer moeten zien:

Node 2: started (mysql-8.0.24 ndb-8.0.24)

Om de status van het tweede gegevensknooppunt te controleren, voer je het volgende commando uit:

ndb_mgm> 3 STATUS

Je zou de volgende uitvoer moeten zien:

Node 3: started (mysql-8.0.24 ndb-8.0.24)

Conclusie

Gefeliciteerd! Je hebt met succes een MySQL Cluster van drie knooppunten geïnstalleerd en opgezet op een Debian 10 server. Je kunt deze opstelling nu in de productie-omgeving gebruiken om schaalbaarheid en beschikbaarheid te bereiken.