enix.postgresql_replication
enix.postgresql_replication
=================
Un rôle pour déployer et configurer un cluster de réplication postgresql sur des hôtes unix en utilisant Ansible.
Exigences
Cibles supportées :
- Debian 8 "Jessie"
- Debian 9 "Stretch"
Variables de rôle
Ce rôle est préchargé avec presque tous les paramètres par défaut disponibles. Vous pouvez remplacer chacun d'eux dans les variables de vos hôtes/groupes, dans votre inventaire ou dans votre play. Consultez les valeurs par défaut annotées dans defaults/main.yml
pour vous aider à la configuration. Toutes les variables fournies commencent par postgresql_replication__
.
Ce rôle fonctionne différemment de plusieurs autres, car pour rendre les rôles des différents hôtes de cluster indépendants, nous utilisons des groupes Ansible. Il y a donc 3 groupes différents à définir dans votre inventaire. Pour les rendre utilisables avec différents clusters dans le même inventaire, ils sont configurables.
postgresql_replication__group
- le groupe principal d'hôtes pour ce cluster, par défaut :postgresql
postgresql_replication__group_master
- le groupe maître qui doit inclure un seul hôte, par défaut :postgresql_master
postgresql_replication__group_replicas
- le groupe incluant les hôtes répliques, par défaut :postgresql_replicas
Votre inventaire doit avoir la forme finale suivante (exemple au format yaml) :
all:
children:
postgresql:
children:
postgresql_master:
hosts:
db-01:
ansible_host: 185.145.251.12
postgresql_replicas:
hosts:
db-02:
ansible_host: 185.145.251.243
postgresql_replication__user
- le nom d'utilisateur à utiliser pour l'authentification des nœuds de réplication, par défaut :replicate
.postgresql_replication__password
- le mot de passe de l'utilisateurpostgresql_replication__user
. Il est important de modifier la valeur par défaut sur les clusters de production. Par défaut :replicate
.postgresql_replication__waldir
- Répertoire utilisé pour stocker le fichier WAL envoyé du nœud maître aux nœuds de réplication.
Configuration des serveurs d'envoi. Voir (https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER) pour des détails sur les valeurs correctes pour votre configuration.
postgresql_replication__walsenders
- Nombre de processus d'envoi WAL à activer, par défaut :3
.postgresql_replication__walsegments
- Nombre de segments WAL à conserver (16 Mo chacun), par défaut :64
.postgresql_replication__trigger_file
- Fichier utilisé pour déclencher l'opération maître sur un nœud esclave, par défaut :/tmp/MasterNow
.postgresql_replication__bootstrap
- Très important. Lorsque cette variable est définie sur"yesiwant"
, le déploiement supprimera toutes les données sur les hôtes définis danspostgresql_replication__group_replicas
et procédera à une nouvellepg_basebackup
depuis le maître. Attention, si vous activez cela et ne configurez pas correctement les hôtes dans les groupes, vous pouvez complètement détruire vos données.
Dépendances
Utilisation
Utilisez le fichier requirements.yml d'Ansible galaxy :
- src: enix.postgresql_replication
Ajoutez-le aux rôles de votre play :
- hosts: postgresql
roles:
- role enix.postgresql_replication:
postgresql__version: 11
postgresql__global_config_options:
- option: listen_addresses
value: '*'
- option: log_min_duration_statement
value: 1000
postgresql__hba_entries:
- {type: local, database: all, user: postgres, auth_method: peer}
- {type: local, database: all, user: all, auth_method: peer}
- {type: host, database: all, user: all, address: "0.0.0.0/0", auth_method: md5}
- {type: hostssl, database: replication, user: "{{ postgresql_replication__user }}", address: "0.0.0.0/0" ,auth_method: md5}
postgresql__users:
- {name: "{{ postgresql_replication__user }}", password: "{{ postgresql_replication__password }}", role_attr_flags: "REPLICATION"}
Vous pouvez également utiliser le rôle comme un playbook. On vous demandera quels hôtes provisionner, et vous pourrez configurer davantage le play en utilisant --extra-vars
.
$ ansible-playbook -i inventory --extra-vars='{...}' main.yml
À faire
- Ajouter une véritable CI gitlab / travis
- Ajouter des tests avec molecule
Journal des modifications
1.1.0
Mise à jour des noms des groupes en postgresql_master et postgresql_replicas. Conforme aux exigences de noms de groupes Ansible 2.8+.
1.0.0
Version initiale.
Licence
GPLv2
Informations sur l'auteur
Laurent CORBES laurent.corbes@enix.fr - http://www.enix.io
Ansible role to deploy postgresql software with replication
ansible-galaxy install enix.postgresql_replication