1. 程式人生 > 實用技巧 >docker下postgis主從分離部署

docker下postgis主從分離部署

主服務的IP:192.168.153.133

從服務的IP:192.168.153.134

一、主伺服器

1、拉取映象

docker pull mdillon/postgis

2、建立容器

docker run --name pg-master --restart=always  -v /data/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d mdillon/postgis
docker run --name pg-slave --restart=always  -v /data/postgresql/data:/var
/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d mdillon/postgis

3、在主伺服器上給從伺服器新增同步資料權

1)建立同步資料使用者

docker exec -it pg-master bash
su postgres
psql
CREATE ROLE replica login replication encrypted password 'replica';

2)允許從庫同步資料

vi /data/postgresql/data/pg_hba.conf
在最下面新增
host   replication      replica       
192.168.153.133/32 trust

4、修改主伺服器(192.168.153.133)的postgresql.conf

listen_addresses = '*'   # 監聽所有IP
archive_mode = on  # 允許歸檔
archive_command = '/bin/date' # 用該命令來歸檔logfile segment,這裡取消歸檔。
wal_level = replica #開啟熱備
max_wal_senders = 32 # 這個設定了可以最多有幾個流複製連線,差不多有幾個從,就設定幾個
wal_keep_segments = 64
# 設定流複製保留的最多的xlog數目,一份是 16M,注意機器磁碟 16M*64 = 1G wal_sender_timeout = 60s # 設定流複製主機發送資料的超時時間 max_connections = 200 # 這個設定要注意下,從庫的max_connections必須要大於主庫的

5、重啟主伺服器的容器

docker restart pg-master

二、從伺服器

1、在從伺服器上將主伺服器的資料同步到從資料庫

docker exec -it pg-slave /bin/bash 
su postgres
rm -rf /var/lib/postgresql/data/*
pg_basebackup -D $PGDATA -Fp -Xs -v -P -h 192.168.153.133 -U replica -W

2、新增恢復檔案

vi /data/postgresql/data/recovery.conf

standby_mode = on
primary_conninfo = 'host=192.168.153.133 port=5432 user=replica password=replica'
recovery_target_timeline = 'latest'

3、修改postgresql.conf

vi /data/postgresql/data/postgresql.conf
wal_level = replica
max_connections = 1000
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s 
hot_standby_feedback = on

4、啟動容器

docker start pg-slave

5、在主伺服器上校驗主從部署

docker exec -it pg-master bash
su postgres
psql
select client_addr,sync_state from pg_stat_replication;
不為空建立成功