1、架构图
2、说明
该功能可以在同一个集群里实现分组复制,同城异步级联流复制,每个每组可以包含多个节点、设置不同的同步级别。
如需启用分组复制,必须先配置同步复制参数synchronous_standby_name和synchronous_commit,再按照需要配置synchronous_standby_nameX和synchronous_commitX(X为1-4)。synchronous_commitX设置的同步级别必须低于或者等于synchronous_commit设置的同步级别。
分组复制除了主分组,最多还可以设置分个四组,涉及到的主要参数
配置分组复制的服务器:
synchronous_standby_name1
synchronous_standby_name2
synchronous_standby_name3
synchronous_standby_name4
配置每个分组的不同同步级别:
synchronous_commit1
synchronous_commit2
synchronous_commit3
synchronous_commit4
3、示例
准备四台服务器
主库
halo41:192.168.1.41
从库
halo42:192.168.1.42
halo43:192.168.1.43
halo45:192.168.1.45
集群高可用成员halo41,halo42,halo43.同城异步halo45
4、配置步骤
4.1主库
4.1.1 创建流复制用户
CREATE USER replica PASSWORD '123456' REPLICATION;
4.1.2 修改postgersql.conf
vi /data/halo/postgresql.conf
listen_addresses = 'localhost' 修改为listen_addresses = '*'
----分组复制的配置:
synchronous_standby_names='1(halo42,halo43)'
synchronous_standby_names1='1(halo45)'
synchronous_commit=remote_apply
synchronous_commit1=on
4.1.3 配置pg_hba.conf
vi /data/halo/pg_hba.conf
host replication replica 0/0 md5
----做完1,2,3步需要重启数据库
pg_ctl restart
4.1.4 主备库配置
vi /etc/hosts
192.168.1.41 halo41 (主库ip)
192.168.1.42 halo42 备库ip
192.168.1.43 halo43 备库ip
192.168.1.45 halo45 备库ip --同城灾备
4.2 从库
4.2.1 备库执行:
192.168.1.42:
pg_basebackup -F p -X stream -v -P -h 192.168.1.41 -U replica -D $PGDATA -R -C --slot halo42
启动数据库:
pg_ctl start
192.168.1.43:
pg_basebackup -F p -X stream -v -P -h 192.168.1.41 -U replica -D $PGDATA -R -C --slot halo43
启动数据库:
pg_ctl start
192.168.1.45:
pg_basebackup -F p -X stream -v -P -h 192.168.1.41 -U replica -D $PGDATA -R -C --slot halo45
启动数据库:
pg_ctl start
4.2.2 将所有备库里的/data/halo/postgresql.auto.conf文件里的内容注释掉
4.2.3 修改备库里的/data/halo/postgresql.conf文件
vi /data/halo/postgresql.conf
192.168.1.42:
primary_conninfo = 'user=replica password=123456 channel_binding=prefer host=192.168.1.41 port=1921 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=halo target_session_attrs=any application_name=halo42'
--重载
pg_ctl reload
查询:
show primary_conninfo;
192.168.1.43:
primary_conninfo = 'user=replica password=123456 channel_binding=prefer host=192.168.1.41 port=1921 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=halo target_session_attrs=any application_name=halo43'
--重载
pg_ctl reload
查询:
show primary_conninfo;
192.168.1.45: 注意把primary_conninfo配置到postgres.base.conf文件中
primary_conninfo = 'user=replica password=123456 channel_binding=prefer host=192.168.1.41 port=1921 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=halo target_session_attrs=any application_name=halo45'
--重载
pg_ctl reload
查询:
show primary_conninfo;
4.3 高可用
4.3.1 启动高可用
Systemctl start etcd
Systemctl start patroni
4.3.2 patroni配置分组和patroni不删除同城流复制槽halo45
Patronictl edit-config
4.3.2.1分组流复制
synchronous_commit: remote_apply
synchronous_commit1: local
synchronous_standby_names: 1(halo42,halo43)
synchronous_standby_names1: 1(halo45)
4.3.2.2.patroni不删除复制槽
slots:
halo41:
type: physical
halo42:
type: physical
halo43:
type: physical
halo45:
type: physical
4.3.2.3级联复制槽
ignore_slots:
halo45: type:physical
4.4. 主库上查询流复制
select * from pg_stat_replication;
show synchronous_standby_names;
show synchronous_standby_names1;
show synchronous_commit;
show synchronous_commit1;
4.5 测试场景
4.5.1 场景一
4.5.1.1Halo41为主节点
从如下图,可以看到,(halo42,halo43)其中一个节点实时同步,halo43不同城异步async
4.5.1.2 查看patronictl list
4.5.2 场景二
4.5.2.1 halo42为主节点,从halo41手动切换到halo42 patronictl switchover
4.5.2.2 halo41查看流复制
4.5.2.3 halo42查看流复制
4.5.2.4查看patronictl list
总结:Halo42主库,实时同步halo43, halo45为级联流复制库
人物A 回复
这是回复
人物B 回复
我回复你了
人物A 回复
回复已收到