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.