daixijun.mysql
mysql
Pour déployer rapidement un cluster MySQL
Supporte les modes de cluster suivants :
- Réplication maître-esclave basée sur GTID
- Semi-Sync activé par défaut
- Réplication maître-esclave basée sur MHA
- Mode maître unique MGR (par défaut)
- Mode maître multiple MGR
- Réplication ReplicaSet
Versions de MySQL prises en charge :
- MySQL Community Server MySQL officiel
- GreatSQL GreatSQL
- Percona Percona Server for MySQL
Exigences de l'environnement
- Centos 7+
- Ansible 2.9+
- MySQL 8.0+
Variables
Nom de la variable | Type | Valeur par défaut | Description |
---|---|---|---|
mysql_version | string | 8.0.23 | Version de MySQL |
mysql_upgrade | bool | false | Indique si une mise à niveau est nécessaire |
mysql_download_url | string | Adresse de téléchargement pour le paquet compressé sans installation | |
mysql_inventory_group | string | mysql | Nom du groupe dans l'inventaire Ansible, par défaut mysql |
mysql_basedir | string | /usr/local/mysql | Répertoire d'installation |
mysql_datadir | string | /data/mysql | Répertoire de stockage des fichiers de données |
mysql_logdir | string | /var/log/mysqld | Répertoire de stockage des logs |
mysql_pidfile | string | /var/run/mysqld/mysqld.pid | Emplacement du fichier PID |
mysql_socket | string | /var/run/mysqld/mysqld.sock | Emplacement du fichier Socket |
mysql_port | int | 3306 | Port d'écoute |
mysql_bind_address | string | 0.0.0.0 | Adresse d'écoute |
mysql_interface | string | "" | Interface à utiliser, par défaut la première carte sauf lo |
mysql_default_time_zone | string | +8:00 | Fuseau horaire à définir |
mysql_character_set_server | string | utf8mb4 | Jeu de caractères par défaut |
mysql_collation_server | string | utf8mb4_general_ci | Ordre des caractères par défaut |
mysql_max_connections | int | 1005 | Nombre maximum de connexions |
mysql_max_user_connections | int | 1000 | Nombre maximum de connexions par utilisateur, doit être inférieur à mysql_max_connections |
mysql_interactive_timeout | int | 28800 | Nombre de secondes à attendre avant la fermeture des connexions interactives |
mysql_wait_timeout | int | 28800 | Nombre de secondes à attendre avant la fermeture des connexions non interactives |
mysql_max_connect_errors | int | 200 | Nombre maximum d'erreurs de connexion |
mysql_root_password | string | "" | Mot de passe pour le compte root |
mysql_cluster_type | string | mgr | Type de cluster (par défaut mgr), options : mgr (Mysql Group Replication) / ms (Master-Slave) |
mysql_cluster_name | string | default | Nom du cluster, utilisé pour InnodbCluster/ReplicaSet |
mysql_mha_enabled | bool | false | Indique si la haute disponibilité basée sur MHA est activée |
mysql_mha_config_dir | string | /etc/mha | Répertoire des fichiers de configuration MHA |
mysql_mha_manager_workdir | string | /var/log/mha | Répertoire de travail MHA pour l'enregistrement des logs et des informations d'état |
mysql_mha_user | string | mha | Utilisateur utilisé pour gérer MySQL, doit avoir les droits ALL |
mysql_mha_password | string | "" | Mot de passe de gestion MySQL |
mysql_mha_repl_user | string | repl | Compte pour la réplication maître-esclave MySQL |
mysql_mha_repl_password | string | "" | Mot de passe pour la réplication maître-esclave MySQL |
mysql_mha_ssh_user | string | root | Utilisateur SSH pour la communication entre les nœuds |
mysql_mha_ssh_port | int | 22 | Port SSH pour la communication entre les nœuds |
mysql_mha_ping_interval | int | 2 | Intervalle de vérification de l'état du nœud maître |
mysql_mha_vip | string | "" | VIP à associer au nœud maître |
mysql_mha_wechat_token | string | "" | Clé pour le robot WeChat, utilisé pour envoyer des alertes |
mysql_mha_proxy | string | "" | Proxy utilisé pour le script d'envoi d'alerte (send_report) |
mysql_repl_user | string | repl | Compte pour la réplication maître-esclave / groupe |
mysql_repl_password | string | Mot de passe pour le compte de réplication maître-esclave / groupe | |
mysql_group_replication_name | uuid | "" | Nom du cluster de réplication de groupe, à générer avec SELECT UUID() ou uuidgen |
mysql_group_replication_single_primary_mode | bool | true | Indique si le cluster MGR a un maître unique |
mysql_innodb_cluster_enable | bool | true | Indique si le cluster Innodb est activé |
mysql_innodb_cluster_username | string | ic | Compte pour créer et gérer le cluster Innodb, doit avoir les droits ALL WITH GRANT OPTION |
mysql_innodb_cluster_password | string | "" | Mot de passe de gestion |
mysql_proxysql_config | bool | false | Indique si proxysql est utilisé comme couche de proxy |
mysql_proxysql_monitor_username | string | monitor | Compte pour surveiller l'état de MGR avec proxysql |
mysql_proxysql_monitor_password | string | "" | Mot de passe pour surveiller l'état de MGR avec proxysql |
mysql_databases | array | [] | Bases de données à créer |
mysql_users | array | [] | Utilisateurs à créer |
Dépendances
collections :
Exemple
Installation
ansible-galaxy collection install -r requirements.yml
Utilisation
- hosts: servers
roles:
- { role: mysql, mysql_version: 8.0.20 }
Problèmes connus
- Le module mysql_user présente des problèmes d'idempotence lors de l'octroi de droits
ALL
pour les versions supérieures à MySQL 8.0 Idempotence all grant
À faire
- Support de la réplication semi-synchrone en mode maître-esclave
- Améliorer les tests side-effect sous MHA
- Support des mises à jour de version
- Support de la reconstruction des nœuds
- Dans un cluster MGR, après un arrêt extrême de tous les nœuds, il faut identifier l'instance avec le GTID le plus élevé pour relancer le cluster en tant que nœud primaire
Réparation d'anomalies de cluster
Récupération d'un cluster MGR après un arrêt asynchrone
Effectuer l'union, sélectionner RECEIVED_TRANSACTION_SET
à partir de performance_schema.replication_connection_status
+ afficher les variables comme 'gtid_executed', puis sélectionner le primaire avec le nombre le plus élevé, comme primaire.