1
0
mirror of https://github.com/toast-ts/Daggerbot-TS.git synced 2024-12-27 04:15:38 -05:00

Setup a master/slave replication in Postgres

This commit is contained in:
toast-ts 2024-01-27 19:21:22 +11:00
parent cdd65f1969
commit 274eab725f
6 changed files with 64 additions and 5 deletions

View File

@ -6,13 +6,15 @@ services:
ports: ports:
- 6379:6379/tcp - 6379:6379/tcp
db: db:
container_name: postgres-db container_name: postgres-master
image: postgres:16.1-alpine3.19 image: postgres:16.1-alpine3.19
restart: unless-stopped restart: unless-stopped
ports: ports:
- 5432:5432/tcp - 5432:5432/tcp
volumes: volumes:
- /var/lib/docker/volumes/daggerbot-db:/var/lib/postgresql/data:rw - /var/lib/docker/volumes/daggerbot-db:/var/lib/postgresql/data:rw
- ./postgres-replica-stuff/configs/postgres-hba.conf:/var/lib/postgresql/data/pg_hba.conf:rw
- ./postgres-replica-stuff/configs/postgres.conf:/var/lib/postgresql/data/postgresql.conf:rw
environment: environment:
POSTGRES_USER: ${POSTGRES_USER} POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

View File

@ -0,0 +1,11 @@
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication replicator 0.0.0.0/0 trust
host all all all scram-sha-256

View File

@ -0,0 +1,23 @@
listen_addresses = '*'
max_connections = 128
shared_buffers = 256MB
effective_cache_size = 4GB
maintenance_work_mem = 128MB
work_mem = 8MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 2.5
effective_io_concurrency = 1
min_wal_size = 64MB
max_wal_size = 2GB
max_worker_processes = 6
max_parallel_workers_per_gather = 4
# Standby replication setup
wal_level = replica
max_wal_senders = 12
max_replication_slots = 12
hot_standby = on
hot_standby_feedback = on

View File

@ -0,0 +1,15 @@
# This is for the Slave node, Master node is in the root directory of the same file.
services:
db-slave:
container_name: postgres-slave
image: postgres:16.1-alpine3.19
restart: unless-stopped
ports:
- 5433:5432/tcp
volumes:
- /var/lib/docker/volumes/daggerbot-db-slave:/var/lib/postgresql/data:rw
- ./configs/postgres-hba.conf:/var/lib/postgresql/data/pg_hba.conf:rw
- ./configs/postgres.conf:/var/lib/postgresql/data/postgresql.conf:rw
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}

View File

@ -0,0 +1,8 @@
-- This is for the slave.
CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD '<password_here>';
-- This is for the master.
SELECT * FROM pg_create_physical_replication_slot('replication_slot_slave');
SELECT * FROM pg_replication_slots;
-- https://medium.com/swlh/postgresql-replication-with-docker-c6a904becf77

View File

@ -12,11 +12,11 @@
"target": "ES2022", "target": "ES2022",
"module": "ESNext", "module": "ESNext",
"baseUrl": "./", "baseUrl": "./",
"rootDir": "src/", "rootDir": "src",
"outDir": "dist/", "outDir": "dist",
"moduleResolution": "bundler", "moduleResolution": "bundler",
"typeRoots": [ "./src/interfaces.d.ts" ] "typeRoots": [ "./src/interfaces.d.ts" ]
}, },
"include": [ "src/" ], "include": [ "src" ],
"exclude": [ ".yarn/cache", ".yarn/unplugged", ".git", "src/errorBlocklist.json", "src/config.json", "src/DB-Beta.config.json" ] "exclude": [ ".yarn/cache", ".yarn/unplugged", ".git", "src/*.json", "postgres-replica-stuff" ]
} }