Cómo configurar un clúster MySQL 8 de tres nodos en Debian 10
MySQL es un sistema de gestión de bases de datos relacional, gratuito y de código abierto. Se utiliza para almacenar datos con diversos fines, como el almacenamiento de datos, el comercio electrónico y las aplicaciones de registro. MySQL Cluster es una tecnología que proporciona escalabilidad y disponibilidad a bajo coste.
En este tutorial, utilizaremos 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 Gestor – 104.245.33.61
- Nodo de Datos1 – 104.245.32.195
- Nodo de Datos2 – 69.87.218.169
Requisitos previos
- Tres servidores con Debian 10, uno para el nodo gestor y los otros son nodos de datos.
- Se establece una contraseña de root en cada servidor.
Cómo empezar
En primer lugar, tendrás que actualizar todos los servidores a la última versión. Puedes actualizarlos todos con el siguiente comando:
apt-get update -y
Una vez actualizados todos los servidores, puedes pasar al siguiente paso.
Instalar y configurar MySQL Cluster Manager
En primer lugar, tendrás que instalar el paquete de gestión del clúster MySQL en el nodo Maestro. Por defecto, este paquete no está incluido en el repositorio por defecto de Debian 10. Así que tendrás que descargarlo del sitio web oficial de MySQL.
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
Tras descargar el archivo deb, instálalo con el siguiente comando:
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Una vez completada la instalación, crea un directorio para almacenar la configuración del clúster con el siguiente comando:
mkdir /var/lib/mysql-cluster
A continuación, crea un nuevo archivo de configuración con el siguiente comando:
nano /var/lib/mysql-cluster/config.ini
Añade 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
Guarda y cierra el archivo cuando hayas terminado y, a continuación, inicia el gestor de clústeres con el siguiente comando:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Deberías obtener la siguiente salida:
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, mata el servidor en ejecución con el siguiente comando:
pkill -f ndb_mgmd
A continuación, crea un archivo de servicio systemd para que MySQL Cluster Manager gestione el servicio:
nano /etc/systemd/system/ndb_mgmd.service
Añade 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
Guarda y cierra el archivo y vuelve a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicia el Gestor de Clústeres y habilítalo para que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start ndb_mgmd systemctl enable ndb_mgmd
Ahora puedes comprobar el estado del servicio con el siguiente comando:
systemctl status ndb_mgmd
Deberías obtener la siguiente salida:
? 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.
Cuando hayas terminado, puedes pasar al siguiente paso.
Instalar y configurar nodos de datos
A continuación, vamos a paquete de nodos de datos en otros servidores y configurarlo para comunicarse con MySQL Cluster Manager.
En primer lugar, instala las dependencias necesarias en ambos nodos de datos con el siguiente comando:
apt-get install libclass-methodmaker-perl -y
Una vez instaladas todas las dependencias, descarga la última versión del archivo deb de Nodos de Datos MySQL 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 finalizada la descarga, instala el archivo descargado con el siguiente comando:
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Por defecto, los nodos de datos almacenan todas las configuraciones en el archivo /etc/my.cnf.
Por tanto, crea un nuevo archivo /etc/my.cnf en ambos nodos de datos con el siguiente comando:
nano /etc/my.cnf
Añade 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
Guarda y cierra el archivo y, a continuación, crea un directorio de datos en ambos nodos de datos:
mkdir -p /usr/local/mysql/data
Ahora, inicia los nodos de datos con el siguiente comando:
ndbd
Deberías obtener la siguiente salida:
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, mata el proceso ndbd en ejecución con el siguiente comando:
pkill -f ndbd
A continuación, crea un archivo de servicio systemd para ndbd en ambos nodos de datos con el siguiente comando:
nano /etc/systemd/system/ndbd.service
Añade 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
Guarda y cierra el archivo y, a continuación, vuelve a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicia el servicio ndbd y haz que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start ndbd systemctl enable ndbd
También puedes comprobar el estado del servicio ndbd con el siguiente comando:
systemctl status ndbd
Deberías obtener la siguiente salida:
? 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 Servidor y Cliente MySQL en el Nodo Gestor del Cluster MySQL.
En primer lugar, descarga la última versión de MySQL Cluster Bundle utilizando 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, extrae 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
A continuación, cambia el directorio a /opt e instala las dependencias necesarias con el siguiente comando:
cd /opt apt-get install libaio1 libmecab2 libnuma1 psmisc -y
A continuación, instala el archivo deb Común MySQL con el siguiente comando:
dpkg -i mysql-common*
A continuación, instala los paquetes Cliente MySQL 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 aparece algún error de dependencia, ejecuta el siguiente comando:
apt-get install -f
A continuación, instala el paquete Servidor MySQL con el siguiente comando:
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
Durante la instalación, se te pedirá que establezcas una contraseña de root de MySQL.
Después de instalar el servidor MySQL, tendrás que editar el archivo de configuración principal de MySQL y definir la IP del clúster:
nano /etc/mysql/my.cnf
Añade 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
Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio MySQL y habilítalo para que se inicie al reiniciar el sistema:
systemctl restart mysql systemctl enable mysql
Puedes comprobar el estado del servidor MySQL con el siguiente comando:
systemctl status mysql
Deberías ver la siguiente salida:
? 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.
Cuando hayas terminado, puedes pasar al siguiente paso.
Probar el Cluster MySQL
Ahora, hemos instalado y configurado con éxito el Cluster MySQL de tres nodos. A continuación, deberás verificar si funciona o no.
En primer lugar, accede al nodo MySQL Cluster Manager e inicia sesión en MySQL con el siguiente comando:
mysql -u root -p
Proporciona tu contraseña de root de MySQL y, a continuación, comprueba la información del clúster con el siguiente comando:
mysql> SHOW ENGINE NDB STATUS \G
Si todo va bien, deberías obtener la siguiente salida:
*************************** 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, sal del intérprete de comandos de MySQL con el siguiente comando:
mysql> exit
Ahora, realizaremos otra prueba para confirmar que el clúster funciona correctamente.
Conecta la consola de gestión del Cluster con el siguiente comando:
ndb_mgm
Deberías ver la siguiente salida:
-- NDB Cluster -- Management Client -- ndb_mgm>
Ahora, ejecuta el siguiente comando para comprobar todos los ndoes de datos:
ndb_mgm> SHOW
Deberías obtener la siguiente salida:
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 comprobar el estado del primer nodo de datos, ejecuta el siguiente comando:
ndb_mgm> 2 STATUS
Deberías ver la siguiente salida:
Node 2: started (mysql-8.0.24 ndb-8.0.24)
Para comprobar el estado del segundo nodo de datos, ejecuta el comando siguiente:
ndb_mgm> 3 STATUS
Deberías ver la siguiente salida:
Node 3: started (mysql-8.0.24 ndb-8.0.24)
Conclusión
Enhorabuena! has instalado y configurado con éxito un clúster MySQL de tres nodos en un servidor Debian 10. Ahora puedes utilizar esta configuración en el entorno de producción para conseguir escalabilidad y disponibilidad.