cdelgehier.XtraDB-Cluster

État de construction

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 :

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

À propos du projet

Install and configure a Cluster Mysql

Installer
ansible-galaxy install cdelgehier.XtraDB-Cluster
Licence
other
Téléchargements
544
Propriétaire