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'utilisateur postgresql_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 dans postgresql_replication__group_replicas et procédera à une nouvelle pg_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

À propos du projet

Ansible role to deploy postgresql software with replication

Installer
ansible-galaxy install enix.postgresql_replication
Licence
Unknown
Téléchargements
16.1k
Propriétaire
Enix