Alta disponibilidad de base de datos en CentOS 7
CentOS 7 pronto alcanzará su fin de ciclo de vida (EOL). Esta documentación se conserva por propósitos históricos.
Alta disponibilidad en la Base de datos
El objetivo de este apartado es ofrecer una solución completa para HA en entornos de Pandora FMS. Éste es el único modelo HA con soporte oficial para Pandora FMS. Esta solución se proporciona -preinstalada- desde OUM 724 hasta 769. Este sistema reemplaza DRBD y otros sistemas HA recomendados en el pasado (724 y anteriores).
Véase “Migración de entornos HA Corosync-Pacemaker” para actualizar la alta disponibilidad de base de datos utilizada en la versión 770.
Esta es la primera implementación de DB HA de Pandora FMS y el proceso de instalación es manual casi en su totalidad, usando la consola GNU/Linux como root. En versiones futuras facilitaremos la configuración desde la interfaz gráfica (GUI).
Pandora FMS se fundamenta en una base de datos MySQL para configurar y almacenar datos. Un fallo en la base de datos puede paralizar momentáneamente la herramienta de monitorización. El clúster de la base de datos de alta disponibilidad de Pandora FMS permite desplegar fácilmente una arquitectura robusta y tolerante a los fallos.
Se trata de una característica avanzada que requiere conocimientos en sistemas GNU/Linux.
Los recursos de clúster se gestionan con Pacemaker, un gestor de recursos de clúster de alta disponibilidad avanzado y escalable. Corosync proporciona un modelo de comunicación de grupo de proceso cerrado para crear máquinas de estado replicadas. Se eligió a Percona como RDBMS por defecto por su escalabilidad, disponibilidad, seguridad y características de backup.
El replication activo/pasivo se desarrolla desde un nodo maestro único (con permiso de escritura) a cualquier número de secundarios (sólo lectura). Una dirección IP virtual siempre lleva al maestro actual. Si falla el nodo maestro, uno de los secundarios asciende a maestro y se actualiza la dirección IP virtual en consecuencia.
La herramienta de base de datos HA de Pandora FMS, pandora_ha
, monitoriza el clúster y se asegura de que el servidor de Pandora FMS está en continuo funcionamiento, reiniciándolo en caso necesario. pandora_ha
se monitoriza a su vez con systemd.
Se recomienda mantener 15 días de datos y eventos como máximo, para guardar durante más tiempo se debe configurar una base de datos histórico. Consulte, además, el tema “Gestión y administración de los servidores PFMS”.
En este ejemplo se configurará un clúster de dos nodos, con hosts node1 y node2. Se cambiarán los nombres de host, contraseñas, etc. según lo que necesite para que concuerde con el entorno a implementar.
Versión 759 o anterior.
Los comandos que tengan que ejecutarse en un nodo irán precedidos por el hostname de ese nodo:
node1# <command>
Los comandos que tengan que ejecutarse en todos los nodos irán precedidos de la palabra all:
all# <command>
Hay un host adicional, denominado pandorafms en el que se encuentra o se instalará Pandora FMS.
Cuando se referencie all solo se refiere a los nodos de Base de datos, el nodo adicional Pandora FMS siempre se referenciara como pandorafms y no es parte de all.
Requisitos previos
CentOS 7 pronto alcanzará su fin de ciclo de vida (EOL). Esta documentación se conserva por propósitos históricos.
Se debe instalar CentOS versión 7 en todos los hosts, y deben poder resolver los hostnames de los demás hosts.
node1# ping node2 PING node2 (192.168.0.2) 56(84) bytes of data. node2# ping node1 PING node1 (192.168.0.1) 56(84) bytes of data. pandorafms# ping node1 PING node1 (192.168.0.1) 56(84) bytes of data. pandorafms# ping node2 PING node2 (192.168.0.2) 56(84) bytes of data.
Se debe instalar y ejecutar un servidor Open SSH en cada host. Suprimimos el aviso que muestra Open SSH:
all# [ -f /etc/cron.hourly/motd_rebuild ] && rm -f /etc/cron.hourly/motd_rebuild all# sed -i -e 's/^Banner.*//g' /etc/ssh/sshd_config all# systemctl restart sshd
La herramienta de base de datos HA de Pandora FMS no funcionará correctamente si Open SSH tiene un aviso configurado.
Generamos nuevas claves de autenticación SSH para cada host y copiamos la clave pública para cada uno de los hosts:
Se pueden generar claves para un usuario que no sea root para una posterior instalación de clúster con usuario “no root”.
node1# echo -e "\n\n\n" | ssh-keygen -t rsa node1# ssh-copy-id -p22 root@node2 node1# ssh node2 node2# echo -e "\n\n\n" | ssh-keygen -t rsa node2# ssh-copy-id -p22 root@node1 node2# ssh node1 pandorafms# echo -e "\n\n\n" | ssh-keygen -t rsa pandorafms# ssh-copy-id -p22 root@node1 pandorafms# ssh-copy-id -p22 root@node2 pandorafms# ssh node1 pandorafms# ssh node2
En el nodo de Pandora FMS, copiamos el par de claves a /usr/share/httpd/.ssh/
. La consola de Pandora FMS necesita recuperar el estado del clúster:
pandorafms# cp -r /root/.ssh/ /usr/share/httpd/ pandorafms# chown -R apache:apache /usr/share/httpd/.ssh/
Los siguientes pasos son necesarios solo si los nodos ejecutan SSH en un puerto no estándar. Debe sustituir 22 con el número de puerto correcto:
all# echo -e "Host node1\n Port 22">> /root/.ssh/config all# echo -e "Host node2\n Port 22">> /root/.ssh/config
Instalación de Percona
Instale el paquete necesario:
all# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm all# yum install -y Percona-Server-server-57 percona-xtrabackup-24
Para más información respecto al proceso de instalación de Percona puede consultar la documentación oficial del producto:
Una vez instalados los paquetes, asegúrese de que el servicio Percona está desactivado, ya que lo gestionará el clúster:
all# systemctl disable mysqld
Si el servicio del sistema no está desactivado, el gestor de recursos del clúster no funcionará correctamente.
A continuación, inicie el servidor Percona:
all# systemctl start mysqld
Se generará una nueva contraseña temporal conectada a /var/log/mysqld.log
. Conécte al servidor Percona y cambie la contraseña de root:
all# mysql -uroot -p$(grep "temporary password" /var/log/mysqld.log | \ rev | cut -d' ' -f1 | rev) mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Pandor4!'); mysql> UNINSTALL PLUGIN validate_password; mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('pandora'); mysql> quit
Reinstale el paquete del servidor con la opción ( flag ) ha:
pandorafms# ./pandora_server_installer --install --ha
Una vez instalado el server con las herramientas HA habilitadas, encontrará el generador de configuración para la replicación de base de datos en la ruta: /usr/share/pandora_server/util/myconfig_ha_gen.sh
Example: ./myconfig_ha_gen.sh -i serverid [-l file_location] [-d database] [-b binlog] [-u dbuser] [-p dbpass] [-s poolsize] [-h help] Mandatory parameters: -i --serverid Set the server id for the database (Mandatory) Optional parameters: -l --location Set my.cnf custom location including filename. [ default value: /etc/my.cnf ] (optional) -d --database Set the database to be replicated. [ default value: pandora ] (optional) -b --binlog Set binlog file. [ default value: mysql-bin ] (optional) -u --dbuser Set dbuser for mysql connection and backups. [ default value: root ] (optional) -p --dbpass Set dbpassword for mysql connection and backups. [ default value: pandora ] (optional) -s --poolsize Set innodb_buffer_pool_size static size in M (Megabytes) or G (Gigabytes). [ default value: autocalculated ] (optional) -h --help Print help.
En el caso actual en que las bases de datos no están en el mismo servidor que la aplicación, será necesario copiar el script a los nodos para ser ejecutados localmente.
pandorafms# scp /usr/share/pandora_server/util/myconfig_ha_gen.sh root@node1:/root/ pandorafms# scp /usr/share/pandora_server/util/myconfig_ha_gen.sh root@node2:/root/
Solo será necesario pasar el parámetro serverid (obligatorio) en entornos estándar y algunos parámetros opcionales para entornos personalizados.
Si el usuario por defecto o el definido no conecta a la base de datos, el script finalizará dando un error de conexión.
También se tiene la posibilidad de pasar como argumentos la base de datos, el usuario y la contraseña. De no hacerlo se usarán los configurados por defecto.
Para este caso ejecutará en ambos nodos el script solo pasando el server id si tenemos las credenciales por defecto, en caso contrario definir los parámetros necesarios.
node1# /root/myconfig_ha_gen.sh -i 1 node2# /root/myconfig_ha_gen.sh -i 2
Importante: Cada nodo debe tener un identificador único
Se escribirá el fichero de configuración de Percona en /etc/my.cnf
donde estarán definidos el identificador del server y la configuración recomendada para la replicación de base de datos.
Debe reiniciar el servicio de mysqld para comprobar que la configuración se ha aplicado correctamente.
all# systemctl restart mysqld
Instalación de Pandora FMS
Nueva instalación de Pandora FMS
Instale Pandora FMS en la base de datos recién creada. Detenga el servidor de Pandora FMS:
pandorafms# /etc/init.d/pandora_server stop
A partir de la versión NG 754 dispone de opciones adicionales en el arranque y parada manual de Entornos de Alta Disponibilidad (HA).
Instalación de Pandora FMS existente
Detenga el servidor de Pandora FMS:
pandorafms# /etc/init.d/pandora_server stop
Haga una copia de seguridad de la base de datos de Pandora FMS:
pandorafms# mysqldump -uroot -ppandora --databases pandora> /tmp/pandoradb.sql pandorafms# scp /tmp/pandoradb.sql node1:/tmp/
Ahora cargue la información a la nueva base de datos:
node1# mysql -uroot -ppandora pandora -e source "/tmp/pandoradb.sql"
Configuración de la replicación
Otorgue los privilegios necesarios para la replicación con el fin de trabajar en todas las bases de datos:
all# mysql -uroot -ppandora mysql> GRANT ALL ON pandora.* TO 'root'@'%' IDENTIFIED BY 'pandora'; mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'pandora'; mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE, SUPER, PROCESS, RELOAD ON *.* TO 'root'@'localhost' IDENTIFIED BY 'pandora'; mysql> GRANT select ON mysql.user TO 'root'@'%' IDENTIFIED BY 'pandora'; mysql> FLUSH PRIVILEGES; mysql> quit
Haga una copia de seguridad de la base de datos del primer nodo y escriba el nombre y la posición del archivo del log maestro (en el ejemplo,
mysql-bin.000001
y 785
):
node1# [ -e /root/pandoradb.bak ] && rm -rf /root/pandoradb.bak node1# innobackupex --no-timestamp /root/pandoradb.bak/ node1# innobackupex --apply-log /root/pandoradb.bak/ node1# cat /root/pandoradb.bak/xtrabackup_binlog_info mysql-bin.000001 785
Cargue la base de datos en el segundo nodo y configure para replicar desde el primer nodo (debe configurar MASTER_LOG_FILE
y MASTER_LOG_POS
a los valores del paso anterior):
node2# systemctl stop mysqld node1# rsync -avpP -e ssh /root/pandoradb.bak/ node2:/var/lib/mysql/ node2# chown -R mysql:mysql /var/lib/mysql node2# chcon -R system_u:object_r:mysqld_db_t:s0 /var/lib/mysql node2# systemctl start mysqld node2# mysql -uroot -ppandora mysql> CHANGE MASTER TO MASTER_HOST='node1', MASTER_USER='root', MASTER_PASSWORD='pandora', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=785; mysql> START SLAVE; mysql> SHOW SLAVE STATUS \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: node1 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 785 Relay_Log_File: node2-relay-bin.000003 Relay_Log_Pos: 998 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: pandora Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 785 Relay_Log_Space: 1252 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 580d8bb0-6991-11e8-9a22-16efadb2f150 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) mysql> QUIT
Debe asegurarse de que Slave_IO_Running
y Slave_SQL_Running
muestran Yes
. Otros valores pueden ser diferentes a los del ejemplo.
Se recomienda no utilizar usuario root para la realización de este proceso. Es aconsejable dar permisos a otro usuario encargado de gestionar la base de datos para evitar posibles conflictos.
Configuración del clúster de dos nodos
Instale los paquetes necesarios:
all# yum install -y epel-release corosync ntp pacemaker pcs all# systemctl enable ntpd all# systemctl enable corosync all# systemctl enable pcsd all# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
all# systemctl start ntpd all# systemctl start corosync all# systemctl start pcsd
Detenga el servidor Percona:
node1# systemctl stop mysqld
node2# systemctl stop mysqld
Autenticación de todos los nodos en el clúster
Crear e iniciar el clúster:
all# echo hapass | passwd hacluster --stdin
node1# pcs cluster auth -u hacluster -p hapass --force node1 node2 node1# pcs cluster setup --force --name pandoraha node1 node2 node1# pcs cluster start --all node1# pcs cluster enable --all node1# pcs property set stonith-enabled=false node1# pcs property set no-quorum-policy=ignore
Comprobación el estado del clúster:
node#1 pcs status Cluster name: pandoraha Stack: corosync Current DC: node1 (version 1.1.18-11.el7_5.2-2b07d5c5a9) - partition with quorum Last updated: Fri Jun 8 12:53:49 2018 Last change: Fri Jun 8 12:53:47 2018 by root via cibadmin on node1 2 nodes configured 0 resources configured Online: [ node1 node2 ] No resources Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
Ambos nodos deberían estar online
( Online: [ node1 node2 ]
).
Otros valores pueden ser diferentes a los del ejemplo.
Instalación del agente de replicación Pacemaker de Percona
Se puede descargar manualmente desde biblioteca PFMS.
all# cd /usr/lib/ocf/resource.d/ all# mkdir percona all# cd percona all# curl -L -o pacemaker_mysql_replication.zip https://pandorafms.com/library/wp-content/uploads/2019/12/pacemaker_mysql_replication.zip all# unzip pacemaker_mysql_replication.zip all# rm -f pacemaker_mysql_replication.zip all# chmod u+x mysql
Configure los recursos del clúster. Sustituir < VIRT_IP > por la dirección IP virtual de preferencia:
Si se ha modificado la contraseña por defecto utilizada en esta guía para el usuario root de la base de datos, conviene actualizar replication_passwd
y test_passwd
respectivamente.
Los nombres de los recursos del clúster deben ser exactamente los indicados en esta guía ( pandoraip
y pandoradb
)
node1# export VIP='<VIRT_IP>' node1# pcs resource create pandoradb ocf:percona:mysql config="/etc/my.cnf" \ pid="/var/run/mysqld/mysqld.pid" socket="/var/lib/mysql/mysql.sock" \ replication_user="root" replication_passwd="pandora" max_slave_lag="60" \ evict_outdated_slaves="false" binary="/usr/sbin/mysqld" datadir="/var/lib/mysql" \ test_user="root" test_passwd="pandora" op start interval="0" timeout="60s" \ op stop interval="0" timeout="60s" op promote timeout="120" op demote timeout="120" \ op monitor role="Master" timeout="30" interval="5" on-fail="restart" op monitor role="Slave" \ timeout="30" interval="10" node1# pcs resource create pandoraip ocf:heartbeat:IPaddr2 ip=$VIP cidr_netmask=24 \ op monitor interval=20s node1# pcs resource master master_pandoradb pandoradb meta master-max="1" \ master-node-max="1" clone-max="2" clone-node-max="1" notify="true" \ globally-unique="false" target-role="Master" is-managed="true" node1# pcs constraint colocation add master master_pandoradb with pandoraip node1# pcs constraint order promote master_pandoradb then start pandoraip
Comprobación el estado del clúster:
node1# pcs status Cluster name: pandoraha Stack: corosync Current DC: node1 (version 1.1.18-11.el7_5.2-2b07d5c5a9) - partition with quorum Last updated: Fri Jun 8 13:02:21 2018 Last change: Fri Jun 8 13:02:11 2018 by root via cibadmin on node1 2 nodes configured 3 resources configured Online: [ node1 node2 ] Full list of resources: Master/Slave Set: master_pandoradb [pandoradb] Masters: [ node1 ] Slaves: [ node2 ] pandoraip (ocf::heartbeat:IPaddr2): Started node1 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
Ambos nodos deberían estar online
( Online: [ node1 node2 ]
).
Otros valores pueden ser diferentes a los del ejemplo.
Configuración del clúster de dos nodos con usuario "no root"
Se realizará de manera similar a la anterior. Se deberá haber copiado las credenciales del usuario, previamente explicado, y se deberán realizar los siguientes pasos:
# All nodes: useradd <usuario> passwd <usuario> usermod -a -G haclient <usuario> # Enable PCS ACL system pcs property set enable-acl=true --force # Create role pcs acl role create <rol> description="RW role" write xpath /cib # Create PCS user - Local user pcs acl user create <usuario> <rol> # Login into PCS from ALL nodes su - <usuario> pcs status Username: <usuario> Password: ***** # Wait for 'Authorized' message, ignore output. Wait a second and retry 'pcs status' command