replication slots 是从postgresql 9.4 引入的, 主要是提供了一种自动化的方法来确保主控机在所有的后备机收到 WAL 段 之前不会移除它们,并且主控机也不会移除可能导致恢复冲突的行,即使后备机断开也是如此。
流复制并不会默认开启 replication slots, 需要手工配置。
创建复制槽
每个复制槽都有一个名字,名字可以包含小写字母、数字和下划线字符。
master设置几个参数
max_replication_slots = 10hot_standby = onwal_level = replica 或者 logicalhot_standby_feedback = onmax_wal_senders = 10
重启postgresql后,创建 replication slots
#创建复制槽
SELECT * FROM pg_create_physical_replication_slot('pg96_102');
#查询复制槽
select * from pg_replication_slots;
要配置slave使用这个槽,在后备机的recovery.conf中应该配置
primary_slot_name,如下:
$ vi $PGDATA/recovery.conf
primary_slot_name = 'pg96_101'standby_mode = 'on'recovery_target_timeline = 'latest'primary_conninfo = 'user=replicator password=1qaz2wsx host=192.168.56.101 port=5432 application_name=pg96_103'trigger_file = '/tmp/postgresql.trigger.5432'
#查看复制情况
select * from pg_stat_replication;
#删除复制槽
slave在使用 primary_slot_name 参数时是无法删除 replication slots
SELECT * FROM pg_drop_replication_slot('pg96_102');