暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

MogDB/openGauss3.0.0新特性之CM

原创 Seven 云和恩墨 2022-08-16
1958

简介

为了满足数据库集群服务实例的高可用状态决策和故障自动切换,openGauss3.0引入CM(Cluster Manager)集群管理组件,其主要功能如下:

  • 数据库实例主备角色仲裁
  • CM自身高可用仲裁
  • 数据库实例运行状态监控及节点资源检测
  • 数据库集群、实例的启动、停止,状态查询、状态更新
  • 数据库集群、实例自动switchover、failover

CM集群管理组网

以一主三备为例:
image.png

CM集群管理模块简介

CM集群管理分为om_monitor,cm_ctl,cm_server,cm_agent四大模块,依赖DCF,DCC两大模块实现自研高可用仲裁。
image.png

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最小
    image.png

脑裂故障处理

  • 前提条件
    cm_server primarv存在
  • 场景
  1. 网络隔离
    (1) cms
    若原cms主被隔离到少数派分区,因无法达成多数派一致,日志无法提交,一定时间内将会降备;
    若某一个分区内无cms主且满足多数派,则会触发选主流程;
    (2) db
    Quorum仲裁:若某一个分区中存在数据库主实例,cma也被隔离,无法上报该实例信息,此时CM无法感知主实例,触发选主流程。当网络隔离消失后,db将出现双主,此时cms会杀掉原主实例,确保数据库主实例的唯一性。
    DCF仲裁:参考cms仲裁
  2. 人为制造脑裂
    集群正常状态下,强制将备库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主上的日志)

image.png

CM数据目录

目录位置在集群安装时配置
cm_agent.conf和cm_server.conf存放cm_agent和cm_server的参数
.pid文件存放对应的进程号
image.png

CM测试用例

主要进行了如下测试:
image.png

CM测试总结

针对测试结果,作出以下总结,仅供参考
(本次测试均使用CM参数默认值,数据库关闭最大可用模式)

image.png

最后修改时间:2022-08-16 17:10:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论