简介
为了满足数据库集群服务实例的高可用状态决策和故障自动切换,openGauss3.0引入CM(Cluster Manager)集群管理组件,其主要功能如下:
- 数据库实例主备角色仲裁
- CM自身高可用仲裁
- 数据库实例运行状态监控及节点资源检测
- 数据库集群、实例的启动、停止,状态查询、状态更新
- 数据库集群、实例自动switchover、failover
CM集群管理组网
以一主三备为例:
CM集群管理模块简介
CM集群管理分为om_monitor,cm_ctl,cm_server,cm_agent四大模块,依赖DCF,DCC两大模块实现自研高可用仲裁。
CM集群管理模块之om_monitor
om_monitor进程由Linux crontab定时任务管控,其功能如下:
- 监测om_monitor进程自身的运行状态:一旦发现其状态为T则强制kill,待定时任务拉起,监测时间间隔1min(这会导致OMM恢复时间1-60s不等);
- 读取配置文件并监控进程打开的文件描述符数量;
- 启动cm_agent进程并监测其运行状态:监测时间间隔1s;
CM集群管理模块之cm_server
- cm_server进程由cm_agent进程管控,其功能如下:
- cm_ctl 指令响应及监控
- cm_agent 上报消息处理
- cm_server实例角色自仲裁
- db实例角色仲裁
- DCC模块初始化,对DCC特定Key的读写操作
CM集群管理模块之cm_agent
cm_agent进程由om_monitor进程管控,其功能如下:
- 注册消息接口,接收cm_server指令,调用响应接口执行指令
- 管控cm_server进程和db进程
启动/停止:共享一个线程,每隔一秒监测进程是否需要启动/停止。且在启动进程之前会检测磁盘是否损坏、磁盘使用率是否达到预设的阈值、文件系统是否可写、网卡是否启动。
查询:独立线程,每隔一秒查询一次实例状态并上报给cm_server - 进程僵死检测
监控进程的T/D/Z状态,判定是否僵死(超过一定次数则强制kill)
T状态处理逻辑:5轮*36s=180s(实际测试大概150s)
再次处理僵死依赖参数–instance_phony_dead_restart_interval
追求极致RTO–enable_e2e_rto=on,立马进行僵死处理 - 故障检测
网卡故障检测 - build
incremental_build 默认就是增量build,三次失败之后才会全量build
高可用仲裁之db仲裁(Quorum模式)
-
前提条件
多数派:集群内可参与选主的备机实例数量超过集群节点个数的一半 -
细分策略
(1) cma会尝试拉起db服务,若6s内成功拉起则无需新一轮的仲裁
(2) local_term最大的
(3) local_last_xlog_location最大的
(4) 静态主local_static_role(即上一轮的主)
(5) 与静态主同AZ的节点
(6) AZ priority值最小
(7) Instance ID最小
脑裂故障处理
- 前提条件
cm_server primarv存在 - 场景
- 网络隔离
(1) cms
若原cms主被隔离到少数派分区,因无法达成多数派一致,日志无法提交,一定时间内将会降备;
若某一个分区内无cms主且满足多数派,则会触发选主流程;
(2) db
Quorum仲裁:若某一个分区中存在数据库主实例,cma也被隔离,无法上报该实例信息,此时CM无法感知主实例,触发选主流程。当网络隔离消失后,db将出现双主,此时cms会杀掉原主实例,确保数据库主实例的唯一性。
DCF仲裁:参考cms仲裁 - 人为制造脑裂
集群正常状态下,强制将备库failover为主库。CM会将两个数据库主实例都ki1l掉,然后进行重新选主,此时主有可能不是原来的两个主。
常用命令
- 集群状态查询
cm_ctl query -vCi -z ALL
- switchover(可在任意节点执行)
cm_ctl switchover -n <nodeid> -D <datadir>
- 单个节点停止(不可使用gs_ctl stop)
cm_ctl stop -n <nodeid>
- 修改参数
cm_ctl set --param --server -k datastorage_threshold_value_check=95
- reload 参数
cm_ctl reload --param --server
- 查看参数是否生效
cm_ctl list --param --server|grep datastorage_threshold_value_check
CM日志
重点关注图片标黄的日志(CMS日志只需看CMS主上的日志)
CM数据目录
目录位置在集群安装时配置
cm_agent.conf和cm_server.conf存放cm_agent和cm_server的参数
.pid文件存放对应的进程号
CM测试用例
主要进行了如下测试:
CM测试总结
针对测试结果,作出以下总结,仅供参考
(本次测试均使用CM参数默认值,数据库关闭最大可用模式)
最后修改时间:2022-08-16 17:10:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。