1
0
mirror of https://github.com/coltoneshaw/CS-Repro-Mattermost.git synced 2025-12-23 18:11:34 +01:00

added initial setup of replicas

This commit is contained in:
coltoneshaw
2024-03-29 17:21:34 -04:00
parent 492130d846
commit 21fdbf5a37
13 changed files with 239 additions and 15 deletions

View File

@@ -1,3 +1,10 @@
#!/bin/bash
echo "include '/files/postgres/primary/primary_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
echo "include '/files/postgres/primary/primary_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
psql -U mmuser -d mattermost -c "create role replicauser with replication password 'replicauser_password' login"
psql -U mmuser -d mattermost -c "select pg_create_physical_replication_slot('replica_2_slot');"
psql -U mmuser -d mattermost -c "select pg_create_physical_replication_slot('replica_1_slot');"
echo "host replication replicauser 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf

View File

@@ -1,9 +1,14 @@
# This value should match the "SqlSettings.MaxConnections" value within your config.json for Mattermost
# This is a suggestion and can be set lower / higher based on the size of your server.
max_connections = 1020
tcp_keepalives_idle = 5
tcp_keepalives_interval = 1
tcp_keepalives_count = 5
# If the instance is lower capacity than r5.xlarge, then set it to a lower number.
# Also tune the "MaxOpenConns" setting under the "SqlSettings" of the Mattermost app accordingly.
# Note that "MaxOpenConns" on Mattermost is per data source name.
max_connections = 1024
# Set it to 1.1, unless the DB is using spinning disks.
random_page_cost = 1.1
# This should be 32MB if using read replicas, or 16MB if using a single PostgreSQL instance.
# If the instance is of a lower capacity than r5.xlarge, then set it to a lower number.
work_mem = 16MB
# Set both of the below settings to 65% of total memory. For a 32 GB instance, it should be 21 GB.
# If on a smaller server, set this to 20% or less total RAM.
@@ -11,15 +16,27 @@ tcp_keepalives_count = 5
shared_buffers = 512MB
effective_cache_size = 512MB
# Set it to 16 MB for readers and 32 MB for writers. If it's a single instance, 16 MB should be sufficient. If the instance is of a lower capacity than r5.xlarge, then set it to a lower number.
work_mem = 16MB
# If you are using pgbouncer, or any similar connection pooling proxy,
# in front of your DB, then apply the keepalive settings to the proxy instead,
# and revert the keepalive settings for the DB back to defaults.
tcp_keepalives_idle = 5
tcp_keepalives_interval = 1
tcp_keepalives_count = 5
# 1GB (reduce this to 512MB if your server has less than 32GB of RAM)
autovacuum_work_mem = 512MB
maintenance_work_mem = 512MB
autovacuum_max_workers = 4
autovacuum_vacuum_cost_limit = 500
#Set it to 1.1 unless the DB is using spinning disks.
random_page_cost = 1.1
## Intentionally disabled here because running in docker this may cause performance problems.
restart_after_crash = on
# If you have more than 32 CPUs on your database server, please set the following options to utilize more CPU for your server:
# max_worker_processes = 12
# max_parallel_workers_per_gather = 4
# max_parallel_workers = 12
# max_parallel_maintenance_workers = 4
log_connections = on
log_disconnections = on
log_replication_commands = on

