daixijun.mysql
mysql
Herramienta para desplegar rápidamente un clúster de mysql
Soporta los siguientes modos de clúster:
- Replicación maestro-esclavo basada en GTID
- Semi-Sync habilitado por defecto
- Replicación maestro-esclavo basada en arquitectura MHA
- MGR modo de un solo maestro (por defecto)
- MGR modo de múltiples maestros
- Conjunto de réplicas (ReplicaSet)
Versiones de MySQL soportadas:
- MySQL Community Server oficial de Oracle MySQL Community Server
- GreatSQL de Wanli Open Source GreatSQL
- Percona Percona Server para MySQL
Requisitos del Entorno
- Centos 7+
- Ansible 2.9+
- MySQL 8.0+
Variables
Nombre de Variable | Tipo | Valor por Defecto | Descripción de la Variable |
---|---|---|---|
mysql_version | string | 8.0.23 | Versión de MySQL |
mysql_upgrade | bool | false | Si es necesario realizar una actualización de versión |
mysql_download_url | string | URL de descarga del paquete comprimido sin instalación | |
mysql_inventory_group | string | mysql | Nombre del grupo en el inventario de Ansible, por defecto es mysql |
mysql_basedir | string | /usr/local/mysql | Directorio de instalación |
mysql_datadir | string | /data/mysql | Directorio donde se almacenan los archivos de datos |
mysql_logdir | string | /var/log/mysqld | Directorio para almacenar los registros |
mysql_pidfile | string | /var/run/mysqld/mysqld.pid | Ubicación del archivo PID |
mysql_socket | string | /var/run/mysqld/mysqld.sock | Ubicación del archivo Socket |
mysql_port | int | 3306 | Puerto de escucha |
mysql_bind_address | string | 0.0.0.0 | Dirección de escucha |
mysql_interface | string | "" | Interfaz de red especificada, por defecto se usa la primera interfaz que no sea lo |
mysql_default_time_zone | string | +8:00 | Zona horaria especificada |
mysql_character_set_server | string | utf8mb4 | Conjunto de caracteres por defecto |
mysql_collation_server | string | utf8mb4_general_ci | Orden de caracteres por defecto |
mysql_max_connections | int | 1005 | Número máximo de conexiones |
mysql_max_user_connections | int | 1000 | Máximo de conexiones por usuario, debe ser menor que mysql_max_connections , se deben reservar algunas para el administrador |
mysql_interactive_timeout | int | 28800 | Segundos que espera el servidor antes de cerrar conexiones interactivas inactivas |
mysql_wait_timeout | int | 28800 | Segundos que espera el servidor antes de cerrar conexiones no interactivas inactivas |
mysql_max_connect_errors | int | 200 | Número máximo de errores de conexión |
mysql_root_password | string | "" | Contraseña del usuario root |
mysql_cluster_type | string | mgr | Tipo de clúster (por defecto mgr ), opciones: mgr (Mysql Group Replication)/ms (Master-Slave) |
mysql_cluster_name | string | default | Nombre del clúster, aplicable para InnodbCluster/ReplicaSet |
mysql_mha_enabled | bool | false | Si se habilita alta disponibilidad maestro-esclavo basada en MHA |
mysql_mha_config_dir | string | /etc/mha | Directorio de archivos de configuración de MHA |
mysql_mha_manager_workdir | string | /var/log/mha | Directorio de trabajo de MHA, almacena registros e información de estado |
mysql_mha_user | string | mha | Usuario para conectarse a MySQL, necesita tener permisos ALL |
mysql_mha_password | string | "" | Contraseña de administración de MySQL |
mysql_mha_repl_user | string | repl | Usuario para la replicación maestro-esclavo de MySQL |
mysql_mha_repl_password | string | "" | Contraseña para la replicación maestro-esclavo de MySQL |
mysql_mha_ssh_user | string | root | Usuario SSH para comunicación entre nodos |
mysql_mha_ssh_port | int | 22 | Puerto SSH para comunicación entre nodos |
mysql_mha_ping_interval | int | 2 | Intervalo de ping para verificar el estado del nodo maestro |
mysql_mha_vip | string | "" | VIP para enlazar al nodo maestro |
mysql_mha_wechat_token | string | "" | clave del robot WeChat empresarial, utilizada para enviar notificaciones de alerta |
mysql_mha_proxy | string | "" | Proxy usado por el script de notificaciones (send_report) |
mysql_repl_user | string | repl | Usuario para replicación maestro-esclavo/agrupada |
mysql_repl_password | string | Contraseña para el usuario de replicación maestro-esclavo/agrupada | |
mysql_group_replication_name | uuid | "" | Nombre del clúster de replicación, generar con SELECT UUID() o uuidgen en shell |
mysql_group_replication_single_primary_mode | bool | true | Indica si el clúster MGR está en modo de un solo maestro |
mysql_innodb_cluster_enable | bool | true | Si se habilita Innodb Cluster |
mysql_innodb_cluster_username | string | ic | Usuario para crear y gestionar Innodb Cluster, debe tener permisos ALL WITH GRANT OPTION |
mysql_innodb_cluster_password | string | "" | Contraseña de administración |
mysql_proxysql_config | bool | false | Si se usa proxysql como capa de proxy |
mysql_proxysql_monitor_username | string | monitor | Usuario para monitorear el estado de MGR mediante proxysql |
mysql_proxysql_monitor_password | string | "" | Contraseña para monitorear el estado de MGR mediante proxysql |
mysql_databases | array | [] | Bases de datos que se deben crear |
mysql_users | array | [] | Usuarios que se deben crear |
Dependencias
colecciones:
Ejemplo
Instalación
ansible-galaxy collection install -r requirements.yml
Uso
- hosts: servers
roles:
- { role: mysql, mysql_version: 8.0.20 }
Problemas Conocidos
- El módulo mysql_user tiene problemas de idempotencia al otorgar permisos
ALL
a usuarios en versiones MySQL 8.0 y superiores Idempotence all grant
Tareas Pendientes
- Soportar replicación semisíncrona en modo maestro-esclavo
- Mejorar las pruebas de efectos secundarios bajo MHA
- Soporte para actualización de versión
- Soporte para reconstrucción de nodos
- En caso extremo, cuando todos los nodos de un clúster MGR fallan, encontrar la instancia con el mayor gtid para reiniciar el clúster como nodo primario
Recuperación de Errores en el Clúster
Recuperación de clúster MGR tras fallo asíncrono
Obtener la unión, seleccionar RECEIVED_TRANSACTION_SET de performance_schema.replication_connection_status + mostrar variables como 'gtid_executed', y luego seleccionar el maestro con el mayor gtid como primario.
Instalar
ansible-galaxy install daixijun.mysql
Licencia
mit
Descargas
238
Propietario