新闻中心

postgresqlkeepalived如何实现漂移ip_postgresqlvip方案

2025-11-20
浏览次数:
返回列表
PostgreSQL配合Keepalived通过VIP实现高可用,主库故障时备库自动接管。基于流复制同步数据,Keepalived用VRRP管理虚拟IP,结合健康检查脚本检测数据库状态,主节点异常时优先级降低,备节点升主并绑定VIP,应用通过VIP无缝连接新主库。需配置SSH免密、规划VIP、设置监控脚本,并注意脑裂防范与网络通信。方案简单高效,适用于中小规模系统。

postgresqlkeepalived如何实现漂移ip_postgresqlvip方案

PostgreSQL 配合 Keepalived 实现漂移 IP(VIP)是一种常见高可用方案,主要用于主备架构下避免单点故障。当主库宕机时,虚拟 IP 自动漂移到备库,应用无需修改连接地址即可继续访问数据库。

基本原理

该方案依赖于以下组件协同工作:

  • PostgreSQL 流复制:主库将 WAL 日志实时传输给备库,实现数据同步。
  • Keepalived:通过 VRRP 协议管理虚拟 IP,在主节点故障时自动将其转移到备节点。
  • 脚本监控:Keepalived 调用自定义脚本检测 PostgreSQL 状态,决定是否触发 VIP 漂移。

正常情况下,VIP 绑定在主库所在主机上。一旦主库或数据库进程异常,Keepalived 检测失败,优先级降低,备库提升为 MASTER 并接管 VIP。

部署前提条件

实施前需确保以下配置已完成:

  • 两台及以上服务器部署 PostgreSQL,并配置好流复制(主从模式)。
  • 网络互通,能支持组播通信(VRRP 使用)。
  • 设置无密码 SSH 登录(便于执行切换脚本)。
  • 规划一个未被使用的虚拟 IP(如 192.168.1.100),作为对外服务地址。

Keepalived 配置示例

以两节点为例,主节点(priority 100),备节点(priority 90)。

主节点 /etc/keepalived/keepalived.conf:

Magick Magick

无代码AI工具,可以构建世界级的AI应用程序。

Magick 225 查看详情 Magick vrrp_script chk_pg { script "/usr/local/bin/check_postgres.sh" interval 2 weight 2 }

vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass yourpass } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_pg } }

备节点配置:

vrrp_script chk_pg { script "/usr/local/bin/check_postgres.sh" interval 2 weight 2 }

vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass yourpass } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_pg } }

健康检查脚本 check_postgres.sh

该脚本用于判断本地 PostgreSQL 是否正常运行,是否为主库角色。

#!/bin/bash # 检查 PostgreSQL 是否运行且为 primary

PGDATA=/data/postgresql/data LOGFILE=/var/log/keepalived/pg_check.log

if pg_ctl -D "$PGDATA" status > /dev/null 2>&1; then ROLE=$(psql -U postgres -Atc "SELECT pg_is_in_recovery();" 2>/dev/null) if [ "$ROLE" = "f" ]; then exit 0 # 是主库,健康 else exit 1 # 是备库,不参与主角色竞争 fi else exit 1 # PG 未运行 fi

赋予执行权限:
chmod +x /usr/local/bin/check_postgres.sh

注意:实际环境中建议加入更严格的判断,例如端口监听、复制延迟等。

故障切换流程

  • 主库 PostgreSQL 崩溃或服务器宕机。
  • Keepalived 执行 check_postgres.sh 脚本返回失败。
  • 主节点权重下降,VRRP 优先级低于备库。
  • 备库升级为 MASTER,绑定虚拟 IP。
  • 客户端通过 VIP 连接新主库(需配合触发器或手动 promote)。

建议在备库的 keepalived 脚本中集成自动 promote 操作,或使用 repmgr 等工具辅助。

注意事项与优化建议

  • 脑裂风险:网络分区可能导致双主,建议结合仲裁机制或使用 Corosync+Pacemaker 更复杂场景。
  • IP 漂移生效时间:一般在 3~5 秒内完成,受 interval 和 advert_int 影响。
  • DNS 缓存问题:应用应直连 VIP,避免 DNS 缓存导致连接旧地址。
  • 防火墙设置:确保允许 VRRP 协议(协议号 112)通信。
  • 日志监控:定期查看 keepalived 和 PostgreSQL 日志,及时发现异常。

基本上就这些。这套方案简单有效,适合中小规模系统快速实现 PostgreSQL 高可用。关键是脚本要写稳,检测准确,避免误切。

以上就是postgresqlkeepalived如何实现漂移ip_postgresqlvip方案的详细内容,更多请关注其它相关文章!


# 适用于  # 南开区网站推广营销中心  # 潜江哪里有网站建设推荐  # 长沙大型网站建设费用  # 实惠的网站推广价格  # 海南seo线上营销平台  # 网络优化服务seo顾问  # 建阳区seo服务电话  # 百度seo优化鼻祖  # 武汉营销推广策划  # 红桥区网站运营推广  # 相关文章  # 将其  # 防火墙  # 机时  # 是一种  # 连接数据库  # 单点  # 不上  # 如何实现  # 绑定  # 日志监控  # dns  # 工具  # 端口  # ipad 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  Pyrogram与g4f集成:异步编程实践与常见错误解决  CSS子选择器:如何区分并样式化嵌套列表的子层级  Tabulator表格中精确实现日期时间排序的指南  如何在Promise链中有效终止错误处理后的执行  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  Win11网速慢怎么解决 Win11网络设置优化解除限速  将JSON对象数组转置为键值对列表的实用指南  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  AO3中文官网链接_AO3网页版稳定镜像站  绝地鸭卫平a核爆刀流玩法攻略  Golang如何使用const iota_Go iota常量计数器讲解  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  必由学官方网站入口 必由学学生教师共用登录通道  淘宝网网页版登录入口 淘宝官方网页版快捷登录  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  如何使用纯J*aScript判断Input元素是否在特定类容器内  深入理解与实现最大堆的Heapify过程:常见错误与修正  Composer如何解决json扩展缺失的错误  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  c++如何使用Meson构建系统_c++比CMake更快的构建工具  蛙漫官方正版入口 蛙漫网页在线全集免费观看  如何在Promise链中优雅地中断后续then执行  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】  MongoDB聚合管道:正确匹配对象数组中_id的方法  Lar*el 8 多关键词数据库搜索优化实践  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  圆通快递查询实时追踪 圆通物流包裹状态快速查看  理解J*aScript Promise的微任务队列与执行顺序  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  Django模型中自动计算可用余额的实现方法  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  age动漫网站入口 age动漫官网直接访问入口  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  顺丰国际快递查询 国际件官方查询入口  Flexbox布局实践:实现粘性导航栏与底部固定页脚  PDF文件体积过大处理_PDF压缩技巧详解  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  深入理解J*aScript Promise异步执行与微任务队列  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】 

搜索