瀚高数据库
目录
文档用途
详细信息
文档用途
本文档用于指导使用hghactl集群命令配置逻辑复制槽; 若用数据库命令创建逻辑复制槽,在集群主备切换新主节点不会自动创建逻辑复制槽; 意外情况出现的逻辑复制断开,集群会识别该逻辑复制槽为unkown,删除逻辑复制槽。
详细信息
1.确认集群wal日志级别为logical
说明: 如果参数是logical,请跳过下方命令; 如果参数不是logical,请使用下方命令修改参数; 如果已经成功创建逻辑复制,证明该参数为logical,也请跳过下方命令。
[highgo@slave ~]$ hghactl edit-config -p "wal_level=logical"
---
+++
@@ -10,7 +10,7 @@
max_replication_slots: 10
max_wal_senders: 10
wal_keep_size: 100
- wal_level: replica
+ wal_level: logical
wal_log_hints: 'on'
use_pg_rewind: true
use_slots: true
Apply these changes? [y/N]: y
Configuration changed
[highgo@slave ~]$ hghactl list
+ Cluster: highgo-see-cluster --+---------+-----------+----+-----------+-----------------+
| Member | Host | Role | State | TL | Lag in MB | Pending restart |
+---------+---------------------+---------+-----------+----+-----------+-----------------+
| see_216 | x.x.10.216:5866 | Replica | streaming | 18 | 0 | * |
| see_60 | x.x.10.60:5866 | Leader | running | 18 | | * |
+---------+---------------------+---------+-----------+----+-----------+-----------------+
[highgo@slave ~]$ hghactl restart highgo-see-cluster
+ Cluster: highgo-see-cluster --+---------+-----------+----+-----------+-----------------+
| Member | Host | Role | State | TL | Lag in MB | Pending restart |
+---------+---------------------+---------+-----------+----+-----------+-----------------+
| see_216 | x.x.10.216:5866 | Replica | streaming | 18 | 0 | * |
| see_60 | x.x.10.60:5866 | Leader | running | 18 | | * |
+---------+---------------------+---------+-----------+----+-----------+-----------------+
When should the restart take place (e.g. 2024-06-23T12:32) [now]: now
Are you sure you want to restart members see_216, see_60? [y/N]: y
Restart if the PostgreSQL version is less than provided (e.g. 9.5.2) []:
Success: restart on member see_216
Success: restart on member see_60
[highgo@slave ~]$ hghactl list
+ Cluster: highgo-see-cluster --+---------+---------+----+-----------+
| Member | Host | Role | State | TL | Lag in MB |
+---------+---------------------+---------+---------+----+-----------+
| see_216 | x.x.10.216:5866 | Replica | running | 18 | 0 |
| see_60 | x.x.10.60:5866 | Leader | running | 18 | |
+---------+---------------------+---------+---------+----+-----------+
[highgo@slave ~]$ psql
highgo=# show wal_level ;
wal_level
-----------
logical
(1 row)
2.确认hot_standby_feedback参数为on
hot_standby_feedback参数的作用是指定备库是否向主库发送有关当前在备库上执行的查询的反馈。此参数可用于消除由清理记录导致的查询取消,但对于某些工作负载,可能会导致主库膨胀。
--若测试为off需要执行命令修改
highgo=# show hot_standby_feedback ;
hot_standby_feedback
----------------------
off
(1 row)
--修改参数reload生效,所有节点都要执行。
highgo=# alter system set hot_standby_feedback =on;
ALTER SYSTEM
highgo=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
highgo=# show hot_standby_feedback ;
hot_standby_feedback
----------------------
on
(1 row)
- 动态修改集群配置参数
--用命令修改集群配置参数
[highgo@slave ~]$ hghactl edit-config
slots:
cdc_slot1: #复制槽名称
database: highgo #数据库名称
plugin: pgoutput #逻辑解码插件
type: logical #插槽类型
cdc_slot2:
database: highgo
plugin: pgoutput
type: logical
说明:
1、无需执行重启命令,修改即生效;
2、备节点自动重启,所有连接断开重连;
3、主节点不受影响,所有操作请在夜间执行 。
4、添加或删除复制槽都使用集群命令修改配置文件,不用的复制槽请及时删除。
--主备节点查看复制槽情况
highgo=# select * from pg_replication_slots;
- 逻辑复制使用逻辑复制槽
方法一:创建订阅指定逻辑复制槽
highgo=# CREATE SUBSCRIPTION sub1
CONNECTION 'host=x.x.10.216 port=5866 dbname=highgo user=highgo password=Hello@123'
PUBLICATION pub1
WITH (copy_data = true, create_slot=false, enabled=true, slot_name='cdc_slot1');
CREATE SUBSCRIPTION
方法二:修改订阅指定逻辑复制槽,不会影响已有逻辑复制
highgo=# ALTER SUBSCRIPTION sub2 SET (slot_name='cdc_slot2');
ALTER SUBSCRIPTION
注意:
01、创建订阅不指定复制槽参数,默认会自动创建逻辑复制槽。
02、订阅指定了新的逻辑复制槽,旧的逻辑复制槽集群会自动删除。
- 主备节点查看逻辑复制槽信息
主库:
备库:
说明: 在备节点创建逻辑复制槽后,hghac集群使用pg_replication_slot_advance()向前更新槽。
6.集群切换逻辑复制槽不受影响,但是订阅端需要重新订阅
6.1切换后逻辑复制槽状态
新主库(逻辑复制槽active为f),已有订阅请参考6.3更改订阅信息,数据自动同步,若使用vip主备切换无需更改订阅信息:
新备库(逻辑复制槽active为f):
6.2重新创建订阅之后,逻辑复制槽active变为t
6.3更改订阅信息,逻辑复制槽active变为t
7.断流测试
关掉逻辑复制订阅段数据库,逻辑复制槽依然存在
7.1关闭逻辑复制数据库,查看逻辑复制槽信息
7.2启动逻辑复制数据库,查看逻辑复制槽信息