Merge pull request #34 from matter-labs/add-more-replication
Some checks failed
Release / Release (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Ansible lint (push) Has been cancelled

feat: Configure replication from postgres collection
This commit is contained in:
Aleksandr Stepanov
2024-11-20 18:04:24 +01:00
committed by GitHub
6 changed files with 54 additions and 2 deletions

View File

@ -59,6 +59,9 @@ postgres_arguments:
enable_postgres_replication: false enable_postgres_replication: false
# IP address of the interface replication # IP address of the interface replication
postgres_replications_arguments: [] postgres_replications_arguments: []
postgres_replica_user_name: ""
postgres_replica_user_password: ""
postgres_replica_auth_method: "scram-sha-256"
postgres_replication_bind_address: "" postgres_replication_bind_address: ""
postgres_replica_address: "" postgres_replica_address: ""

View File

@ -10,3 +10,6 @@ roles:
collections: collections:
- name: community.general - name: community.general
version: 8.4.0 version: 8.4.0
# Collection for the replication only.
- name: community.postgresql
version: 3.7.0

View File

@ -9,3 +9,7 @@
- name: Prepare configs - name: Prepare configs
ansible.builtin.include_tasks: provision.yml ansible.builtin.include_tasks: provision.yml
- name: Configure replication on main instance
ansible.builtin.include_tasks: replication.yml
when: enable_postgres_replication

View File

@ -46,6 +46,8 @@
- postgres_replication_bind_address - postgres_replication_bind_address
- postgres_replica_address - postgres_replica_address
- postgres_replications_arguments - postgres_replications_arguments
- postgres_replica_user_name
- postgres_replica_user_password
- name: Check required en vars empty - name: Check required en vars empty
ansible.builtin.fail: ansible.builtin.fail:

42
tasks/replication.yml Normal file
View File

@ -0,0 +1,42 @@
---
- name: Install libpq-dev packages
ansible.builtin.apt:
update_cache: true
name: libpq-dev
- name: Install psycopg2 python package
ansible.builtin.pip:
name: psycopg2
- name: Grant user replication access for replication.
community.postgresql.postgresql_pg_hba:
dest: "{{ storage_directory }}/postgres/pg_hba.conf"
contype: host
users: "{{ postgres_replica_user_name }}"
source: "{{ postgres_replica_address }}/32"
databases: replication
method: "{{ postgres_replica_auth_method }}"
- name: Create postgres replication user
community.postgresql.postgresql_user:
login_host: "{{ postgres_replication_bind_address }}"
login_user: "{{ database_username }}"
login_password: "{{ database_password }}"
name: "{{ postgres_replica_user_name }}"
password: "{{ postgres_replica_user_password }}"
role_attr_flags: "REPLICATION"
- name: Create replication slot if doesn't exist
community.postgresql.postgresql_slot:
login_host: "{{ postgres_replication_bind_address }}"
login_user: "{{ database_username }}"
login_password: "{{ database_password }}"
slot_name: replica
- name: Reload postgres configuration
community.postgresql.postgresql_query:
login_host: "{{ postgres_replication_bind_address }}"
login_user: "{{ database_username }}"
login_password: "{{ database_password }}"
query: "SELECT pg_reload_conf()"

View File

@ -44,8 +44,6 @@ services:
env_file: env_file:
- postgres.env - postgres.env
{% if enable_postgres_replication %} {% if enable_postgres_replication %}
environment:
POSTGRES_HOST_AUTH_METHOD: "host replication replicator {{ postgres_replica_address }}/32 md5"
ports: ports:
- "{{ postgres_replication_bind_address }}:5432:5432" - "{{ postgres_replication_bind_address }}:5432:5432"
{% endif %} {% endif %}