Cluster Mysql 8 Centos

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

Comenta la entrada