PostgreSQL中的Replication_slot
Replication slot(物理复制槽)是PGSQL中用来记录复制状态的重要工具。他可以防止主机误删备机所需的WAL日志和辅助逻辑复制。
主机作为备机WAL日志的复制源,为了保证日志数据的一致性,就需要保证主机可以拥有备机所需要的所有的WAL日志。这也保证了如果一个备机的备份速度远远慢于主机WAL日志的产生速度时,也可以保证数据的一致性。
- Replication slot
为了解决这个问题,PGSQL中提供了wal_keep_segments参数。这个参数可以指定WAL日志回收时需要保持的余量。即在主机实现故障恢复的前提下,额外保证wal_keep_segments个WAL日志。这种方式相当于延迟删除WAL文件,可以一定程度上缓解备机无法找到WAL日志的问题。但是无法根除。因为你无法避免备机的WAL日志落后于wal_keep_segments个数的情况。
为了解决此问题,也可以通过持续归档的方法来解决。即将WAL日志备份到另外一处位置,在WAL日志复制时,如果从pg_wal目录下找不到WAL日志,那就尝试从归档的位置进行寻找。
但是实际上,如果主机能够知道备机落盘的进展,那么就可以根据LSN的最小值确定从什么位置开始清理WAL日志。而物理复制槽恰好就可以解决这个问题。备机可以通过物理复制槽不断的反馈LSN给主机。主机在清理WAL日志时,就可以参考物理复制槽中的LSN,这样就可以避免清理掉备机还需要的WAL日志。