背景
在常见的PostgreSQL双节点高可用构架中,如果主库挂了且主备无延迟,高可用系统会提升老备库为新主库对外服务。而对于老主库,则可以有很多处理策略,例如:
- 删掉,重搭新备库。
- 降级为备库,继续服务。
很显然,相比来说第一种不是个很好的方案。当数据量比较大时,重搭备库的时间成本太高,系统的可用性降低。但是因为老的主库挂掉的原因多种多样,甚至有可能是高可用系统的误判,而老主库也有可能是在挂掉之后又重新作为主库启动起来,这个时候降级并重搭流复制关系的操作就有可能失败(新的备库比新主库数据更超前)。
为了解决这种情况,PostgreSQL 引入了pg_rewind工具。
功能介绍
在PostgreSQL 官方文档的介绍中,pg_rewind 不光可以针对上面说的failover 的场景,理论上,