enix.postgresql_replication

enix.postgresql_replication

Un rol para implementar y configurar un clúster de replicación de postgresql en hosts unix utilizando Ansible.

Requisitos

Objetivos soportados:

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

Variables del Rol

Este rol viene precargado con casi todos los valores predeterminados disponibles. Puedes sobrescribir cada uno en las variables de tus hosts/grupos, en tu inventario o en tu juego. Consulta los valores predeterminados anotados en defaults/main.yml para obtener ayuda con la configuración. Todas las variables proporcionadas comienzan con postgresql_replication__.

Este rol funciona de manera diferente a varios otros. Para hacer que los roles de distintos hosts del clúster sean independientes, usamos grupos de ansible. Hay 3 grupos diferentes que debes definir en tu inventario para que sea usable con diferentes clústeres en el mismo inventario; son configurables.

  • postgresql_replication__group - el grupo principal de hosts para este clúster, por defecto: postgresql
  • postgresql_replication__group_master - el grupo maestro que debe incluir solo un host, por defecto: postgresql_master
  • postgresql_replication__group_replicas - el grupo que incluye los hosts réplicas, por defecto: postgresql_replicas

Tu inventario debe tener esta forma final (ejemplo en formato 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 - el nombre de usuario para la autenticación de nodos de replicación. por defecto: replicate.
  • postgresql_replication__password - la contraseña del usuario de replicación. Es importante cambiar el valor predeterminado en clústeres de producción. por defecto: replicate.
  • postgresql_replication__waldir - Directorio utilizado para almacenar archivos WAL enviados desde el nodo maestro a los nodos de replicación.

Configuración de servidores de envío. Consulta (https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER) para obtener detalles sobre los valores correctos para tu configuración.

  • postgresql_replication__walsenders - Número de procesos wal sender a habilitar. por defecto: 3.

  • postgresql_replication__walsegments - Número de segmentos wal a mantener (16MB cada uno). por defecto: 64.

  • postgresql_replication__trigger_file - Archivo utilizado para activar la operación maestro en un nodo esclavo. por defecto: /tmp/MasterNow.

  • postgresql_replication__bootstrap - Muy importante. cuando esta variable se establece en "yesiwant", la implementación eliminará todos los datos en los hosts definidos en postgresql_replication__group_replicas y procederá con un pg_basebackup fresco desde el maestro. Ten cuidado, ya que si habilitas esto y no configuras correctamente los hosts en los grupos, puedes destruir completamente tus datos.

Dependencias

Uso

Usa el archivo requirements.yml de Ansible galaxy

- src: enix.postgresql_replication

Y agrégalo a los roles de tu juego:

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

También puedes usar el rol como un playbook. Se te pedirá que elijas qué hosts provisionales y podrás configurar aún más el juego usando --extra-vars.

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

Próximamente

  • Agregar integración continua real con gitlab / travis
  • Agregar pruebas usando molecule

Registro de Cambios

1.1.0

Actualizar nombres de grupos a postgresql_master y postgresql_replicas. Cumplir con los requisitos de nombres de grupos de ansible 2.8+.

1.0.0

Versión inicial.

Licencia

GPLv2

Información del Autor

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

Acerca del proyecto

Ansible role to deploy postgresql software with replication

Instalar
ansible-galaxy install enix.postgresql_replication
Licencia
Unknown
Descargas
16.1k
Propietario
Enix