Ansible role for deploying High Availability PostgreSQL
Go to file
Alexis Pentori e48e129d8b
metrics: add postgres-exporter and pg-agent
* postgres-exporter for basic database metrics
  - pg-agent: optional, to identify query performence issues

Signed-off-by: Alexis Pentori <alexis@status.im>
2024-10-11 12:29:27 +02:00
defaults metrics: add postgres-exporter and pg-agent 2024-10-11 12:29:27 +02:00
meta meta: add missing infra roles to dependencies 2023-11-23 12:50:00 +01:00
tasks metrics: add postgres-exporter and pg-agent 2024-10-11 12:29:27 +02:00
templates metrics: add postgres-exporter and pg-agent 2024-10-11 12:29:27 +02:00
README.md metrics: add postgres-exporter and pg-agent 2024-10-11 12:29:27 +02:00

README.md

Description

This role configures a High-Availability PostgreSQL Database with replication from master to slaves.

Configuration

To run just one instance without actual High-Availability use:

postgres_ha_db_name: 'example-db'
postgres_ha_admin_user: 'admin'
postgres_ha_admin_pass: 'super-secret-password'

For replicaton other settings

postgres_ha_is_master: '{{ hostname == "node-01.example.org" }}'
postgres_ha_replica_host: 'node-01.example.org'
postgres_ha_replica_port: 5043
postgres_ha_replica_allowed_addresses: ['11.12.13.15']

You can create additional databases using:

# Databases to init
postgres_ha_databases:
  - name: my-db
    user: my-user
    pass: my-pass
    script: 'CREATE SCHEMA IF NOT EXIST example;' 

  - name: my-other-db
    user: my-other-user
    pass: my-other-pass

The user field is optional. DB name is used by default. The field script is optional and allow to add commands to run when creating the database.

Additional users can be defined using:

postgres_ha_users:
  - name: 'devops'
    pass: 'hunter2'
    db:   'my-db'
    priv: 'ALL PRIVILEGES'

  - name: 'security'
    pass: 'hunter3'
    db:   'my-db'
    priv: 'pg_read_all_data'

Backup settings can be adjusted using:

postgres_ha_backup: false
postgres_ha_backup_frequency: 'weekly'
postgres_ha_backup_timeout: 1200

And database settings can be modified using the ALTER SYSTEM configuration:

postgres_ha_alter_system_settings:
  checkpoint_timeout: '5min'
  max_wal_size: '1GB'
  min_wal_size: '80MB'

Container share memory can be configured with:

postgres_share_memory: '1g'

Metrics exporter for query performance can be activated with:

postgres_ha_perf_metrics_exporter_disabled: false

Management

The service is managed using Docker Compose:

admin@node-01.example.org:/docker/postgres-ha % docker-compose ps
   Name                 Command                 State                    Ports
--------------------------------------------------------------------------------------------
postgres-ha   docker-entrypoint.sh -p 5433   Up (healthy)   5432/tcp, 0.0.0.0:5433->5433/tcp
pg-metrics-exporter   /bin/postgres_exporter         Up             0.0.0.0:9187->9187/tcp