登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
【大赛通知】开源中国「2026上海开源软件应用创新大赛」火热报名中,百万奖池等你的项目
代码拉取完成,页面将自动刷新
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
30
Star
23
Fork
108
openGauss
/
CM
代码
Issues
25
Pull Requests
15
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
200
[民生银行需求]cm支持failover时关闭原始主(触发器适配 master分支提交)
已合并
cczhu:newmaster
openGauss:master
cczhu
创建于 2024-04-25 15:19
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
<!-- 感谢您提交Pull Reqeust --> <!-- 提交说明: 请按照以下的模板提交PR,下列内容均为必填项。如果未补充对应内容,不允许提交PR。 --> 【标题】[民生需求]cm支持failover时关闭原始主(触发器适配) 【实现内容】: 民生需求中,需要在failover发生时关闭原始主机机器。在该需求的实现中需要拿到静态db主的instance_id,并将该id传给对应的脚本以生成管控平台的请求实现关闭原始主机。 在该需求的实现中利用到了触发器,设置一个failover的触发器,当failover发生时会执行用户设置的脚本。可是为了获取到原始静态主的id,需要执行脚本时将静态主的id传给该脚本。 因此在此pr中,用户配置了failover的触发器时,cm_server会在failover发生时将静态主的id包含在消息里。最终效果是当failover发生时,cm_agent执行用户的脚本时会将静态主的id作为参数传过去,用户可以自定义脚本根据静态主id获取到对应的ip并且关闭该原始主机器,以达到用户的需求。 【根因分析】: 来自于民生需求 【实现方案】: 本pr中, cm_server会在failover发生时将静态主的id包含在消息里。最终效果是当failover发生时,cm_agent执行用户的脚本时会将静态主的id作为参数传过去,用户可以自定义脚本根据静态主id获取到对应的ip并且关闭该原始主机器,以达到用户的需求。如果用户不需要该参数,自定义脚本忽略即可。 【关联需求或issue】: https://gitee.com/opengauss/CM/issues/I8H165?from=project-issue 【开发自验报告】: 测试场景: 1.两节点 cms_enable_failover_on2nodes=true, cms_enable_db_crash_recovery=on, 设置failover触发器并生效。触发器脚本内容为(当failover发生时会将静态主的id打印在out.txt,方便进行测试) #!/bin/bash id="$1" if [ -z "$id" ]; then echo "Error: No id provided." exit 1 fi echo "$id" >> /data/test2/mogdb/out.txt date +"%Y-%m-%d %H:%M:%S" >> /data/test2/mogdb/out.txt 1.1 start/stop 1.1.1 初始时为集群为关闭状态,执行cm_ctl start 预期:out.txt打印了节点1的id 6001 实际:out.txt打印了节点1的id 6001符合预期 1.1.2 初始状态:cm主在节点1上,db主在节点2上 执行操作:cm_ctl stop -n 2 预期:节点1会发生failover,在节点1的out.txt会打印静态主id 6002 实际:节点1的out.txt打印了id 6002 1.1.3 初始状态:集群一切正常,cm主在节点1上,db主在节点2上 执行操作:cm_ctl stop 预期:未发生failover,不打印 实际:节点1与节点2的out.txt均未打印id 1.2 switchover 1.2.1 初始状态:集群一切正常,cm主在节点1,db主在节点1 执行操作:cm_ctl switchover -n 2 -D \\$PGDATA 预期: 未发生failover,不打印 实际:节点1与节点2的out.txt均未打印id 1.2.2 初始状态:集群一切正常,cm主在节点1,db主在节点2 执行操作:cm_ctl switchover -n 1 -D \\$PGDATA 预期: 未发生failover,不打印 实际:节点1与节点2的out.txt均未打印id 1.3 网络隔离 1.3.1 初始状态:集群一切正常,cm主在节点1,db主在节点1 执行操作:iptables -I OUTPUT -d iP2 -j DROP; iptables -I INPUT -s ip2-j DROP; 隔离节点1与节点2的网络 预期:节点1与节点2,cm均会升主, db也均会升主。 节点2db发生了failover, 节点2会打印静态主id 6001 实际:节点2会打印静态主id 6001 1.3.2 初始状态:集群一切正常,cm主在节点1,db主在节点2 执行操作:iptables -I OUTPUT -d iP2 -j DROP; iptables -I INPUT -s ip2-j DROP; 隔离节点1与节点2的网络 预期:节点1与节点2,cm均会升主, db也均会升主。 节点1db发生了failover, 节点1会打印静态主id 6002 实际:节点1会打印静态主id 6002 1.4 kill -9 db主 1.4.1 初始状态:集群一切正常,cm主在节点1,db在节点1 执行操作:在节点1上ps -ef找到节点1opengauss进程,并执行kill- 9 预期:需要根据实际结果观察最终在那个节点发生了failover 实际:会在发生failover的节点上打印静态主的id 1.4.2 初始状态:集群一切正常,cm主在节点1,db在节点2 执行操作:在节点2上ps -ef找到节点1opengauss进程,并执行kill- 9 预期:需要根据实际结果观察最终在那个节点发生了failover 实际:会在发生failover的节点上打印静态主的id 1.5磁盘故障 1.5.1 初始状态:集群一切正常,cm主在节点1,db在节点1 执行操作:在节点1上更改$PGDATA的访问权限,使得数据库系统用户无法访问该文件夹 预期:节点1db会发生磁盘故障,显示磁盘故障,节点2会failover 实际:节点2会打印静态主id 6001 2. 三节点 设置failover触发器并生效。触发器脚本内容为(当failover发生时会将静态主的id打印在out.txt,方便进行测试) #!/bin/bash id="$1" if [ -z "$id" ]; then echo "Error: No id provided." exit 1 fi echo "$id" >> /data/test2/mogdb/out.txt date +"%Y-%m-%d %H:%M:%S" >> /data/test2/mogdb/out.txt 2.1 start/stop 2.1.1 初始时为集群为关闭状态,执行cm_ctl start 预期:db主会打印之前的静态主id 实际:db主会打印之前的静态主id 2.1.2 初始状态:cm主在节点1上,db主在节点2上 执行操作:cm_ctl stop -n 2 预期:会发生failover 实际:升为db主的节点的out.txt打印了静态主id 6002 2.1.3 初始状态:集群一切正常,cm主在节点1上,db主在节点2上 执行操作:cm_ctl stop 预期:未发生failover,不打印 实际:节点1与节点2、节点3的out.txt均未打印id 2.2 Switchover 2.2.1 初始状态:集群一切正常,cm主在节点1,db主在节点1 执行操作:cm_ctl switchover -n 2 -D \\$PGDATA 预期: 未发生failover,不打印 实际:所有节点的out.txt均未打印id 2.2.2 初始状态:集群一切正常,cm主在节点1,db主在节点2 执行操作:cm_ctl switchover -n 1 -D \\$PGDATA 预期: 未发生failover,不打印 实际:所有节点的out.txt均未打印id 2.3 网络隔离 2.3.1 初始状态:集群一切正常,cm主在节点1,db主在节点1 执行操作:iptables -I OUTPUT -d iP2 -j DROP; iptables -I INPUT -s ip2-j DROP; iptables -I OUTPUT -d iP3 -j DROP; iptables -I INPUT -s ip3-j DROP; 隔离节点1与节点2和节点3的网络。 预期:节点1进入少数派,降备。节点2与节点3的一个db会发生failover 实际:db升主的节点会打印静态主id 6001 2.4 kill -9 db主 2.4.1 初始状态:集群一切正常,cm主在节点1,db在节点1 执行操作:在节点1上ps -ef找到节点1opengauss进程,并执行kill- 9 预期:需要根据实际结果观察最终在那个节点发生了failover 实际:会在发生failover的节点上打印静态主的id 2.5 磁盘故障 2.5.1 初始状态:集群一切正常,cm主在节点1,db在节点1 执行操作:在节点1上更改$PGDATA的访问权限,使得数据库系统用户无法访问该文件夹 预期:节点1db会发生磁盘故障,显示磁盘故障,节点2或节点3会failover 实际:会在发生failover的节点上打印静态主的id 6001 【其他说明】:
此 Pull Request 需要通过一些审核项
类型
指派人员
状态
审查
opengauss-bot
已完成
(0/0人)
测试
opengauss-bot
已完成
(0/0人)
怎样手动合并此 Pull Request
git checkout master
git pull https://gitee.com/zhu--chen/CM.git newmaster
git push origin master
评论
16
提交
1
文件
7
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
yz
yz_db
dengyong
dengyong2
wangwei5
wangwei5
zjxqxf
zjxqxf
胡习林
hu-xilin
wanghuanzhuo
wanghuanzhuo
熊小军
xiong_xjun
周斌
justbk
胡正超
gentle_hu
杨皓
yanghaos
alfredwang
alfredwang82
peibaoyi
peibaoyi
陈栋
chendong76
zhulixia
zhulixia
cchen676
struggle_hw
yangwei
yangwei129
yewk
yewk
黄堰蛟
huang-yanjiao
songlinxuan
muyulinzhong
Carl
chen-zhikai-999
薛蒙恩
xue_meng_en
周聪
congzhou2603
opengauss-bot
opengauss-bot
未设置
最少人数
0
测试
yz
yz_db
dengyong
dengyong2
wangwei5
wangwei5
zjxqxf
zjxqxf
胡习林
hu-xilin
wanghuanzhuo
wanghuanzhuo
熊小军
xiong_xjun
周斌
justbk
胡正超
gentle_hu
杨皓
yanghaos
alfredwang
alfredwang82
peibaoyi
peibaoyi
陈栋
chendong76
zhulixia
zhulixia
cchen676
struggle_hw
yangwei
yangwei129
yewk
yewk
黄堰蛟
huang-yanjiao
songlinxuan
muyulinzhong
Carl
chen-zhikai-999
薛蒙恩
xue_meng_en
周聪
congzhou2603
opengauss-bot
opengauss-bot
未设置
最少人数
0
优先级
不指定
严重
主要
次要
不重要
标签
approved
opengauss-cla/yes
ci-pipeline-success
lgtm-chendong76
lgtm-yz_db
sig/cm
codecheck-success
关联 Issue
I8H165
opengauss CM相关需求【M】
里程碑
未关联里程碑
参与者
(6)
1
https://gitee.com/opengauss/CM.git
git@gitee.com:opengauss/CM.git
opengauss
CM
CM
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册