La alta disponibilidad en relación con una base de datos significa que la base de datos tiene la capacidad de enfrentar los errores del host. También es importante que la base de datos pueda recuperarse de las fallas de MySQL, el sistema operativo o el mantenimiento del hardware que, de lo contrario, pueden causar un tiempo de inactividad.
Las soluciones de alta disponibilidad dependen del tipo de aplicación que se implemente, las mejores prácticas de su entorno o el nivel de disponibilidad requerido. Con MySQL, al igual que el entorno de clúster típico, existe:
- Nodo de gestión que se utiliza para monitorear y configurar los clientes.
- Nodos de datos que se utilizan para almacenar datos y compartir/replicar
- Nodos SQL que son las interfaces para conectarse a todos los nodos
Antes de comenzar
- Al menos tres instancias de VPS con Ubuntu 18.04 configuradas en un entorno de red privada virtual
- Usuarios no root con privilegios sudo configurados en cada VPS.
Pasos
Actualice los paquetes del sistema en los 3 nodos.
$ sudo apt update -y && sudo apt upgrade -y
Configurar el nodo de gestión
$ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
Extraiga el archivo comprimido en una nueva carpeta.
$ mkdir mysql$ tar -xzvf mysql-cluster-gpl- 7.4 . 12 -linux-glibc2. 5 -x86_64. alquitrán _ gz -C mysql --strip-components= 1
Copie los archivos binarios del servidor de administración de clústeres; ndb_mgm y ndb_mgmd en su carpeta local de archivos binarios y cambie el modo de los archivos a ejecutable.
$ sudo cp /mysql/bin/ndb_mgm* /usr/local/bin
$ sudo chmod +x /usr/local/bin/ndb_mgm*
Cree un archivo de configuración llamado config.ini en un directorio mysql-cluster recién creado para el nodo del clúster de administración. Este archivo identificará el nodo SQL y las direcciones IP del nodo de administración.
También identificará la dirección IP del nodo de datos y sus directorios de datos.
$ sudo mkdir -p /var/lib/mysql-cluster
$ nano /var/lib/mysql-cluster/config.ini
Nota especial: recuerde reemplazar las direcciones IP con las de la configuración de su entorno. En cuanto al código de configuración a continuación, si solo tiene un nodo de datos, NoOfReplicas debe establecerse en 1 porque solo tiene un nodo de datos donde se almacenará una réplica de la tabla.
[ndbd default]
NoOfReplicas=1
DataMemory=80M
IndexMemory=18M
[mysqld default]
[ndb_mgmd default]
[tcp default]
# Cluster Control / Management node
[ndb_mgmd]
hostname=192.168.56.10
# Data Node
[ndbd]
hostname=192.168.56.11
DataDir= /var/lib/mysql-cluster
# Data Node 1
[ndbd]
HostName=192.168.56.12
DataDir=/var/lib/mysql-cluster
# SQL Node
[mysqld]
hostname=192.168.56.40
Ahora inicie el nodo de administración de clústeres y habilítelo al iniciar. Recuerde que todos los demás nodos deben estar activos; de lo contrario, recibirá un error en las direcciones IP que no existen.
$ sudo ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/MySQL Cluster Management Server mysql-5.6.31 ndb-7.4.12$ sudo echo'ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/' >> /etc/rc.local
Nota especial: si obtiene un error de permisos, intente iniciar sesión como root (sudo su) y ejecute el comando nuevamente.
Configurar el nodo de datos
Instale el paquete libaio1 desde linux que permite realizar varias llamadas de E/S simultáneas del sistema.
sudo apt install libaio1
Crear un nuevo grupo y usuario llamado mysql
$ groupadd mysql
$ useradd -g mysql mysql
Descargue el paquete mysql-cluster tal como lo hizo en el nodo de administración.
$ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
$ mkdir mysql
$ tar -xzvf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz -C mysql --strip-components=1
Esta vez, moverá toda la carpeta mysql al directorio local /usr/ .
$ sudo mv mysql/ /usr/local
Cambie el directorio a la carpeta movida y ejecute el script de creación de bases de datos del sistema mysql_install_db
$ cd /usr/local/mysql
$ ./scripts/mysql_install_db --user=mysql
Copie el archivo del servicio mysql en la carpeta init.d y habilite el servicio mysql al inicio.
$ sudo cp support-files/mysql.server /etc/init.d/mysql
$ sudo systemctl enable mysql
Mueva los archivos binarios locales a su directorio binario local y cree un nuevo enlace simbólico.
$ sudo mv bin/* /usr/local/bin/
$ sudo rm -rf bin/
$ sudo ln -s /usr/local/bin /usr/local/mysql/
Cambie el directorio mysql al propietario root en el grupo mysql y el directorio de datos al propietario mysql en el grupo mysql.
$ sudo chown -R root:mysql .
$ sudo chown -R mysql data
Ahora cree un nuevo archivo de configuración para su nodo de datos para definir el clúster y el nodo de administración al que pertenece.
$ sudo mkdir -p /var/lib/mysql-cluster
$ sudo chown -R mysql /var/lib/mysql-cluster
Inicie el nodo de datos
$ ndbd --initial 2018-11-01 00:51:08 [ndbd] INFO -- Angel connected to '192.168.56.20:1186'
2018-11-01 00:51:23 [ndbd] INFO -- Angel allocated nodeid: 2$ sudo systemctl start mysql
Ahora puede crear una contraseña para su uso de mysql
$ sudo mysql_secure_installation
Configurar el nodo SQL
Primero debe instalar el paquete de clúster mysql y mover la carpeta a su directorio /usr/local.
$ wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
$ mkdir mysql
$ tar -xzvf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz -C mysql --strip-components=1
$ mv mysql /usr/local/
Ejecute el archivo de secuencia de comandos de la base de datos de instalación.
$ cd /usr/local/mysql
$ sudo ./scripts/mysql_install_db --user=mysql
Copie el archivo de servicio mysql y actívelo en el arranque
$ cp support-files/mysql.server /etc/init.d/mysql
$ sudo systemctl enable msql
Mueva los archivos binarios locales a su directorio binario local y cree un nuevo enlace simbólico..
$ sudo mv bin/* /usr/local/bin/
$ sudo rm -rf bin/
$ sudo ln -s /usr/local/bin /usr/local/mysql/
Finalmente, cree un archivo my .cnf y pegue el siguiente código mientras reemplaza la dirección IP de sus nodos de administración.
$ vim /etc/my.cnf
# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.56.20
[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.56.20
# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Guarde los cambios, salga, luego inicie el servicio mysql y configure su contraseña.
$ sudo systemctl start mysql
$ sudo mysql_secure_installation
$ mysql -u root -p
Para verificar que su instalación funciona, creará una base de datos de muestra en su nodo SQL y verificará si se replicará en el nodo de datos.
En el mismo SQL VPS , crea una nueva base de datos (nómbrala como quieras)
mysql> CREATEDATABASE vegetables;
Query OK, 1 row affected (0.02 sec)
Inicie sesión en el nodo de datos y verifique las bases de datos, la base de datos creada en el nodo SQL debería haberse replicado.
$ mysql -u root -p mysql> SHOWDATABASES;
Conclusión
Ahora configuró correctamente su replicación de clúster de MySQL para alta disponibilidad. Puede apagar el estado de su clúster desde el nodo de administración desde la consola ndb_mgm usando el comando de apagado.
Finalmente, para monitorear lo mismo desde la consola ndb_mgm, puede usar el comando show . La replicación de clústeres de MySQL ha demostrado proporcionar tolerancia a fallas, conmutación por error automatizada y elasticidad.