Introducción a Percona Server y TokuDB
Percona Server es una alternativa de base de datos de código abierto y alto rendimiento, compatible directamente con MySQL. Se distingue por ofrecer características avanzadas, diagnósticos mejorados y optimizaciones de rendimiento, incluyendo motores de almacenamiento como XtraDB. Este artículo se centra en la instalación de Percona Server con el motor TokuDB, reconocido por su excepcional compresión de datos y eficiencia en operaciones de escritura, lo que lo hace ideal para sistemas de monitoreo intensivos en datos como Zabbix.
Preparación del Entorno Base
Adición del Repositorio Percona
Para asegurar el acceso a los paquetes más recientes de Percona Server, es necesario añadir su repositorio oficial a su sistema. Esto se realiza de la siguiente manera:
sudo yum install -y https://www.percona.com/downloads/percona-release/redhat/latest/percona-release-latest.noarch.rpm
Instalación de Dependencias Clave
Antes de instalar Percona Server, se requieren algunas dependencias, siando jemalloc crucial para el motor TokuDB. jemalloc es una biblioteca de asignación de memoria optimizada que mejora el rendimiento.
sudo yum install -y epel-release
sudo yum install -y jemalloc
TokuDB requiere la biblioteca libjemalloc versión 3.3.0 o superior. Si la versión del repositorio de su distribución es inferior, puede obtenerla de los repositorios de Percona. Es importante que la instancia de Percona Server se reinicie para cargar libjemalloc, preferiblemente con LD_PRELOAD, o configurando la variable malloc-lib en la sección [mysqld_safe] del archivo my.cnf.
Desactivación de Páginas Grandes Transparentes (THP)
El motor de almacenamiento TokuDB no puede funcionar correctamente si las páginas grandes transparentes (Transparent Huge Pages - THP) están habilitadas en el kernel de Linux. Desactivarlas es un paso esencial:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
Si las THP están activadas, TokuDB mostrará mensajes de error en el registro. Para una desactivación persistente, se debe añadir transparent_hugepage=never a los parámetros del kernel en el cargador de arranque (requiere un reinicio del servidor). Los comandos anteriores deshabilitan THP temporalmente hasta el próximo reinicio.
Instalación y Configuración Inicial de Percona Server TokuDB
Instalación de Paquetes de Percona Server con Soporte TokuDB
Proceda con la instalación de Percona Server y los componentes específicos para TokuDB:
sudo yum install -y Percona-Server-server-57 Percona-Server-tokudb-57
Inicio del Servicio de Base de Datos
Una vez instalados los paquetes, inicie y habilite el servicio MySQL para que se ejecute en el arranque del sistema:
sudo systemctl start mysqld
sudo systemctl enable mysqld
Asegurar la Instalación y Configurar Acceso Inicial
Percona Server 5.7 genera una contraseña temporal de root que debe ser cambiada. También es buena práctica crear un usuario administrativo con acceso remoto para la gestión (con precaución en entornos de producción).
# Obtener la contraseña temporal generada en el log de MySQL
TEMP_ROOT_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
echo "Contraseña temporal de root: $TEMP_ROOT_PASS"
# Iniciar sesión en MySQL con la contraseña temporal
mysql -u root -p"$TEMP_ROOT_PASS" --connect-expired-password
-- Dentro de MySQL, cambie la contraseña de root y cree un usuario para administración remota
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyStrongDBPassword!';
FLUSH PRIVILEGES;
-- Crear un usuario administrativo para acceso remoto (solo para pruebas, restrinja en producción)
CREATE USER 'remote_admin'@'%' IDENTIFIED BY 'MyStrongDBPassword!';
GRANT ALL PRIVILEGES ON *.* TO 'remote_admin'@'%';
FLUSH PRIVILEGES;
Activación de Plugins TokuDB
Para asegurar que TokuDB y sus utilidades estén completamente disponibles, cargue los plugins necesarios en la base de datos:
mysql -u root -pMyStrongDBPassword!
-- Cargar los plugins de TokuDB
INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_background_job_status SONAME 'ha_tokudb.so';
-- Verificar que los motores y plugins estén activos
SHOW ENGINES;
SHOW PLUGINS;
SELECT @@tokudb_version;
Preparación de la Base de Datos para Zabbix
Creación de Usuario y Esquema de Base de Datos para Zabbix
Configure una base de datos específica y un usuario con permisos limitados para que Zabbix almacene sus datos. Se recomienda usar utf8mb4_bin para una mejor compatibilidad con caracteres y ordneación:
mysql -u root -pMyStrongDBPassword!
CREATE DATABASE zabbix_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix_user'@'localhost' IDENTIFIED BY 'Zabbix@Pass123';
GRANT ALL PRIVILEGES ON zabbix_db.* TO 'zabbix_user'@'localhost';
FLUSH PRIVILEGES;
Instalación y Configuración de Zabbix
Configuración del Repositorio Zabbix (Versión 3.0)
Añada el repositorio de Zabbbix para instalar sus componentes. Este ejemplo utiliza la versión 3.0 para RHEL/CentOS 7:
sudo rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
# Si necesita usar un espejo diferente, edite /etc/yum.repos.d/zabbix.repo
# y modifique la línea baseurl según su mirror preferido.
Instalación de Componentes de Zabbix
Instale el servidor Zabbix, la interfaz web y el agente, junto con Apache (httpd) si aún no está presente:
sudo yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent httpd
Importación del Esquema Inicial de Zabbix (¡Con TokuDB!)
El script SQL de Zabbix por defecto utiliza InnoDB. Para aprovechar las ventajas de TokuDB, debemos modificarlo antes de importarlo:
# Descomprimir el archivo de esquema SQL
sudo gunzip /usr/share/doc/zabbix-server-mysql-*/create.sql.gz
# Modificar el archivo SQL para reemplazar InnoDB con TokuDB
sudo sed -i 's/ENGINE=InnoDB/ENGINE=TokuDB/g' /usr/share/doc/zabbix-server-mysql-*/create.sql
# Importar el esquema modificado a la base de datos de Zabbix
mysql -u zabbix_user -p'Zabbix@Pass123' zabbix_db < /usr/share/doc/zabbix-server-mysql-*/create.sql
Ajustes de Configuración de Zabbix Server y PHP
Edite los archivos de configuración para que Zabbix Server se conecte a la base de datos correcta y ajuste la zona horaria de PHP para la interfaz web:
# Configurar la conexión a la base de datos en zabbix_server.conf
sudo sed -i "s/^# DBPassword=$/DBPassword=Zabbix@Pass123/" /etc/zabbix/zabbix_server.conf
sudo sed -i "s/^# DBName=zabbix$/DBName=zabbix_db/" /etc/zabbix/zabbix_server.conf
sudo sed -i "s/^# DBUser=zabbix$/DBUser=zabbix_user/" /etc/zabbix/zabbix_server.conf
# Configuración de zona horaria para PHP en el archivo de configuración de Zabbix para Apache
sudo sed -i 's|# php_value date.timezone Europe/Riga|php_value date.timezone Asia/Shanghai|' /etc/httpd/conf.d/zabbix.conf
Inicio de Servicios de Zabbix y Apache
Habilite e inicie todos los servicios relacionados con Zabbix y Apache para que el sistema de monitoreo esté operativo:
sudo systemctl start zabbix-server zabbix-agent httpd
sudo systemctl enable zabbix-server zabbix-agent httpd
Después de esto, puede acceder a la interfaz web de Zabbix a través de su navegador para completar la configuración inicial.
Integración de Monitoreo de Percona con Zabbix
Instalación de Paquetes de Monitoreo Percona
Percona ofrece plantillas y scripts específicos para monitorear sus bases de datos con Zabbix. Instale el paquete de herramientas de monitoreo:
sudo yum install -y percona-zabbix-templates
Ajuste de Credenciales en Scripts de Monitoreo
Los scripts de monitoreo de Percona necesitan las credenciales para acceder a la base de datos. Modifique los scripts de acuerdo con el usuario remote_admin creado anteriormente:
# Los scripts de monitoreo de Percona se encuentran típicamente en /var/lib/zabbix/percona/scripts/
# Modifique las credenciales de MySQL en los siguientes archivos:
# - /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
# - /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
# Ejemplo de ajuste para get_mysql_stats_wrapper.sh
sudo sed -i "s/mysql -u root -pQwe_1234/mysql -u remote_admin -pMyStrongDBPassword!/g" /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
# Ejemplo de ajuste para ss_get_mysql_stats.php
sudo sed -i "s/\$mysql_user = 'root';/\$mysql_user = 'remote_admin';/g" /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
sudo sed -i "s/\$mysql_pass = 'Qwe_1234';/\$mysql_pass = 'MyStrongDBPassword!';/g" /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
Verificación de Configuración del Agente Zabbix y Prueba de Recolección
Reinicie el agente Zabbix para que cargue los nuevos parámetros y pruebe la recolección de un ítem de monitoreo:
sudo systemctl restart zabbix-agent
# Verifique los parámetros de usuario de Percona MySQL para Zabbix Agent
cat /etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf
# Pruebe la recolección de un ítem específico usando zabbix_get
sudo yum install -y zabbix-get
zabbix_get -s 127.0.0.1 -k "mysql.status[Open_files]"