A HA script for PostgreSQL with 2 HOST (one for primary, one for standby), Primary with one VIP, Standby with another VIP. Auto failover and failback.
两台主机, 分别负责primary和standby;
2个虚拟IP, 分别对应primary和standby;
三种状态, primary, standby, primary_standby;
三种状态自由切换:
当1台主机异常时, 另一台主机承担primary_standby角色, 并启动2个虚拟IP.
正常情况下两台主机分别承担primary和standby角色, 分别启动一个虚拟IP.
应用程序连接虚拟IP, 其中一个虚拟IP对应的是primary, 另一个虚拟IP对应的是standby.
虚拟IP和角色的关系固定, 不会变化, 例如192.168.111.130对应primary角色, 那么不管怎么切换, 他们始终在一起(谁是primary,谁就会启动192.168.111.130).
部署视频参考:
http://www.tudou.com/programs/view/bIbZ85SrsHM/
http://www.tudou.com/programs/view/kdRPT6dSp_0/
http://www.tudou.com/programs/view/I6bxk2u3xdY/
=======================================
数据库角色转变和心跳原理 :
-
根据文件recovery.conf是否存在检测本地节点角色
存在(standby), 不存在(master)
-
加载NFS对端归档目录
-
启动数据库 如果是standby 启动数据库 如果是master 如果其他主机未启动VIPM, 启动数据库
-
启动VIP 如果是standby 启动vips 如果是master 如果vipm已被其他节点启动 降级为standby 启动vips 如果vipm没有被其他节点启动 启动vipm
-
触发第一次心跳
-
循环心跳检测
=======================================
不同的角色, 循环逻辑不同:
======================================= master角色, 循环检查
-
网关检查, 反映本地网络状况
-
本地心跳检查, 反映本地数据库健康状态
-
本地角色对应IP检查
-
检查VIPS,PORT,数据库心跳
如果本地健康,对端不健康
触发切换
1. 主节点fence standby
2. 主节点接管VIPS
3. 主节点转换master_standby角色
======================================= standby角色, 循环检查
-
网关检查, 反映本地网络状况
-
本地心跳检查, 反映本地数据库健康状态
-
本地角色对应IP检查
-
检查备延迟, 判断是否允许promote
-
检查VIPM,PORT,数据库心跳
如果本地健康,对端不健康
触发切换
1. 备节点fence master
2. 备节点停库
3. 备节点注释restore_command
4. 备节点启动数据库
5. 备节点激活数据库, 修改restore_command
6. 备节点接管VIPM
7. 备节点转换master_standby角色
======================================= master_standby角色, 循环检查
- 检查对端数据库心跳
如果对端数据库心跳正常
触发释放vips
1. 释放vips
2. 转换为master角色
图片