PostgreSQL之故障转移该有的流程
数据库集群故障转移的目的是在主机节点意外宕机后,自动提升一个备机节点作为主机,以达到继续对外提供服务的目的。
1、主机节点故障
常见的主机故障场景包括:
-
电源失效(掉电)
-
意外关机
-
系统意外重启
-
系统崩溃(kernel panic)
-
网络中断
-
服务进程故障
tips:
为了避免集群服务异常,主机需要考虑如何处理自身的故障,在遇到掉电、关机、重启、系统崩溃故障时,故障恢复后,一般不会自启动数据库服务,避免此时因备机升主导致集群出现脑裂;
主机节点遇到网络中断时,需要考虑网络中断时间,备机节点在指定时间内检测不到主机心跳,便会提升自己,作为新主机继续提供服务,若此时原主机网络恢复,则会出现双主(脑裂),因此,主机节点需要在备机节点升主前主动停掉数据库服务,在实现上,可通过配置信任网关,在信任网关检测超时后自动停止数据库服务,超时时间小于备机心跳超时时间实现;
2、备机节点升主
备机节点升主一般会经过如下步骤
-
心跳检测超时(retry*delay)
-
停掉同故障主机的流复制连接(若有)
-
选举出新主机(多个备机会触发选举,单个备机直接win)
-
提升自己为主机(包括standby promote,load vip等)
tips:
为避免备机节点在提升为主节点过程中原主机服务恢复而出现集群脑裂,备机会尝试连接原主机并停掉原主机数据库服务;
记录一个遇到的坑点:
集群运行过程中,业务语句导致主机backend进程崩溃,此时主机进入恢复模式:
此时备机healthcheck超时,进入故障转移,备机升级为主机,此时原主机恢复完成,集群出现脑裂。
我们知道,备机在升级为主机过程中,会尝试停止原主机数据库,那为什么原主机数据库没能停掉呢?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了