cdelgehier.XtraDB-Cluster
Rôle Ansible ansible-role-XtraDB-Cluster
Un rôle Ansible pour configurer un cluster Percona XtraDB. Plus précisément, les responsabilités de ce rôle sont de :
- installer des paquets
- sécuriser les connexions
- initialiser le cluster
Exigences
Pas d'exigences spécifiques.
Variables du rôle
BASES
Variable | Par défaut | Commentaires (type) |
---|---|---|
xtradb_bind_address |
- | L'IP d'écoute |
xtradb_bind_interface |
eth0 |
L'interface utilisée par le cluster |
xtradb_cluster_name |
foo |
Un nom pour le cluster |
xtradb_configured |
xtradb_datadir /configured |
Un cookie pour l'idempotence |
xtradb_datadir |
/var/lib/mysql |
Répertoire des données |
xtradb_master_node |
groups[xtradb_nodes_group][0] |
Le nœud choisi comme maître |
xtradb_mysql_user |
mysql |
L'utilisateur pour exécuter Galera |
xtradb_nodes_group |
xtradb-cluster-nodes |
Groupe de nœuds où le cluster sera installé |
xtradb_root_password |
root |
Mot de passe pour l'utilisateur root |
xtradb_root_user |
root |
L'utilisateur root |
xtradb_secured |
xtradb_datadir /secured |
Un cookie pour l'idempotence |
xtradb_service |
mysql |
Nom du service Linux |
xtradb_sst_password |
sstpassword |
Mot de passe pour l'utilisateur xtradb_sst_user |
xtradb_sst_user |
sstuser |
Utilisateur utilisé pour le transfert d'instantanés d'état |
xtradb_swappiness |
0 |
Valeur de "Swappiness". La valeur par défaut est 60. Une valeur de 0 signifie qu'on évite l'échange des processus. |
xtradb_databases |
[] | Liste des noms des bases de données à ajouter |
xtradb_users |
[] | Liste de dictionnaires spécifiant les utilisateurs à ajouter. Voir ci-dessous pour les détails. |
xtradb_version |
57 |
Version du paquet XtraDB |
Partie MySQL
Pour plus d'informations sur les valeurs, consultez la documentation des variables système du serveur MariaDB.
Variable | Par défaut | Commentaires (type) |
---|---|---|
xtradb_binlog_format |
ROW |
Le format de journalisation binaire |
xtradb_character_set_server |
utf |
Le jeu de caractères |
xtradb_collation_server |
utf8_general_ci |
Le tri |
xtradb_default_storage_engine |
InnoDB |
Définir le moteur de stockage |
xtradb_innodb_autoinc_lock_mode |
2 |
Il existe trois paramètres possibles pour le paramètre de configuration innodb_autoinc_lock_mode. Les valeurs sont 0, 1 ou 2, pour les modes de verrouillage « traditionnel », « consécutif » ou « entrelacé », respectivement. |
xtradb_innodb_buffer_pool_instances |
|
Pour activer plusieurs instances de pool de tampons, définissez l'option de configuration innodb_buffer_pool_instances à une valeur supérieure à 1 (8 est la valeur par défaut) jusqu'à 64 (maximum). Cette option n'a d'effet que si vous définissez innodb_buffer_pool_size à une taille de 1 Go ou plus. La taille totale que vous spécifiez est divisée entre tous les pools de tampons. |
xtradb_innodb_buffer_pool_size |
|
Une bonne valeur est de 70 % à 80 % de la mémoire disponible. |
xtradb_innodb_file_format |
|
|
xtradb_innodb_file_format_check |
|
|
xtradb_innodb_file_per_table |
|
|
xtradb_innodb_flush_log_at_trx_commit |
|
Lorsque innodb_flush_log_at_trx_commit est défini sur 1, le tampon de journal est effacé à chaque validation de transaction dans le fichier journal sur disque, ce qui garantit une intégrité maximale des données mais affecte également les performances. Le définir à 2 signifie que le tampon de journal est vidé dans le cache de fichiers de l'OS à chaque validation de transaction. L'implication de 2 est optimale et améliore les performances si vous ne vous souciez pas de l'ACID et pouvez perdre des transactions lors des dernières secondes en cas de plantage du système d'exploitation. |
xtradb_innodb_log_buffer_size |
|
Innodb écrit les données modifiées dans son tampon de journal, qui est conservé en mémoire et permet d'économiser des I/O disque pour de grandes transactions, car il n'est pas nécessaire d'écrire le journal des modifications sur disque avant la validation de la transaction. 4 Mo – 8 Mo est un bon point de départ sauf si vous écrivez beaucoup de gros blobs. |
xtradb_innodb_log_file_size |
|
La valeur par défaut a été modifiée dans MySQL 5.6 à 50 Mo au lieu de 5 Mo (ancien défaut), mais elle est toujours trop petite pour de nombreuses charges de travail. |
xtradb_innodb_file_per_table |
on |
innodb_file_per_table est activé par défaut depuis MySQL 5.6. Cela est généralement recommandé car cela évite d'avoir un grand espace de tables partagé et permet de récupérer de l'espace lorsque vous supprimez ou tronquez une table. Un espace de table séparé bénéficie également au schéma de sauvegarde partielle Xtrabackup. |
xtradb_innodb_strict_mode |
on |
|
xtradb_join_buffer_size |
|
|
xtradb_log_warnings |
|
|
xtradb_long_query_time |
|
|
xtradb_max_allowed_packet |
|
|
xtradb_max_connections |
4096 |
|
xtradb_max_heap_table_size |
|
|
xtradb_max_user_connections |
|
|
xtradb_pxc_strict_mode |
ENFORCING |
Le mode strict PXC est conçu pour éviter l'utilisation de fonctionnalités expérimentales et non prises en charge dans Percona XtraDB Cluster. |
xtradb_query_cache_size |
|
|
xtradb_read_buffer_size |
|
|
xtradb_read_rnd_buffer_size |
|
|
xtradb_skip_name_resolve |
1 |
Utilisez uniquement des adresses IP. Définir à 0 pour résoudre les noms d'hôtes. |
xtradb_slow_query_log |
0 |
Définir à 1 pour activer le journal des requêtes lentes. |
xtradb_socket |
|
|
xtradb_sort_buffer_size |
|
|
xtradb_table_definition_cache |
|
|
xtradb_table_open_cache |
|
|
xtradb_table_open_cache_instances |
|
|
xtradb_tmp_table_size |
|
Ajout de bases de données
Les bases de données sont définies par un dictionnaire contenant les champs name:
(requis) et init_script:
(optionnel). Le script d'initialisation est un fichier SQL qui est exécuté lors de la création de la base de données pour initialiser des tables et la peupler de valeurs.
xtradb_databases:
- name: keystone
- name: mydb
init_script: files/init_mydb.sql
Ajout d'utilisateurs
Les utilisateurs sont définis par un dictionnaire contenant les champs name:
, password:
, priv:
et, éventuellement, host:
. Le mot de passe est en texte clair et priv:
spécifie les privilèges pour cet utilisateur comme décrit dans la documentation Ansible.
Un exemple :
xtradb_users:
- name: keystone
password: KEYSTONE_DBPASS
priv: 'keystone.*:SUPER'
- name: cdelgehier
password: yolo
priv: 'mydb.*:ALL'
host: '192.168.1.%'
Dépendances
Pas de dépendances.
Exemple de Playbook
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_bind_address: "{{ ansible_default_ipv4.address }}"
xtradb_wsrep_cluster_address: "gcomm://{{ groups['db'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | join(',') }}"
xtradb_master_node: "{{ hostvars[ groups['db'][0] ].ansible_default_ipv4.address }}"
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
xtradb_databases:
- name: keystone
xtradb_users:
- name: keystone
password: PASSWD
priv: 'keystone.*:GRANT,ALL'
xtradb_innodb_buffer_pool_instances: 8
xtradb_innodb_buffer_pool_size: "384M"
xtradb_innodb_file_format: "Barracuda"
xtradb_innodb_file_format_check: "1"
xtradb_innodb_file_per_table: "on"
xtradb_innodb_flush_log_at_trx_commit: "1"
xtradb_innodb_log_buffer_size: "16M"
xtradb_innodb_log_file_size: "50M"
xtradb_innodb_strict_mode: "on"
xtradb_join_buffer_size: "128K"
xtradb_log_warnings: "1"
xtradb_long_query_time: "10"
xtradb_max_allowed_packet: "16M"
xtradb_max_connections: "505"
xtradb_max_heap_table_size: "16M"
xtradb_max_user_connections: "500"
xtradb_query_cache_size: "0" # désactiver
xtradb_read_buffer_size: "128K"
xtradb_read_rnd_buffer_size: "256k"
xtradb_skip_name_resolve: "1"
xtradb_slow_query_log: "1"
xtradb_sort_buffer_size: "2M"
xtradb_table_definition_cache: "1400"
xtradb_table_open_cache: "2000"
xtradb_table_open_cache_instances: "8"
xtradb_tmp_table_size: "16M"
[db]
node1 ansible_host=192.168.1.173
node2 ansible_host=192.168.1.156
node3 ansible_host=192.168.1.154
Tests
Il existe deux types d'environnements de test disponibles. L'un est alimenté par Vagrant, l'autre par Docker. Ce dernier est adapté pour l'exécution de tests automatisés sur Travis-CI. Le code de test est conservé dans des branches orphelines séparées. Pour des détails sur la façon de configurer ces environnements de test sur votre propre machine, consultez les fichiers README dans les branches respectives :
- Docker : docker-tests
Suppression
Pour supprimer toutes les traces et commencer une nouvelle installation
ansible db -m shell -a 'rm -rf /var/lib/mysql /var/log/mysqld.log /etc/percona-xtradb-cluster.conf.d ; yum remove Percona* -y'
Contribution
Les problèmes, les demandes de fonctionnalités et les idées sont appréciés et peuvent être publiés dans la section Problèmes.
Les demandes de tirage sont également très bienvenues. La meilleure façon de soumettre un PR est d'abord de créer un fork de ce projet GitHub, puis de créer une branche de sujet pour le changement suggéré et de pousser cette branche vers votre propre fork. GitHub peut alors facilement créer un PR basé sur cette branche.
Licence
Licence BSD à 2 clauses, voir LICENSE.md
Contributeurs
- Cedric DELGEHIER (mainteneur)
ansible-galaxy install cdelgehier.XtraDB-Cluster