enix.postgresql_replication

enix.postgresql_replication

Eine Rolle zum Bereitstellen und Konfigurieren eines PostgreSQL Replikationsclusters auf Unix-Host-Systemen mit Ansible.

Anforderungen

Unterstützte Zielsysteme:

  • Debian 8 "Jessie"
  • Debian 9 "Stretch"

Rollenvariablen

Diese Rolle kommt mit fast allen verfügbaren Standardeinstellungen. Du kannst jede einzelne in deinen Host-/Gruppenvariablen, in deinem Inventar oder in deinem Play überschreiben. Siehe die kommentierten Standardwerte in defaults/main.yml für Hilfe zur Konfiguration. Alle bereitgestellten Variablen beginnen mit postgresql_replication__.

Diese Rolle funktioniert etwas anders als mehrere andere, indem wir Ansible-Gruppen verwenden, um die verschiedenen Cluster-Hosts unabhängig zu machen. Es gibt 3 verschiedene Gruppen, die du in deinem Inventar definieren musst. Damit dies mit verschiedenen Clustern im gleichen Inventar verwendbar ist, sind sie konfigurierbar.

  • postgresql_replication__group - die Hauptgruppe der Hosts für diesen Cluster, Standard: postgresql
  • postgresql_replication__group_master - die Mastergruppe, die nur ein Host enthalten darf, Standard: postgresql_master
  • postgresql_replication__group_replicas - die Gruppe mit den Replica-Hosts, Standard: postgresql_replicas

Dein Inventar muss letztendlich diese Form haben (Beispiel im YAML-Format):

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 - der Benutzername zur Authentifizierung der Replikationsknoten. Standard: replicate.
  • postgresql_replication__password - das Passwort für den Benutzer postgresql_replication__user. Es ist wichtig, den Standardwert in Produktionsumgebungen zu ändern. Standard: replicate.
  • postgresql_replication__waldir - Verzeichnis, das zum Speichern der WAL-Datei verwendet wird, die vom Master-Knoten an die Replikationsknoten gesendet wird.

Konfiguration der sendenden Server. Siehe (https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER) für Details zu den richtigen Werten für deine Einrichtung.

  • postgresql_replication__walsenders - Anzahl der aktivierten WAL-Sender-Prozesse. Standard: 3.

  • postgresql_replication__walsegments - Anzahl der zu behaltenden WAL-Segmente (jeweils 16 MB). Standard: 64.

  • postgresql_replication__trigger_file - Datei, die verwendet wird, um die Master-Operation auf einem Slave-Knoten auszulösen. Standard: /tmp/MasterNow

  • postgresql_replication__bootstrap - Sehr wichtig. Wenn diese Variable auf "yesiwant" gesetzt ist, werden alle Daten auf den in postgresql_replication__group_replicas definierten Hosts gelöscht und es wird ein frisches pg_basebackup vom Master erstellt. Achte darauf, dass du, wenn du dies aktivierst und die Hosts in den Gruppen nicht richtig einrichtest, deine Daten vollständig löschen kannst.

Abhängigkeiten

Verwendung

Verwende Ansible Galaxy requirements.yml:

- src: enix.postgresql_replication

Und füge es zu den Rollen deines Plays hinzu:

- 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"}

Du kannst die Rolle auch als Playbook verwenden. Du wirst gefragt, welche Hosts bereitgestellt werden sollen, und du kannst das Play weiter konfigurieren, indem du --extra-vars verwendest.

$ ansible-playbook -i inventory --extra-vars='{...}' main.yml

Noch zu erledigen

  • Echtzeit-GitLab/Travis CI hinzufügen
  • Tests mit Molecule hinzufügen

Änderungsprotokoll

1.1.0

Gruppennamen auf postgresql_master und postgresql_replicas aktualisiert. Entspricht den Anforderungen an Gruppennamen in Ansible 2.8+.

1.0.0

Erste Version.

Lizenz

GPLv2

Autoreninformationen

Laurent CORBES laurent.corbes@enix.fr - http://www.enix.io

Über das Projekt

Ansible role to deploy postgresql software with replication

Installieren
ansible-galaxy install enix.postgresql_replication
GitHub Repository
Lizenz
Unknown
Downloads
16.1k
Besitzer
Enix