enix.postgresql_replication
enix.postgresql_replication
A role for deploying and configuring postgresql replication cluster on unix hosts using Ansible.
Requirements
Supported targets:
- Debian 8 "Jessie"
- Debian 9 "Stretch"
Role Variables
This roles comes preloaded with almost every available default. You can override each one in your hosts/group vars, in your inventory, or in your play. See the annotated defaults in defaults/main.yml for help in configuration. All provided variables start with postgresql_replication__.
This role work in a different way than several others in a way that in order to make different cluster hosts roles independent we use ansible groups. There is so 3 different groups to define in your inventory. to make this usable with different clusters in the same inventory they are configurable.
postgresql_replication__group- the main group of hosts for this cluster, default:postgresqlpostgresql_replication__group_master- the master group that must include only one host, default:postgresql_masterpostgresql_replication__group_replicas- the group including the replicas hosts, default:postgresql_replicasYour inventory must have in final this form (yaml format exemple):
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- the username to use for authentification of replication nodes. default :replicate.postgresql_replication__password- the postgresql_replication__user password. It is important to change default on production clusters. default:replicate.postgresql_replication__waldir- Directory used to store WAL file sent from the master node to the replication nodes.
Sending servers configuration. See (https://www.postgresql.org/docs/11/runtime-config-replication.html#RUNTIME-CONFIG-REPLICATION-SENDER) for details of correct values for your setup.
postgresql_replication__walsenders- Number of wal sender processes to enable. default :3.postgresql_replication__walsegments- Number of wal segments to keep (16MB each). default:64.postgresql_replication__trigger_file- File used to trigger master operation on a slave node. default:/tmp/MasterNowpostgresql_replication__bootstrap- Very important. when this variable is set to"yesiwant"the deployement will remove all datas on hosts defined inpostgresql_replication__group_replicasand proceed with a freshpg_basebackupfrom the master. Take care as if you enable this and do not properly setup hosts in groups you can completely destroy you datas.
Dependencies
Usage
Use Ansible galaxy requirements.yml
- src: enix.postgresql_replication
And add it to your play's roles:
- 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"}
You can also use the role as a playbook. You will be asked which hosts to provision, and you can further configure the play by using --extra-vars.
$ ansible-playbook -i inventory --extra-vars='{...}' main.yml
Still to do
- Add real gitlab / travis CI
- Add tests using molecule
Changelog
1.1.0
Update group names to postgresql_master and postgresql_replicas. Comply with ansible 2.8+ group names requirements
1.0.0
Initial version.
License
GPLv2
Author Information
Laurent CORBES laurent.corbes@enix.fr - http://www.enix.io
Ansible role to deploy postgresql software with replication
ansible-galaxy install enix.postgresql_replication