pg_failover_slots
在Failover过程中保留复制槽
仓库
EnterpriseDB/pg_failover_slots
https://github.com/EnterpriseDB/pg_failover_slots
源码
pg_failover_slots-1.2.0.tar.gz
pg_failover_slots-1.2.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_failover_slots | 1.2.0 | ETL | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9530 | pg_failover_slots | 否 | 是 | 是 | 否 | 否 | 是 | - |
| 相关扩展 | pglogical pglogical_origin pglogical_ticker pgactive repmgr bgw_replstatus pgl_ddl_deploy decoderbufs |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.2.0 | 1817161514 | pg_failover_slots | - |
| RPM | PIGSTY | 1.2.0 | 1817161514 | pg_failover_slots_$v | - |
| DEB | PIGSTY | 1.2.0 | 1817161514 | postgresql-$v-pg-failover-slots | - |
构建
您可以使用 pig build 命令构建 pg_failover_slots 扩展的 RPM / DEB 包:
pig build pkg pg_failover_slots # 构建 RPM / DEB 包
安装
您可以直接安装 pg_failover_slots 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_failover_slots; # 当前活跃 PG 版本安装
pig ext install -y pg_failover_slots -v 18 # PG 18
pig ext install -y pg_failover_slots -v 17 # PG 17
pig ext install -y pg_failover_slots -v 16 # PG 16
pig ext install -y pg_failover_slots -v 15 # PG 15
pig ext install -y pg_failover_slots -v 14 # PG 14
dnf install -y pg_failover_slots_18 # PG 18
dnf install -y pg_failover_slots_17 # PG 17
dnf install -y pg_failover_slots_16 # PG 16
dnf install -y pg_failover_slots_15 # PG 15
dnf install -y pg_failover_slots_14 # PG 14
apt install -y postgresql-18-pg-failover-slots # PG 18
apt install -y postgresql-17-pg-failover-slots # PG 17
apt install -y postgresql-16-pg-failover-slots # PG 16
apt install -y postgresql-15-pg-failover-slots # PG 15
apt install -y postgresql-14-pg-failover-slots # PG 14
预加载配置:
shared_preload_libraries = 'pg_failover_slots';
用法
通过将槽状态从主库同步到备库,使逻辑复制槽在物理故障转移后可用。
启用
在主库和备库的 postgresql.conf 中添加:
shared_preload_libraries = 'pg_failover_slots'
备库所需设置:
hot_standby_feedback = on
primary_slot_name = 'my_physical_slot' -- 必须非空
配置选项
# 要同步的槽(默认:所有逻辑槽)
pg_failover_slots.synchronize_slot_names = 'name_like:%'
# 同步特定槽
pg_failover_slots.synchronize_slot_names = 'my_slot,plugin:test_decoding'
# 删除备库上主库中不存在的多余槽(默认:true)
pg_failover_slots.drop_extra_slots = true
# 连接到主库的连接字符串(默认:使用 primary_conninfo)
pg_failover_slots.primary_dsn = 'host=primary dbname=mydb'
# 确保物理备库在逻辑消费者之前接收数据
pg_failover_slots.standby_slot_names = 'standby_physical_slot'
# 需要确认的备库槽数(默认:-1 = 全部)
pg_failover_slots.standby_slots_min_confirmed = -1
# 同步间隔(毫秒,默认:60000)
pg_failover_slots.worker_nap_time = 60000
检查备库就绪状态
在故障转移前验证所有逻辑槽已同步:
-- 在备库上:所有槽应显示 active = false
SELECT slot_name, active FROM pg_replication_slots WHERE slot_type = 'logical';
-- slot_name | active
-- ------------------+--------
-- regression_slot1 | f -- 已同步,就绪
-- regression_slot2 | f -- 已同步,就绪
-- regression_slot3 | t -- 仍在同步,未就绪
当所有槽显示 active = false 时,备库可以安全进行故障转移。
关键行为
- 从主库复制缺失的复制槽到备库
- 移除备库上主库中不存在的多余槽
- 定期同步槽位置
standby_slot_names提供同步复制屏障以防止故障转移时数据丢失- 需要 PostgreSQL 11 或更高版本