Cómo configurar un clúster MySQL 8 de tres nodos en Debian 10

Cómo configurar un clúster MySQL 8 de tres nodos en Debian 10

MySQL es un sistema de gestión de base de datos relacional, gratuito y de código abierto. Se utiliza para almacenar datos con diversos fines, incluidos el almacenamiento de datos, el comercio electrónico y las aplicaciones de registro. MySQL Cluster es una tecnología que brinda escalabilidad y disponibilidad a bajo costo.

En este tutorial, usaremos un nodo maestro para almacenar la configuración del clúster y dos nodos de datos para almacenar los datos del clúster. La dirección IP de cada nodo se muestra a continuación:

  • Nodo maestro o administrador: 104.245.33.61
  • Nodo de datos 1 – 104.245.32.195
  • Nodo de datos 2 – 69.87.218.169

requisitos previos

  • Tres servidores que ejecutan Debian 10, uno para el nodo administrador y los otros son nodos de datos.
  • Se configura una contraseña de root en cada servidor.

Empezando

Primero, deberá actualizar todos los servidores a la última versión. Puede actualizar todo con el siguiente comando:

apt-get update -y

Una vez que todos los servidores estén actualizados, puede continuar con el siguiente paso.

Instalar y configurar MySQL Cluster Manager

Primero, deberá instalar el paquete de administración de clústeres de MySQL en el nodo principal. De forma predeterminada, este paquete no está incluido en el repositorio predeterminado de Debian 10. Por lo tanto, deberá descargarlo del oficial de MySQL. sitio web.

Puedes descargarlo con el siguiente comando:

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

Después de descargar el archivo deb, instálelo usando el siguiente comando:

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

Una vez completada la instalación, cree un directorio para almacenar la configuración del clúster con el siguiente comando:

mkdir /var/lib/mysql-cluster

A continuación, cree un nuevo archivo de configuración con el siguiente comando:

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

Agregue las siguientes líneas:

[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

Guarde y cierre el archivo cuando haya terminado, luego inicie el administrador de clústeres con el siguiente comando:

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

Deberías obtener el siguiente resultado:

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

Ahora, elimine el servidor en ejecución con el siguiente comando:

pkill -f ndb_mgmd

A continuación, cree un archivo de servicio systemd para que MySQL Cluster Manager administre el servicio:

nano /etc/systemd/system/ndb_mgmd.service

Agregue las siguientes líneas:

[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

Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el Administrador de clústeres y habilítelo para que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start ndb_mgmd
systemctl enable ndb_mgmd

Ahora puede verificar el estado del servicio con el siguiente comando:

systemctl status ndb_mgmd

Deberías obtener el siguiente resultado:

    ? 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.

Una vez que haya terminado, puede continuar con el siguiente paso.

Instalar y configurar nodos de datos

A continuación, empaquetaremos el nodo de datos en otros servidores y lo configuraremos para comunicarse con MySQL Cluster Manager.

Primero, instale las dependencias requeridas en ambos nodos de datos con el siguiente comando:

apt-get install libclass-methodmaker-perl -y

Una vez que todas las dependencias estén instaladas, descargue la última versión del archivo deb de MySQL Data Nodes con el siguiente comando:

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

Una vez que se complete la descarga, instale el archivo descargado con el siguiente comando:

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

De forma predeterminada, los nodos de datos almacenan todas las configuraciones en el archivo /etc/my.cnf.

Así que cree un nuevo archivo /etc/my.cnf en ambos nodos de datos con el siguiente comando:

nano /etc/my.cnf

Agregue la IP del clúster como se muestra a continuación:

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

Guarde y cierre el archivo, luego cree un directorio de datos en ambos nodos de datos:

mkdir -p /usr/local/mysql/data

Ahora, inicie los nodos de datos con el siguiente comando:

ndbd

Deberías obtener el siguiente resultado:

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

A continuación, elimine el proceso ndbd en ejecución con el siguiente comando:

pkill -f ndbd

A continuación, cree un archivo de servicio systemd para ndbd en ambos nodos de datos con el siguiente comando:

nano /etc/systemd/system/ndbd.service

Agregue las siguientes líneas:

[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

Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el servicio ndbd y haga que se inicie al reiniciar el sistema con el siguiente comando: Publicidad

systemctl start ndbd
systemctl enable ndbd

También puede verificar el estado del servicio ndbd usando el siguiente comando:

systemctl status ndbd

Deberías obtener el siguiente resultado:

? 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.

Instalar y configurar el servidor MySQL

A continuación, descargaremos e instalaremos los paquetes MySQL Server y Client en el nodo MySQL Cluster Manager.

Primero, descargue la última versión de MySQL Cluster Bundle usando el siguiente comando:

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

A continuación, extraiga el archivo descargado dentro del directorio /opt con el siguiente comando:

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

Luego, cambie el directorio a /opt e instale las dependencias requeridas con el siguiente comando:

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

A continuación, instale el archivo deb de MySQL Common con el siguiente comando:

dpkg -i mysql-common*

A continuación, instale los paquetes de MySQL Client con el siguiente comando:

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*

Si obtiene algún error de dependencia, ejecute el siguiente comando:

apt-get install -f

A continuación, instale el paquete del servidor MySQL con el siguiente comando:

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

Durante la instalación, se le pedirá que establezca una contraseña de root de MySQL.

Después de instalar el servidor MySQL, deberá editar el archivo de configuración principal de MySQL y definir la IP del clúster:

nano /etc/mysql/my.cnf

Agregue las siguientes líneas:

[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

Guarde y cierre el archivo cuando haya terminado. A continuación, reinicie el servicio MySQL y habilítelo para que se inicie al reiniciar el sistema:

systemctl restart mysql
systemctl enable mysql

Puede verificar el estado del servidor MySQL con el siguiente comando:

systemctl status mysql

Debería ver el siguiente resultado:

? 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.

Una vez que haya terminado, puede continuar con el siguiente paso.

Pruebe el clúster de MySQL

Ahora, hemos instalado y configurado correctamente el MySQL Cluster de tres nodos. A continuación, deberá verificar si funciona o no.

Primero, inicie sesión en el nodo MySQL Cluster Manager e inicie sesión en MySQL con el siguiente comando:

mysql -u root -p

Proporcione su contraseña raíz de MySQL y luego verifique la información del clúster con el siguiente comando:

mysql> SHOW ENGINE NDB STATUS \G

Si todo está bien, debería obtener el siguiente resultado:

*************************** 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)

Ahora, salga del shell de MySQL con el siguiente comando:

mysql> exit

Ahora, realizaremos otra prueba para confirmar que el clúster funciona correctamente.

Conecte la consola de administración de clústeres con el siguiente comando:

ndb_mgm

Debería ver el siguiente resultado:

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

Ahora, ejecute el siguiente comando para verificar todos los datos:

ndb_mgm> SHOW

Deberías obtener el siguiente resultado:

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)

Para verificar el estado del primer nodo de datos, ejecute el siguiente comando:

ndb_mgm> 2 STATUS

Debería ver el siguiente resultado:

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

Para verificar el estado del segundo nodo de datos, ejecute el siguiente comando:

ndb_mgm> 3 STATUS

Debería ver el siguiente resultado:

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

Conclusión

¡Felicidades! Ha instalado y configurado con éxito un clúster MySQL de tres nodos en el servidor Debian 10. Ahora puede usar esta configuración en el entorno de producción para lograr escalabilidad y disponibilidad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *