PgSQL集群(流式复制,CentOS 7)
参考:http://blog.itpub.net/30126024/viewspace-2672741/
https://blog.csdn.net/weixin_39950824/article/details/111193453
同步流复制
主机名 | ip地址 | 角色 | 路径 | 版本 |
---|---|---|---|---|
master | 192.168.246.130 | master | /usr/pgsql12/data | 12.7 |
pgslave01 | 192.168.246.129 | standby | /usr/pgsql12/data | 12.7 |
pgslave02 | 192.168.246.131 | standby | /usr/pgsql12/data | 12.7 |
- – 主库
1.修改postgres 密码:
alter user postgres with PASSWORD 'postgres';
2.配置允许主库接受流复制的连接(master)
#ipv4
host all all 0/0 turst
# replication
host replication postgres 192.168.246.129 turst
host replication postgres 192.168.246.130 turst
host replication postgres 192.168.246.131 turst
2.修改postgresql.conf(数据库实例路径下:$PGDATA)
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica
hot_standby = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
- – 备库
1.postgresql用户下(这里建议研究下pg_basebackup的参数含义,重点)
进行一次数据同步到备库
pg_basebackup -h 192.168.246.130 -p 5432 -U repl -w -Fp -Xs -Pv -R -D /usr/pgsql12/data/
pg_basebackup在备库data文件下存在数据情况下会默认失败,两个方法(备库不存在数据库实例忽略):
1)删除备库的data的数据
rm -rf /usr/pgsql12/data/
- 修改同步路径
pg_basebackup -h 192.168.246.130 -p 5432 -U repl -w -Fp -Xs -Pv -R -D /usr/pgsql12/data1/
–启动
主库启动
pg_ctl start
pg_ctl reload
master 主库
- master配置:
- 在postgresql.conf 配置
synchronous_standby_names = 'pgslave01,pgslave02' # 指定application_name的名称
wal_keep_segments = 1024 # 这里设置1024表示为standby保留1024个WAL文件
配置完成启动
pg_ctl start
备库
- pgslave01 和 pgslave02的配置(操作相同,只是application_name 不同)
- 在postgresql.conf 配置
primary_conninfo = 'application_name=pgslave01 passfile=''/home/postgres/.pgpass'' user=postgres password=postgres host=192.168.246.130 port=5432 sslmode=disable sslcompression=1'
这里会有一个坑,data目录下含有postgresql.conf和postgresql.auto.conf,而postgresql.auto.conf的优先级高于postgresql.conf,如果一个参数同时存在postgresql.auto.conf和postgresql.conf里面,系统会先读postgresql.auto.conf的参数配置
因此保险起见:在postgresql.auto.conf 也配置与postgresql.conf相同。
primary_conninfo = 'application_name=pgslave01 passfile=''/home/postgres/.pgpass'' user=postgres password=postgres host=192.168.246.130 port=5432 sslmode=disable sslcompression=1'
配置完成启动
pg_ctl start
3.最后在master同步复制
pg_ctl reload
结果:
postgres=# select application_name,client_addr,sync_state from pg_stat_replication;
application_name | client_addr | sync_state
------------------+-----------------+------------
pgslave01 | 192.168.246.129 | sync
pgslave02 | 192.168.246.131 | potential
(2 rows)