- 逻辑主备角色分为Publication和Subscription
- 逻辑主库和逻辑备库为不同的PostgreSQL实例可以在同一主机上也可以在不同主机上。
Publication节点
- 可在任何可读写的PostgreSQL实例上
- 一个实例中允许创建多个发布,目前允许加入发布的对象只有Table,允许将多个Table注册到一个发布中
- 加入发布的表通常需要有replica identity(复制标识),从而使逻辑主库表上的 DELETE/UPDAE操作 可以标记到相应数据行并复制到逻辑备库上的表
默认使用主键作为复制标识
如果没有主键, 也可是唯一索引
如果没有主键或唯一键,可设置复制标识为 full ,意思是整行数据作为键值,这种 情况下复制效率会降低。
如果加入发布的表没有指定复制标识,表上的UPDATE/DELETE 将会报错
Subscription节点
- 指定发布者的表数据
- 订阅节点数据库上同时也能创建发布
- 发布节点上发布的表的DDL不会被复制
- 订阅节点通过逻辑复制槽获取发布节点发送WAL数据变化
逻辑复制配置
配置Publication节点参数
wal_level = logical
max_replication_slots = 8
max_wal_senders = 10
配置Subscription节点参数
max_replication_slots = 8
max_logical_replication_workers = 8
说明
- wal_level = logical增加逻辑解码所需的信息,低于这个级别逻辑复制不能复制
- max_replication_slots必须大于订阅节点数量
- max_wal_senders 必须大于 max_replication_slots加上流复制备库数量,因为每个订阅- 节点和流复制备库都会占用一个wal送进程
- max_logical_replication_workers 建议大于订阅节点数
Publication创建发布
- 所有表
create publication pub1 for all tables;--所有表
create publication pub1 for table t1;--单表
- 查看创建的发布
select * from pg_publication;
Subscription创建表的元数据,并创建订阅
--create table metadata
create table t1;
pg_dump/pg_dumpall -s;
create subscription sub1 connection 'host=192.162.1.52 port=5432 dbname=testdb user=repuser password=repuser' publication pub1;
查看创建的订阅
select * from pg_subscription;
alter subscription sub1 refresh publication;
启停方法
alter subscription sub1 disable;
alter subscription sub1 enable;
查看订阅状态
select subname,subenabled,subpublications from pg_subscription;
网友评论