Cómo instalar Percona XtraDB Clúster en Ubuntu 16.04

,

Percona XtraDB Clúster, es la solución de alta disponibilidad y balanceo de carga multi-máster de la bifurcación (fork) de MySQL de Percona. Según la recomendación de Percona, este tipo de clúster necesita un mínimo de 3 nodos o más, pero siempre es recomendable instalarlo en un número impar de nodos. En este artículo, te mostraré cómo instalar  y configurar un clúster MySQL de Percona con 3 nodos.

Pre-requisitos

  1. Todos los nodos deben tener instalado Ubuntu 16.04 LTS. Se supone que las direcciones IP de cada nodo sean: 192.168.0.10 a la 192.168.0.12.
  2. Cuenta de usuario en cada servidor con privilegios administrativos. Puedes aprender cómo hacer esto siguiendo los pasos del tutorial: Configuración inicial del servidor de Ubuntu.
  3. La configuración del Firewall permite las conexiones hacia los puertos 3306, 4444, 4567 y 4568
  4. Desactivar AppArmor para el perfil MySQL. Si no sabes cómo hacerlo, sigue los pasos del tutorial: Cómo desactivar o activar un perfil de AppArmor.

Instalar Percona XtraDB Clúster

Los paquetes del repositorio de percona para Ubuntu y Debian están firmados con una llave. Lo primero que debes hacer es agregar a apt la llave con la que están firmados los paquetes. Para eso ejecuta el siguiente comando:

Luego debes agregar al fichero /etc/apt/sources.list, la información del repositorio de Percona. Debes reemplazar VERSION con el nombre de la distribución que utilices:

El fichero sources.list tiene una apariencia similar a esta:

Una vez que agregues la información del repositorio de Percona para la distribución xenial, en este caso, quedará de la siguiente forma:

Lo próximo es actualizar la caché:

Finalmente debes utilizar apt para instalar el clúster de la siguiente manera:

Configurar el primer nodo

Sin detener el MySQL debes crear el usuario de réplica:

Luego debes detener el MySQL de la siguiente forma:

Puedes comprobar que MySQL se ha detenido utilizando systemctl:

Lo siguiente es editar el archivo my.cnf con la configuración necesaria para que el clúster funcione.

Una vez que edites el archivo, el contenido será muy similar a esto:

Luego debes agregar al archivo de configuración las siguientes líneas:

En este momento debes estar preguntándote qué significa todo esto. Acá te dejo una breve explicación de cada uno de los elementos de la configuración:

  • Los dos primeros valores, datadir y user son: el directorio de datos de MySQL y el usuario que se utiliza para acceder a los datos, respectivamente.
  • wsrep_provider: es el directorio donde se encuentra la librería galera. Este tutorial está ejemplificado en un sistema operativo de 64 bits. Si utilizas un sistema de 32 bits la librería galera se encontrará en el directorio /usr/lib/libgalera_smm.so.
  • wsrep_cluster_address: contiene las direcciones de cada nodo dentro del clúster separadas por «,».
  • binlog_format: contiene el formato en el que se guarda el log binario y según la especificación de Percona debe ser ROW.
  • default_storage_engine: este valor le indica al clúster el tipo de tablas que debe replicar. Sin embargo, por limitaciones de Galera, este valor siempre debe ser InnoDB
  • innodb_autoinc_lock_mode: este valor, por defecto, es 1 en un servidor MySQL común, pero en el clúster de Percona es necesario ponerlo en 2 para evitar errores en la replicación.
  • wsrep_node_address: es la dirección del nodo actual.
  • wsrep_sst_method: es el método de réplica empleado. Es recomendable utilizar  xtrabackup-v2, al menos en el momento de escribir este artículo (Versión del clúster 5.6).
  • wsrep_cluster_name: es el nombre que deseas ponerle al clúster. Puede tener cualquier valor, pero sí debe ser el mismo en todos los nodos.
  • wsrep_sst_auth: son las credenciales para poder autenticar el usuario de réplica en las instancias MySQL. Es un valor con la siguiente estructura «nombre_usuario:contraseña«
  • log_error: es la ubicacion del log de errores.

Una vez que hayas terminado de edtitar el archivo, solo resta guardar el documento y salir del editor (ctrl + X y luego Y, en caso de utilizar nano).

Es momento de que inicies el primer nodo del clúster. Para eso ejecuta el siguiente comando:

Este comando ejecuta el primer nodo sin la necesidad de que estén activos los nodos restantes del clúster. A este proceso se le llama bootstrap.

Como el bootstrap no inicia el servicio MySQL, es preciso que lo inicies utilizando el comando:

Para comprobar que se haya iniciado correctamante usa: systemctl status mysql. Deberás ver algo como esto:

Lo otro que debes hacer es iniciar sesión en MySQL y comprobar el estado del clúster con el siguiente comando:

Configurar los 2 nodos restantes

La configuración de los 2 nodos restantes es exactamente igual a la del primer nodo, solo cambia la propiedad:

Una vez que copies el archivo de configuración del primer nodo y cambies el parámetro wsrep_node_address debes iniciar el MySQL con el siguiente comando:

Inicia sesión y comprueba el estado del clúster:

Lo más importante es que el parámetro wsrep_cluster_size tenga un valor mayor a 1, 2 en el caso de que tengas 2 nodos 3 en el caso de 3 y así sucesivamente.

Probar el funcionamiento

Para probar el funcionamiento del Percona XtraDB Clúster harás una serie de consultas en cada nodo de forma aleatoria y revisarás que la información esté en los otros 2 nodos.

En el nodo 1 escribe:

En el 2:

En el nodo 3:

Regresa al nodo 1 y escribe:

Luego en el nodo 2 podrás ver los datos insertados:

Llegado a este punto verás que la réplica entre los nodos funciona perfectamente.

Prueba más exhaustiva

Si todavía no estás totalmente convencido de que la réplica funciona como esperas, puedes utilizar el siguiente script:

Con este script podrás comprobar que el campo node_id aumenta consecutivamente hasta 2000, mientras que el campo node_name te muestra qué nodo ejecutó la inserción.

Punto final

Finalmente, deberías probar qué pasa cuando uno de los nodos cae. Para ello, puedes utilizar un balanceador de carga, HAProxy por ejemplo, y añadir los nodos del clúster. Con HAProxy es muy fácil de hacerlo. Puedes seleccionar el algoritmo de balanceo de Round Robin para que actúe como un balanceador «tonto» que simplemente vaya repartiendo las conexiones entre los nodos del clúster una a una.

Una vez que lo tengas, puedes modificar el script anterior para enviar los inserts a la IP del balanceador y que éste se encargue de balancear entre los nodos. Mientras, puedes apagar uno de los nodos, parando el servicio mysqld o habilitando iptables para simular la caída y ver qué pasa en los otros 2. Debes ver un incremento lineal de la variable para cerciorarte de que todo funciona bien.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *