keepalived+timescaladb主备切换高可用方案

keepalived+timescaladb主备切换高可用方案

环境和组件依赖

ubuntu 22.04,docker引擎

  • keepalived v2.2.4
  • timescaledb docker镜像wjy2020/timescaledb-repmgr:pg14.15-ts2.17.2,镜像使用参考

方案思路

在双机分别部署这两个组件,keepalived定时检测timescaladb数据库的主备状态,当数据库状态发生变化,keepalived状态随之调整,使得虚拟ip能正确的绑定到主数据库(可读写)所在ip。

keepalived配置

执行sudo apt install keepalived -y安装后,keepalived.conf配置文件位于/etc/keepalived目录,文件和目录没有则手动创建。
使用非抢占模式,双机的状态配置都是state BACKUP,先启动的是master节点。

! Configuration File for keepalived
# 配置参考https://keepalived.org/manpage.html
# 注意:如果使用了osixia/keepalived docker镜像并配置了相关环境量,会覆盖本配置文件对应的参数值# 选配。声明模块名称为check_haproxy,使用自定义检测脚本来监控服务的状态,并根据脚本的返回结果决定是否触发故障转移
# 如果健康检测脚本返回非零退出状态码,Keepalived 会将自身降级为Backup状态;如果所有健康检测都通过,且当前没有其他节点是Master,它将尝试升为主
# 需要在vrrp_instance之前提前声明
vrrp_script check_postgres {# 注意脚本执行权限。docker需要配置挂载映射。注意脚本可能有入参传递script "/etc/keepalived/check_postgres.sh pg0"# 每隔5秒检查一次interval 5
}global_defs {# 路由id,当前安装keepalived的节点主机标识符,保证全局唯一。router_id MASTER# WARNING - default user 'keepalived_script' for script execution does not exist - please create.script_user root
}vrrp_instance VI_1 {# 虚拟ip绑定的物理机网卡名称interface ens33# 节点定义,MASTER/BACKUP# state MASTERstate BACKUP# 非抢占模式,同时master节点的state也要改为BACKUP,先启动的是master节点# 当MASTER故障后,BACKUP会成为新的MASTER,而当老的MASTER恢复后,又会抢占成为新的 MASTER,接管VIP的流量,会产生一次不必要的主备切换。也避免虚拟ip在节点间来回漂移引起网络抖动nopreempt# 虚拟路由id,主从集群之间必须一致,同一组集群vid唯一。基于规范性要求,一般设置为虚拟iP最后一位virtual_router_id 51# 优先级,值高的为master,主从尽量相差50priority 100# 多播/单播配置# mcast_src_ip 192.168.89.131 # 发送多播包源地址,默认为设置的网卡绑定的ip# 本节点ipunicast_src_ip 192.168.89.131# 其他节点ipunicast_peer {192.168.89.133}# 定义虚拟ip,需要定义一个同一子网下未被分配的ipvirtual_ipaddress {192.168.89.134/24}# 定义认证类型和密码,主从集群之间的认证必须一致authentication {auth_type PASSauth_pass d0cker  }# 选配。执行自定义检测脚本,常用于检测到本机的某个中间件nginx、mysql等进程挂掉就自杀kill掉自身keepalived进程做切换track_script {# 调用配置文件头部声明的脚本模块名称check_postgrescheck_postgres}# 选配# 定义通知脚本,当前节点成为主节点时触发的脚本#notify_master "/etc/keepalived/notify.sh MASTER"# 定义通知脚本,当前节点转为备节点时触发的脚本#notify_backup "/etc/keepalived/notify.sh BACKUP"# 定义通知脚本,当前节点转为“失败”状态时触发的脚本#notify_fault "/etc/keepalived/notify.sh FAULT"
}

配置完成后,启动/重启keepalived服务

sudo systemctl start keepalived
sudo systemctl enable keepalived

数据库健康检测脚本

keepalived.conf中声明调用的check_postgres.sh脚本内容

#!/bin/bash# 从入参获取容器名称
CONTAINER_NAME=$1# 执行命令并捕获输出
output=$(docker exec $CONTAINER_NAME psql -U postgres -c "SELECT pg_is_in_recovery();" | awk 'NR==3 {print $1}')# 检查命令是否成功
if [ $? -ne 0 ]; thenecho "Failed to execute command in container."exit 1
fi# 确认当前pg实例是否处于备库模式.t-备库,f-主库
if [ $output = "t" ]; then# 当前是备库,降为Backup状态echo "PostgreSQL is in recovery mode."exit 1
elif [ $output = "f" ]; then# 当前是主库,升为Master抢占vipecho "PostgreSQL is not in recovery mode."exit 0
elseecho "Unexpected output: $output"exit 1
fi

keepalived状态说明

使用systemctl status keepalived查看状态。由于数据库存在主/备两种状态,和普通的中间件运行/挂掉状态不同。因此在keepalived状态和服务器角色对应关系:

  • MASTER 主。
  • FAULT 备。
  • BACKUP 不存在这个状态。只作为中间状态用于升降级转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分层耦合 - IOC详解

推荐使用下面三种, 第一种多用于其他类 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用…

PDF Shaper:免费多功能 PDF 工具箱,一站式满足您的 PDF 需求!

​PDF Shaper 是一款功能强大且完全免费的 PDF 工具箱,它几乎涵盖了日常 PDF 操作的方方面面,无论是转换、编辑还是处理,都能轻松搞定。以下是这款软件的详细介绍: 功能丰富,一应俱全 PDF 转换功能强大 PDF 转 Word&am…

