CLUSTER MYSQL NDB 8 CENTOS
Buenas tardes, hemos andado un poco perdidos por falta de tiempo y llevamos muchos meses sin escribir, pero volvemos a la carga, en esta ocasión con un tema con poca información en español.
Vamos a ver como montar un cluster de mysql ndb 8 con 2 management, 2 mysql y 4 data nodes, en una instalación limpia de centos 7 donde añadiremos un segundo disco para la parte del cluster separando del so.
Para ello vamos hacer unos primeros pasos comunes en las 8 máquinas virtuales en este caso, que utilizaremos.
PASOS COMUNES
1. Creamos el LVM del disco secundario, para ello
fdisk /dev/sdb
Comentar que vuestro disco puede tener otro nombre ejecutar fdisk -l para saber cual es la etiqueta del disco
No me voy a extender mucho en esto ya que hay muchos tutoriales, pero prácticamente sería teclear las siguientes teclas del menu interactivo que te van apareciendo. m n p 1 t 8e w (parece un jeroglífico pero lo descifrareis)
Continuamos ejecutando
pvcreate /dev/sdb1
vgcreate data /dev/sdb1
lvcreate -l 100%FREE --name data data
mkfs.ext4 /dev/data/data
mkdir -pv /data
mount /dev/data/data /data
Con esto ya tendremos nuestro disco montado en /data, ahora lo metemos en el fstab para que lo monte al inicio.
nano /etc/fstab
y añadimos al final del fichero
/dev/data/data /data ext4 defaults 0 0
Guardamos y listo
2. Desactivar ipv6
nano /etc/default/grub
Modificamos la linea GRUB_CMDLINE_LINUX...., por esta otra
GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rhgb quiet"
Guardamos, salimos y ejecutamos
grub2-mkconfig -o /boot/grub2/grub.cfg
Reiniciamos la máquina.
3. Desactivar firewalld
Esta parte es al gusto del consumidor pero lo vamos a poner fácil y vamos a desactivar el firewall de la máquina, ya que esto en producción debería estar protegido también por un firewall perimetral para la parte front, ya que como veremos más adelante vamos a utilizar dos tarjetas, una para la sincronización y otra para atacar a la base de datos.
systemctl stop firewalld
systemctl disable firewalld
systemctl mask --now firewalld
3. Desactivar selinux
nano /etc/selinux/config
y añadimos
SELINUX=disabled
Guardamos y salimos.
Con esto ya tendríamos realizado la parte común a todas las máquinas, pasamos a los diferentes componenetes.
MANAGEMENT
Montaremos dos máquinas de management por si falla una.
Nos descargamos e instalamos todo el software necesario, indicar que vamos a bajar la 8.0.20 porque las versiones superiores no las veo tan estables como esta y dan muchos problemas durante la instalación.
yum -y update
yum -y install nano wget net-tools
yum -y install epel-release
yum -y install perl-Class-MethodMaker
yum -y install perl-Data-Dumper
yum -y install perl-DBI
yum -y remove mariadb-libs
cd ~
wget https://cdn.mysql.com/archives/mysql-cluster-gpl-8.0/mysql-cluster-community-8.0.20-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-cluster-community-8.0.20-1.el7.x86_64.rpm-bundle.tar
rpm -Uvh mysql-cluster-community-management-server-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-common-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-libs-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-client-8.0.20-1.el7.x86_64.rpm
Creamos los directorios necesarios
mkdir -p /var/lib/mysql-cluster
mkdir -p /data/logs
Y editamos el fichero de configuración, donde vamos a tener en cuenta el siguiente escenario, vamos a comunicar todas las máquinas internamente por una tarjeta de red dedicada con el rango 172.17.110.0/24 y los management y los mysql tendrán otra tarjeta con direccionamiento 172.17.120.0/24 por ejemplo para atacarles, así no producimos ninguna interferencia en la comunicación interna del cluster.
nano /var/lib/mysql-cluster/config.ini
Y lo dejamos así
[ndb_mgmd default]
# Directory for MGM node log files
DataDir=/data/logs
[ndb_mgmd]
#Management Node 1
HostName=172.17.110.10
NodeId=1
[ndb_mgmd]
#Management Node 2
HostName=172.17.110.11
NodeId=2
[ndbd default]
NoOfReplicas=2 # Number of replicas
DataMemory=1G # Memory allocate for data storage
#Directory for Data Node
DataDir=/data
[mysqld]
#SQL Node 1
HostName=172.17.110.20
NodeId=3
[mysqld]
#SQL Node 2
HostName=172.17.110.21
NodeId=4
[ndbd]
#Data Node 1
HostName=172.17.110.31
NodeId=11
[ndbd]
#Data Node 2
HostName=172.17.110.32
NodeId=12
[ndbd]
#Data Node 3
HostName=172.17.110.33
NodeId=13
[ndbd]
#Data Node 4
HostName=172.17.110.34
NodeId=14
Voy a explicar este fichero para que se entienda lo que estamos haciendo pero hay mucho más que está en la documentación oficial.
En la parte [ndb_mgmd default] ponemos lo que es global a los nodos de management, es decir, para no tener que escribir dos veces ya que en ambos será lo mismo.
Creamos un [ndb_mgmd] por cada management donde iran los datos que cambian como el hostname y el ID el cual no se puede repetir porque es el que identifica quien es quien.
Lo mismo para los data nodes, tenemos la parte global [ndbd default] y la parte individual [ndbd]
Y por último los mysql con [mysqld]
Hay mucha config según el escenario, como el número de réplicas, el DataMemory,RedoBuffer,MaxNoofTables,....esto como comento es mejor mirar la documentación oficial según escenario porque no acabaríamos el post jejeje.
Con esto ya podríamos arrancar este primer management ejecutando
ndb_mgmd --ndb-nodeid=1 --config-file=/var/lib/mysql-cluster/config.ini
Le estamos diciendo el número de id correspondiente que hemos puesto en la config y donde está dicha config.
Ahora tenemos que hacer lo mismo en el nodo 2, salvo la última parte donde le indicaremos que es el id 2, es decir, tras hacer todo y crear el fichero de config, ejecutamos.
ndb_mgmd --ndb-nodeid=2 --config-file=/var/lib/mysql-cluster/config.ini
Donde como podéis observar le hemos cambiado el id.
Ejecutamos ndb_mgm y tras ello escribimos show, veremos que ambas están ok.
DATA NODES
Descargamos e instalamos lo necesario
yum -y remove mariadb-libs
cd ~
wget https://cdn.mysql.com/archives/mysql-cluster-gpl-8.0/mysql-cluster-community-8.0.20-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-cluster-community-8.0.20-1.el7.x86_64.rpm-bundle.tar
rpm -Uvh mysql-cluster-community-data-node-8.0.20-1.el7.x86_64.rpm
Editamos el my.cnf
nano /etc/my.cnf
Quedando de la siguiente manera
[mysqld]
ndbcluster
ndb-connectstring=172.17.110.10 # IP address of Management Node 1
ndb-connectstring=172.17.110.11 # IP address of Management Node 2
[mysql_cluster]
ndb-connectstring=172.17.110.10 # IP address of Management Node 1
ndb-connectstring=172.17.110.11 # IP address of Management Node 2
Les estamos indicando quienes son los management anteriormente creados con toda la config.
Creamos el directorio
mkdir -p /data/logs
Ya definido globalmente en los ficheros de configuración de los management y arrancamos el nodo con
ndbd
Realizar esto mismo por cada data node.
MYSQL NODE
Por último los mysql, instalamos todo lo necesario
yum -y install epel-release
yum -y install perl-Class-MethodMaker
yum -y install perl-Data-Dumper
yum -y install perl-DBI
yum -y remove mariadb-libs
rpm -Uvh mysql-cluster-community-common-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-libs-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-client-8.0.20-1.el7.x86_64.rpm
rpm -Uvh mysql-cluster-community-server-8.0.20-1.el7.x86_64.rpm
y editamos el my.cnf
nano /etc/my.cnf
Quedando de la siguiente manera
[mysqld]
ndbcluster
ndb-connectstring=172.17.110.10 # IP address of Management Node 1
ndb-connectstring=172.17.110.11 # IP address of Management Node 2
default_storage_engine=ndbcluster # Define default Storage Engine used by MySQL
#[mysql_cluster]
#ndb-connectstring=172.17.110.10 # IP address of Management Node 1
#ndb-connectstring=172.17.110.11 # IP address of Management Node 2
Lo mismo que antes les estamos diciendo quienes son los management que tienen toda la config y el motor que vamos a usar en este caso ndb
Creamos el directorio
mkdir -p /var/lib/mysql-cluster
Y arrancamos el servicio
service mysqld start
Esto en ambos nodos.
Tras esto ya podemos comprobar el estado del cluster otra vez con
ndb_mgm
show
Espero que os sirva, cualquier duda escribir un comentario.
Buen finde.
TL
Gracias por leer nuestros posts.
No hay comentarios