14.高可用:逻辑复制

  • 逻辑主备角色分为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;

你可能感兴趣的:(14.高可用:逻辑复制)