sql >> Base de Datos >  >> RDS >> Mysql

Cómo monitorear varias instancias de MySQL que se ejecutan en la misma máquina - Consejos y trucos de ClusterControl

Requiere ClusterControl 1.6 o posterior. Se aplica a instancias/clústeres basados ​​en MySQL.

En algunas ocasiones, es posible que desee ejecutar varias instancias de MySQL en una sola máquina. Es posible que desee otorgar a diferentes usuarios acceso a sus propios servidores MySQL que ellos mismos administran, o tal vez desee probar una nueva versión de MySQL mientras mantiene intacta una configuración de producción existente.

Es posible usar un binario de servidor MySQL diferente por instancia, o usar el mismo binario para múltiples instancias (o una combinación de los dos enfoques). Por ejemplo, puede ejecutar un servidor de MySQL 5.6 y uno de MySQL 5.7 para ver cómo las diferentes versiones manejan una determinada carga de trabajo. O puede ejecutar varias instancias de la última versión de MySQL, cada una administrando un conjunto diferente de bases de datos.

Ya sea que use o no binarios de servidor distintos, cada instancia que ejecute debe configurarse con valores únicos para varios parámetros operativos. Esto elimina el potencial de conflicto entre instancias. Puede usar MySQL Sandbox para crear varias instancias de MySQL. O puede usar mysqld_multi disponible en MySQL para iniciar o detener cualquier cantidad de procesos mysqld separados que se ejecutan en diferentes puertos TCP/IP y sockets UNIX.

En esta publicación de blog, le mostraremos cómo configurar ClusterControl para monitorear varias instancias de MySQL que se ejecutan en un host.

Limitación de control de clúster

En el momento de escribir este artículo, ClusterControl no admite la supervisión de varias instancias en un host por clúster/grupo de servidores. Asume las siguientes mejores prácticas:

  • Solo una instancia de MySQL por host (servidor físico o máquina virtual).
  • La redundancia de datos de MySQL debe configurarse en el servidor N+1.
  • Todas las instancias de MySQL se ejecutan con una configuración uniforme en todo el clúster/grupo de servidores, por ejemplo, el puerto de escucha, el registro de errores, el directorio de datos, el directorio base y el socket son idénticos.

Con respecto a los puntos mencionados anteriormente, ClusterControl asume que en un grupo de clúster/servidor:

  • Las instancias de MySQL se configuran de manera uniforme en un clúster; mismo puerto, la misma ubicación de registros, directorio base/datos y otras configuraciones críticas.
  • Supervisa, administra e implementa solo una instancia de MySQL por host.
  • El cliente MySQL debe estar instalado en el host y disponible en la ruta ejecutable para el usuario del sistema operativo correspondiente.
  • MySQL está vinculado a una dirección IP a la que puede acceder el nodo ClusterControl.
  • Sigue monitoreando las estadísticas del host, por ejemplo, CPU/RAM/disco/red para cada instancia de MySQL individualmente. En un entorno con varias instancias por host, debe esperar estadísticas de host redundantes, ya que supervisa el mismo host varias veces.

Con las suposiciones anteriores, las siguientes funciones de ClusterControl no funcionan para un host con varias instancias:

Copia de seguridad:Percona Xtrabackup no admite varias instancias por host y mysqldump ejecutado por ClusterControl solo se conecta al socket predeterminado.

Gestión de procesos:ClusterControl utiliza el estándar 'pgrep -f mysqld_safe' para verificar si MySQL se está ejecutando en ese host. Con múltiples instancias de MySQL, este es un enfoque de falso positivo. Como tal, la recuperación automática de nodo/clúster no funcionará.

Gestión de la configuración:ClusterControl aprovisiona el directorio de configuración estándar de MySQL. Por lo general, reside en /etc/ y /etc/mysql.

Solución alternativa

Todavía es posible monitorear múltiples instancias de MySQL en una máquina con ClusterControl con una solución simple. Cada instancia de MySQL debe tratarse como una sola entidad por grupo de servidores.

En este ejemplo, tenemos 3 instancias de MySQL en un solo host creado con MySQL Sandbox:

ClusterControl monitoreando múltiples instancias en el mismo host

Creamos nuestras instancias de MySQL usando los siguientes comandos:

$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

De forma predeterminada, MySQL Sandbox crea instancias de mysql que escuchan 127.0.0.1. Es necesario configurar cada nodo adecuadamente para que escuchen todas las direcciones IP disponibles. Aquí está el resumen de nuestras instancias de MySQL en el host:

[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json 
{
"node1":  
    {
        "host":     "master",
        "port":     "15024",
        "socket":   "/tmp/mysql_sandbox15024.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node2":  
    {
        "host":     "master",
        "port":     "15025",
        "socket":   "/tmp/mysql_sandbox15025.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node3":  
    {
        "host":     "master",
        "port":     "15026",
        "socket":   "/tmp/mysql_sandbox15026.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
}

El siguiente paso es modificar la configuración de las instancias recién creadas. Vaya a my.cnf para cada uno de ellos y haga hash en la variable bind_address:

[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox  13086     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox  13805     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox  14065     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1

Luego instale mysql en su nodo maestro y reinicie todas las instancias usando el script restart_all.

[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all  
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started

Desde ClusterControl, debemos realizar 'Importar' para cada instancia, ya que debemos aislarlos en un grupo diferente para que funcione.

ClusterControl importar servidor existente

Para el nodo 1, ingrese la siguiente información en ClusterControl> Importar:

ClusterControl importar servidor existente

Asegúrese de colocar los puertos adecuados (diferentes para diferentes instancias) y host (igual para todas las instancias).

Puede controlar el progreso haciendo clic en el ícono Actividad/Trabajos en el menú superior.

ClusterControl importa los detalles del servidor existente

Verá el nodo 1 en la interfaz de usuario una vez que ClusterControl termine el trabajo. Repita los mismos pasos para agregar otros dos nodos con los puertos 15025 y 15026. Debería ver algo como lo siguiente una vez que se agreguen:

Panel de control de clúster

Ahí tienes Acabamos de agregar nuestras instancias de MySQL existentes en ClusterControl para el monitoreo. ¡Feliz seguimiento!

PD:¡Para comenzar con ClusterControl, haga clic aquí!