17
files/postgres/replica/init.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
set -e
echo "include '/files/postgres/replica/replica_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
cp /var/lib/postgresql/data/postgresql.conf /files/postgres/replica/baseconfig.conf
rm -rf /var/lib/postgresql/data/*
export PGPASSWORD='replicauser_password'
pg_basebackup -h cs-repro-postgres -p 5432 -U replicauser -D /var/lib/postgresql/data -Fp -Xs -R
rm -rf /var/lib/postgresql/data/postgresql.conf
cp /files/postgres/replica/baseconfig.conf /var/lib/postgresql/data/postgresql.conf
exec pg_ctl -D /var/lib/postgresql/data start

View File

@@ -0,0 +1,19 @@
#!/bin/bash
set -e
echo "include '/files/postgres/replica/replica_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
echo "include '/files/postgres/replica/replica_1/replica_1_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
cp /var/lib/postgresql/data/postgresql.conf /files/postgres/replica/replica_1/baseconfig.conf
rm -rf /var/lib/postgresql/data/*
export PGPASSWORD='replicauser_password'
pg_basebackup -h cs-repro-postgres -p 5432 -U replicauser -D /var/lib/postgresql/data -Fp -Xs -R
rm -rf /var/lib/postgresql/data/postgresql.conf
cp /files/postgres/replica/replica_1/baseconfig.conf /var/lib/postgresql/data/postgresql.conf
exec pg_ctl -D /var/lib/postgresql/data start

View File

@@ -0,0 +1,3 @@
# replication slot on sending server
# This needs to be configured using the docs below for "Keeping the replica and primary in sync."
primary_slot_name = 'replica_1_slot'

View File

@@ -0,0 +1,19 @@
#!/bin/bash
set -e
echo "include '/files/postgres/replica/replica_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
echo "include '/files/postgres/replica/replica_2/replica_2_config.conf'" >> /var/lib/postgresql/data/postgresql.conf
cp /var/lib/postgresql/data/postgresql.conf /files/postgres/replica/replica_2/baseconfig.conf
rm -rf /var/lib/postgresql/data/*
export PGPASSWORD='replicauser_password'
pg_basebackup -h cs-repro-postgres -p 5432 -U replicauser -D /var/lib/postgresql/data -Fp -Xs -R
rm -rf /var/lib/postgresql/data/postgresql.conf
cp /files/postgres/replica/replica_2/baseconfig.conf /var/lib/postgresql/data/postgresql.conf
exec pg_ctl -D /var/lib/postgresql/data start

View File

@@ -0,0 +1,3 @@
# replication slot on sending server
# This needs to be configured using the docs below for "Keeping the replica and primary in sync."
primary_slot_name = 'replica_2_slot'

View File

@@ -0,0 +1,64 @@
# If the instance is lower capacity than r5.xlarge, then set it to a lower number.
# Also tune the "MaxOpenConns" setting under the "SqlSettings" of the Mattermost app accordingly.
# Note that "MaxOpenConns" on Mattermost is per data source name.
max_connections = 1024
# Set it to 1.1, unless the DB is using spinning disks.
random_page_cost = 1.1
# This should be 32MB if using read replicas, or 16MB if using a single PostgreSQL instance.
# If the instance is of a lower capacity than r5.xlarge, then set it to a lower number.
work_mem = 16MB
# Set both of the below settings to 65% of total memory. For a 32 GB instance, it should be 21 GB.
# If on a smaller server, set this to 20% or less total RAM.
# ex: 512MB would work for a 4GB RAM server
shared_buffers = 512MB
effective_cache_size = 512MB
# If you are using pgbouncer, or any similar connection pooling proxy,
# in front of your DB, then apply the keepalive settings to the proxy instead,
# and revert the keepalive settings for the DB back to defaults.
tcp_keepalives_idle = 5
tcp_keepalives_interval = 1
tcp_keepalives_count = 5
# 1GB (reduce this to 512MB if your server has less than 32GB of RAM)
maintenance_work_mem = 512MB
autovacuum_max_workers = 4
autovacuum_vacuum_cost_limit = 500
## Intentionally disabled here because running in docker this may cause performance problems.
# If you have more than 32 CPUs on your database server, please set the following options to utilize more CPU for your server:
# max_worker_processes = 12
# max_parallel_workers_per_gather = 4
# max_parallel_workers = 12
# max_parallel_maintenance_workers = 4
# If the instance is lower capacity than r5.xlarge, then set it to a lower number.
# Also tune the "MaxOpenConns" setting under the "SqlSettings" of the Mattermost app accordingly.
# Note that "MaxOpenConns" on Mattermost is per data source name.
max_connections = 1024
# This setting should be 16MB on read nodes, and 32MB on writer nodes
work_mem = 16MB
# The below settings allow the reader to return query results even when the primary has a write process running, a query conflict.
# This is set to on because of the high volume of write traffic that can prevent the reader from returning query results within the timeout.
# https://www.postgresql.org/docs/current/hot-standby.html#HOT-STANDBY-CONFLICT
hot_standby = on
hot_standby_feedback = on
# connection string to sending server
# This was created when you added a replication role to the primary database.
# username - replace "test" with the role you made
# password - replace "testpassword" with the role password
# host - replace "x.x.x.x" with your IP or URL string.
primary_conninfo = 'host=cs-repro-postgres port=5432 user=replicauser password=replicauser_password'
log_connections = on
log_disconnections = on
log_replication_commands = on