https://github.com/digoal/postgresql_ha_with_primary_standby_2vip
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.
https://github.com/digoal/postgresql_ha_with_primary_standby_2vip
Last synced: 3 months ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/digoal/postgresql_ha_with_primary_standby_2vip
- Owner: digoal
- License: gpl-2.0
- Created: 2015-01-02T04:11:22.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2016-02-02T02:20:10.000Z (over 9 years ago)
- Last Synced: 2024-10-12T04:16:05.738Z (8 months ago)
- Language: Shell
- Homepage: http://blog.163.com/digoal@126
- Size: 574 KB
- Stars: 101
- Watchers: 15
- Forks: 46
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
PostgreSQL_HA_with_primary_standby_2vip
=======================================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/=======================================
数据库角色转变和心跳原理 :
1. 根据文件recovery.conf是否存在检测本地节点角色
存在(standby), 不存在(master)
2. 加载NFS对端归档目录
3. 启动数据库
如果是standby
启动数据库
如果是master
如果其他主机未启动VIPM, 启动数据库4. 启动VIP
如果是standby
启动vips
如果是master
如果vipm已被其他节点启动
降级为standby
启动vips
如果vipm没有被其他节点启动
启动vipm5. 触发第一次心跳
6. 循环心跳检测
=======================================
不同的角色, 循环逻辑不同:
=======================================
master角色, 循环检查1. 网关检查, 反映本地网络状况
2. 本地心跳检查, 反映本地数据库健康状态
3. 本地角色对应IP检查
4. 检查VIPS,PORT,数据库心跳
如果本地健康,对端不健康
触发切换
1. 主节点fence standby
2. 主节点接管VIPS
3. 主节点转换master_standby角色
=======================================
standby角色, 循环检查1. 网关检查, 反映本地网络状况
2. 本地心跳检查, 反映本地数据库健康状态
3. 本地角色对应IP检查
4. 检查备延迟, 判断是否允许promote
5. 检查VIPM,PORT,数据库心跳
如果本地健康,对端不健康
触发切换
1. 备节点fence master
2. 备节点停库
3. 备节点注释restore_command
4. 备节点启动数据库
5. 备节点激活数据库, 修改restore_command
6. 备节点接管VIPM
7. 备节点转换master_standby角色
=======================================
master_standby角色, 循环检查1. 检查对端数据库心跳
如果对端数据库心跳正常
触发释放vips
1. 释放vips
2. 转换为master角色
图片
架构

主角
备角
主备合一角
逻辑



# Author : Digoal zhou
# Email : [email protected]
# Blog : http://blog.163.com/digoal@126/