Anteriormente mostramos cómo configurar el clúster MariaDB Galera con HAproxy, y hoy haremos una configuración similar con la distribución de MySQL de Percona. Percona es la empresa que tiene una gran experiencia con MySQL y MongoDB, y hacen sus propias distribuciones de esas bases de datos, así como motores de almacenamiento para ambas bases de datos. Hoy solo nos concentraremos en MySQL, y no en la oferta de MongoDB de esta empresa.
Configuración de hosts, cortafuegos y repositorios
Primero comience configurando el archivo de hosts. Tenemos tres nodos para el clúster de Percona y un nodo para HAproxy. Mi archivo de hosts en los 4 servidores tiene esas cuatro líneas:
10.17.0.8 centos-percona01
10.17.0.9 centos-percona02
10.17.0.10 centos-percona03
10.17.0.11 centos-haproxy
A continuación, configuremos el cortafuegos en todos los hosts excepto en HAproxy uno. Ese requerirá diferentes configuraciones y lo haremos después. Primero, iniciemos firewalld en los tres nodos de percona.
systemctl start firewalld
Entonces permitimos el servicio mysql. Pecona es una distribución mysql, por lo que usa el mismo puerto que mysql.
firewall-cmd --zone=public --add-service=mysql --permanent
A continuación, agregamos otros puertos necesarios:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent
firewall-cmd --zone=public --add-port=9200/tcp --permanent
Y recargar el cortafuegos
firewall-cmd --reload
Cuando haya terminado, a continuación, debemos instalar epel release
yum instalar epel-release
A continuación instalamos socat desde el repositorio de EPEL
yum install socat
Y luego eliminamos mariadb-libs porque entra en conflicto con percona
yum remove mariadb-libs
Instalación y configuración de Percona
Necesitamos agregar un repositorio que contenga percona
yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
Ahora podemos instalar percona cluster y todas las demás dependencias
yum install Percona-XtraDB-Cluster-server-56 Percona-XtraDB-Cluster-client-56 Percona-XtraDB-Cluster-shared-56 percona-toolkit percona-xtrabackup Percona-XtraDB-Cluster-galera-3 rsync nc
E inicie mysql
systemctl start mysql
Lo primero que hacemos en todos los servidores mysql es ejecutar el script mysql_secure_installation. Así que hagámoslo.
mysql_secure_installation
Debe ingresar su nueva contraseña raíz y responder y a todas las preguntas.
Cuando haya terminado, inicie sesión en su cuenta raíz
mysql -u root -p
enter password
Y crea sstuser tu clúster
mysql> create user sstuser@'%' identified by 'strongpassword';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* to sstuser@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
Luego de esto debemos detener Mysql para editar los archivos de configuración.
systemctl stop mysql
nano /etc/my.cnf
En la configuración, encuentre esas líneas y haga que se vean exactamente así, simplemente cámbielas por su propia contraseña y cambie el nombre del nodo y la dirección del nodo a su nombre de host para cada servidor
wsrep_cluster_address = gcomm://centos-percona01,centos-percona02,centos-percona03
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so
wsrep_slave_threads = 8
wsrep_cluster_name = Cluster Percona XtraDB
wsrep_node_name = centos-percona01
wsrep_node_address = centos-percona01
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = sstuser:strongpassword
Tenga en cuenta que la primera línea en el primer servidor (centos-percona01) puede estar vacía, así:
wsrep_cluster_address = gcomm://
Una vez realizada la configuración, necesitamos arrancar el primer nodo y luego, normalmente, iniciar el segundo y el tercero.
En la primera ejecución del servidor
systemctl start mysql@bootstrap
en la segunda y tercera carrera
systemctl start mysql
A continuación, debemos probar si el clúster está funcionando.
mysql -u raíz -p
ingrese la contraseña
Y luego ejecute estos comandos:
SHOW STATUS LIKE 'wsrep_local_state_comment';
show global status like 'wsrep_cluster_size';
Deberían obtener un resultado como este:
Con esta configuración del clúster se concluye.
Configuración de proxy HA
Primero, necesitamos que se instale clustercheck en todos los nodos del clúster para que el clúster pueda repararse con HAproxy. Obtengamos el script con wget
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
El script debe convertirse en ejecutable y moverse a uno de sus directorios $PATH.
chmod +x clustercheck
mv clustercheck /usr/bin/
Ahora también necesitamos mysqlchk que está incluido en el paquete xinetd:
yum install xinetd
A continuación, movemos crear un usuario de verificación de clúster en la base de datos. Podemos escribir esto solo en el primer nodo
mysql -u root -p
mysql> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
A continuación, podemos probar si clustercheck funciona como se esperaba:
[root@centos-percona01 ~]# clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40
Percona XtraDB Cluster Node is synced.
A continuación, pasamos a la configuración de xinetd, xinetd debe agregarse a la lista de servicios.
nano /etc/services
Usamos CTRL-W para encontrar la parte donde está el puerto 9200, luego recomendamos los servicios que usan ese puerto y en su lugar agregamos una nueva línea. Tiene que verse así:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Después de que hayamos terminado guardamos. Tenga en cuenta que todos los nodos del clúster, excepto HAproxy, deben tener esto hecho.
Ahora es el momento de iniciar sesión en nuestro servidor HAporoxy. Primero necesitamos hacer una copia de seguridad de la configuración de haproxy.
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Luego haremos uno nuevo desde cero
nano /etc/haproxy/haproxy.cfg
Podemos copiar la configuración de HAproxy desde aquí, excepto que estas tres líneas deben cambiarse:
server centos-percona01 10.132.84.186:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona02 10.132.84.141:3306 check port 9200 inter 12000 rise 3 fall 3
server centos-percona03 10.132.84.67:3306 check port 9200 inter 12000 rise 3 fall 3
Las partes resaltadas deben cambiarse con sus nombres de host y sus direcciones. A continuación, debemos iniciar firewalld en el servidor haproxy y permitir los puertos que necesitamos usar
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Después de eso necesitamos recargar el firewall
firewall-cmd --reload
Por fin, inicia haproxy
systemctl start haproxy
La configuración ha terminado, ahora tenemos que probar.
Probando HAproxy
Apuntemos el navegador a la dirección IP pública del servidor HAproxy en el puerto 9000:
Todos los nodos están en línea. A continuación, instalemos el cliente percona en el servidor haproxy para que podamos intentar consultar el clúster desde allí.
yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install Percona-XtraDB-Cluster-client-56
E intentemos ver si podemos tener una consulta de este servidor haproxy:
mysql -u root -p -h 10.132.83.13 -P 3306 -e "select Host, User, Password from mysql.user"
Conclusión
Hemos configurado el clúster de 3 nodos de Percona XtraDB balanceado por HAproxy. Es una configuración similar a la del artículo de la semana pasada con MariaDB y Galera, pero con el motor de almacenamiento Percona y sin WordPress. Esta configuración de Percona se puede usar para alojar una gran variedad de conjuntos de datos, entre otras cosas, puede volver a usarla con WordPress, como en nuestro artículo anterior. Con eso concluimos este artículo, gracias por leer y que tenga un buen día.