未来替代手机的产品,而非手机的本身

替代手机的产品包括以下几种: 可穿戴设备:智能手表、智能眼镜等可穿戴设备可以提供类似手机的功能,如通话、信息推送、浏览网页等。 虚拟现实(VR)技术:通过佩戴VR头显,用户可以进行语音通话、发…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步:使用通用模板提出需求,生成视频脚本 对话输入示例脚本1: 大年初五是迎财神的日志,帮我生成10秒左右的短视频, 体现一家3口在院子里欢庆新年, 孩子在院子里放鞭炮烟…

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…

为什么推荐使用 LabVIEW 开发

在仪器行业的软件开发中,LabVIEW 以其图形化编程、快速原型开发、高效硬件集成的优势,成为自动化测试和控制系统的理想选择。尽管一些工程师仍然坚持使用 C 语言,但这更多是出于习惯,而非技术上的必然。LabVIEW 不仅支持 NI 硬件&…

力扣1448. 统计二叉树中好节点的数目

Problem: 1448. 统计二叉树中好节点的数目 文章目录 题目描述思路复杂度Code 题目描述 思路 对二叉树进行先序遍历,边遍历边对比并更新当前路径上的最大值pathMax,若当pathMax小于等于当前节点值,则好节点的数目加一 复杂度 时间复杂度: O (…

DeepSeek帮助做【真】软件需求-而不是批量刷废话

尝试给DeepSeek一份系统用例规约,让它帮判断哪些地方还没有覆盖涉众利益。结果见以下 需求工作的重点可以放在建模精细的真实现状流程和精细的真实涉众利益上,AI帮助推演系统需求。

【JVM详解五】JVM性能调优

示例: 配置JVM参数运行 #前台运行 java -XX:MetaspaceSize-128m -XX:MaxMetaspaceSize-128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio8 - XX:UseConcMarkSweepGC -jar /jar包路径 #后台运行 nohup java -XX:MetaspaceSize-128m -XX:MaxMetaspaceS…

Qt文本处理【正则表达式】示例详解:【QRegularExpression】

在 Qt 中,正则表达式是处理文本的强大工具,它能够帮助我们匹配、搜索和替换特定的字符串模式。自 Qt 5 起,QRegularExpression 类提供了对 ECMAScript 标准的正则表达式支持,这使得它在处理各种复杂的字符串任务时变得更加高效和灵…

【算法学习】拓扑排序(Topological Sorting)

目录 定义 例子 拓扑排序的实现 核心思想 实现方法 1,Kahn算法(基于贪心策略) 步骤: 用二维数组存储图的例子 用哈希表存储图的例子 2,基于DFS的后序遍历法 总结 拓扑排序的应用场景 1,任务调度 …

JavaEE-前端与后台的搭建

一.idea连接数据库 在使用 IntelliJ IDEA 连接数据库时,可以按照以下步骤操作: ### 1. 打开数据库工具窗口 - 在 IntelliJ IDEA 中,点击右侧的 Database 工具窗口,或通过 View -> Tool Windows -> Database 打开。 ### 2. 添…

华为Mate 70 Pro或推出全新版本

关于华为Mate 70 Pro或推出全新版本的相关内容:可能的版本及命名。 据数码博主“定焦数码”爆料,华为Mate 70 Pro将推出新版本,命名为“优享版”。这一命名方式与华为Mate 60系列中的Mate 60 Pro乐臻版类似,预计优享版也会是一个组…

Linux 实操篇 实用指令

一、远程登录到Linux服务器 (1)为什么需要远程登录Linux linux服务器是开发小组共享的正式上线的项目是运行在公网因此程序员需要远程登陆到Linux进行项目管理或者开发画出简单的网络拓扑示意图远程登陆客户端有Xshell6,Xftp6,我…

SpringBoot 统一功能处理之拦截器、数据返回格式、异常处理

目录 拦截器 一、什么是拦截器 二 拦截器的使用 三 拦截路径配置 四 拦截器的执行流程 统一数据返回格式 统一异常处理 拦截器 一、什么是拦截器 拦截器是Spring框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务…

Django学习笔记(第一天:Django基本知识简介与启动)

博主毕业已经工作一年多了,最基本的测试工作已经完全掌握。一方面为了解决当前公司没有自动化测试平台的痛点,另一方面为了向更高级的测试架构师转型,于是重温Django的知识,用于后期搭建测试自动化平台。 为什么不选择Java&#x…

Spring Cloud工程完善

目录 完善订单服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 完成商品服务 启动类 配置文件 实体类 Controller Service Mapper 测试运行 远程调用 需求 实现 1.定义RestTemplate 2.修改order-service中的OrderService 测试运行 Rest…

如何将网站提交百度收录完整SEO教程

百度收录是中文网站获取流量的重要渠道。本文以我的网站,www.mnxz.fun(当然现在没啥流量) 为例,详细讲解从提交收录到自动化维护的全流程。 一、百度收录提交方法 1. 验证网站所有权 1、登录百度搜索资源平台 2、选择「用户中心…

Linux ftrace 内核跟踪入门

文章目录 ftrace介绍开启ftrace常用ftrace跟踪器ftrace使用ftrace跟踪指定内核函数ftrace跟踪指定pid ftrace原理ftrace与stracetrace-cmd 工具KernelShark参考 ftrace介绍 Ftrace is an internal tracer designed to help out developers and designers of systems to find wh…

VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现

VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现 权限系统分类(RBAC)引言菜单权限按钮权限接口权限路由权限 菜单权限方案方案一:菜单…