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 enpostgresql_replication__group_replicas
y procederá con unpg_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
Ansible role to deploy postgresql software with replication
ansible-galaxy install enix.postgresql_replication