You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jeff Moe c8fba3a2c2
repmgr setup notes
5 years ago
..
README.md repmgr setup notes 5 years ago

README.md

repmgr Postgres cluster

https://repmgr.org/docs/repmgr.html

Postgres 11 with streaming replication and backups.

Servers

pg-oca --- Master Postgres Server pg-oca-rep1 --- Standby Postgres Server pg-oca-hdd --- Standby Postgres Server pg-oca-barman --- Postgres Backup Server pg-oca-witness-1 --- Postgres Witness Server

Each server has two ethernet interfaces. One for the VPN for ssh, and the second for database backend communication.

Install

Add Postgres community repository to each server.

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list

Install Postgres 11 client and repmgr on all servers.

apt update apt install postgresql-client-11 postgresql-11-repmgr

Install Postgres 11 server on pg-oca and install repmgr module. apt install postgresql-11 postgresql-11-repmgr

System Configuration

Configure firewall.

#=============== Postgres Cluster =================== -A INPUT --dest 10.104.11.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT --dest 10.53.1.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -p tcp --dest 10.53.1.0/24 --dport 61 -j ACCEPT -A INPUT -p tcp --dest 10.53.1.0/24 --dport 5432 -j ACCEPT #=============== End of Postgres Cluster =============

Set up /etc/hosts on all nodes: cat >> /etc/hosts << EOF 10.104.11.44 oca 10.104.11.116 pg-oca 10.104.11.131 pg-oca-rep1 10.104.11.132 pg-oca-hdd 10.104.11.133 pg-oca-barman 10.104.11.134 pg-oca-witness-1

10.53.1.44 db-oca 10.53.1.116 db-pg-oca 10.53.1.131 db-pg-oca-rep1 10.53.1.132 db-pg-oca-hdd 10.53.1.133 db-pg-oca-barman 10.53.1.134 db-pg-oca-witness-1 EOF

Configure base Postgres 11 server. pg_hba.conf and tuning

On master server pg-oca and pg-oca-rep1

cat > /etc/postgresql/11/main/conf.d/replication.conf << EOF

Enable replication connections; set this figure to at least one more

than the number of standbys which will connect to this server

(note that repmgr will execute pg_basebackup in WAL streaming mode,

which requires two free WAL senders)

max_wal_senders = 10

Ensure WAL files contain enough information to enable read-only queries

on the standby.

PostgreSQL 9.5 and earlier: one of 'hot_standby' or 'logical'

PostgreSQL 9.6 and later: one of 'replica' or 'logical'

('hot_standby' will still be accepted as an alias for 'replica')

See: https://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-WAL-LEVEL

wal_level = 'replica'

Enable read-only queries on a standby

(Note: this will be ignored on a primary but we recommend including

it anyway)

hot_standby = on

Enable WAL file archiving

archive_mode = on

Set archive command to a script or application that will safely store

you WALs in a secure place. /bin/true is an example of a command that

ignores archiving. Use something more sensible.

XXX

archive_command = '/bin/true'

If you have configured "pg_basebackup_options"

in "repmgr.conf" to include the setting "--xlog-method=fetch" (from

PostgreSQL 10 "--wal-method=fetch"), and you have not set

"restore_command" in "repmgr.conf"to fetch WAL files from another

source such as Barman, you'll need to set "wal_keep_segments" to a

high enough value to ensure that all WAL files generated while

the standby is being cloned are retained until the standby starts up.

wal_keep_segments = 5000

EOF

Set up pg_hba.conf on hosts pg-oca and pg-oca-rep1

cat > /etc/postgresql/11/main/pg_hba.conf << EOF

Local

local all all peer local all postgres peer host all all 127.0.0.1/32 md5

Replication

local replication repmgr trust host replication repmgr 127.0.0.1/32 trust host replication repmgr 10.53.1.116/32 trust host replication repmgr 10.53.1.131/32 trust host replication repmgr 10.53.1.132/32 trust host replication repmgr 10.53.1.133/32 trust host replication repmgr 10.53.1.134/32 trust

repmgr

local repmgr repmgr trust host repmgr repmgr 127.0.0.1/32 trust host repmgr repmgr 10.53.1.116/32 trust host repmgr repmgr 10.53.1.131/32 trust host repmgr repmgr 10.53.1.132/32 trust host repmgr repmgr 10.53.1.133/32 trust host repmgr repmgr 10.53.1.134/32 trust

OCA

host all oca 10.53.1.44/32 trust host all postgres 10.53.1.44/32 trust EOF

Set up configuration. Note to change listen_addresses below:

cat > /etc/postgresql/11/main/conf.d/pgconfig.conf << EOF

Memory Configuration

shared_buffers = 8GB effective_cache_size = 24GB work_mem = 128MB maintenance_work_mem = 2GB

Checkpoint Related Configuration

min_wal_size = 1GB max_wal_size = 3GB checkpoint_completion_target = 0.9 wal_buffers = 16MB

Network Related Configuration

XXX Set

#listen_addresses = '10.53.1.130' max_connections = 256

Hard Drive Configuration

random_page_cost = 1.1 effective_io_concurrency = 300

Adjust the minimum time to collect data

log_min_duration_statement = '10s' log_autovacuum_min_duration = 0 EOF

Configure ssh between nodes. Which users?

repmgr Cluster Master Configuration

Set up nodes to communicate.

Node pg-oca is master. Node pg-oca-rep1 does streaming replication of pg-oca. Node pg-oca-hdd does streaming replication of pg-oca-rep1 and stores to hard disk platters instead of NVMe drives. Node pg-oca-barman runs the Postgres barman backup system, and does backups of pg-oca-rep1. Node pg-oca-witness-1 is a Postgres witness server. It isn't needed at present.

Run on pg-oca: sudo su - postgres createuser -s repmgr createdb repmgr -O repmgr

repmgr Cluster Standby Configuration

On the standby, do not create a PostgreSQL instance.

From pg-oca: Check the primary database is reachable from the standby using psql:

psql 'host=db-pg-oca user=repmgr dbname=repmgr connect_timeout=2'

Set up Master repmgr

cat > /etc/repmgr.conf << EOF node_id=1 node_name=pg-oca conninfo='host=db-pg-oca user=repmgr dbname=repmgr connect_timeout=2' data_directory='/var/lib/postgresql/11/main' pg_bindir='/usr/lib/postgresql/11/bin' repmgr_bindir='/usr/lib/postgresql/11/bin' EOF

Register primary server:

sudo su - postgres repmgr -f /etc/repmgr.conf primary register

Clone Standby Server

Log into pg-oca-rep1

cat > /etc/repmgr.conf << EOF node_id=2 node_name=pg-oca-rep1 conninfo='host=db-pg-oca-rep1 user=repmgr dbname=repmgr connect_timeout=2' data_directory='/var/lib/postgresql/11/main' pg_bindir='/usr/lib/postgresql/11/bin' repmgr_bindir='/usr/lib/postgresql/11/bin' EOF

systemctl stop postgresql

sudo su - postgres Test it, dry run repmgr -h db-pg-oca -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --force --dry-run

If good, then run it: repmgr -h db-pg-oca -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --force

Then as root, start server: systemctl start postgresql

As user postgres: sudo su - postgres repmgr standby register

Check it out: repmgr cluster show

Create Database

Log into main server pg-oca. sudo su - postgres createuser --createdb oca createdb --owner=oca oca