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

MogDB V3.0 CM集群管理概述

原创 吴荣政 云和恩墨 2022-09-29
3863

1 客户价值与功能

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

•数据库实例主备角色仲裁

•CM自身高可用仲裁

•数据库实例运行状态监控

•数据库实例所在节点资源检测

•数据库集群、节点、实例的启动、停止

•数据库集群状态查询、状态更新

数据库集群数据库实例switchover、failover

2 CM 集群管理组网

cm_server是整个集群管理的核心模块,负责集群中各mogdb实例状态的检测,以及对每一组mogdb服务主备高可用角色的仲裁。基于此,一旦mogdb主实例故障,cm_server将触发故障切换机制使得备实例升主,确保集群的可用性。

3 CM 集群管理模块简介

CM集群管理分为om_monitor, cm_ctl, cm_server, cm_agent四大模块,依赖DCF, DCC两大模块实现自研高可用仲裁。其中cm_server服务无需在每个节点进行部署,可以依据需求多个节点共用一个,但需要确保自身高可用。

3.1 CM 集群管理模块之om_monitor

om_monitor进程由Linux crontab定时任务管控,其功能如下:

(1) 监测om_monitor进程自身的运行状态:一旦发现其状体为T则强制kill,待定时任务拉起;

(2) 读取配置文件并监控进程打开的文件描述符数量;

(3) 启动cm_agent进程并监测其运行状态: 监测时间间隔1s;

(4) 监测ETCD进程运行状态(未使用);

3.2 CM 集群管理模块之cm_server

cm_server进程由cm_agent进程管控,其功能如下:

•主线程

注册消息接口,接收客户端口的连接及请求:cm_ctl, cm_agent, other clients

初始化DCC模块,并实现对DCC特定Key的读写操作

•线程池

响应cm_ctl连接请求

响应cm_agent连接请求,接收上报消息,执行数据库实例仲裁

•监控线程

switchover/failover/cluster start/cluster init是否超时,监控数据库实例状态

•HA线程

生命周期同cm_server,与DCC交互,实现cm_server的高可用仲裁

3.3 CM 集群管理模块之cm_agent

cm_agent进程由om_monitor进程管控,其功能如下:

•注册消息接口,接收cm_server指令,调用响应接口执行指令

•管控cm_server进程和mogdb进程

启动/停止:共享一个线程,每隔一秒监测进程是否需要启动/停止。且在启动进程之前会检测磁盘是否损坏、磁盘使用率是否达到预设的阈值、文件系统是否可写、 网卡是否启动。

查询:独立线程,每隔一秒查询一次实例状态并上报给cm_server

•进程僵死检测

监控进程的T/D/Z状态,判定是否僵死(超过一定次数则强制kill)

•故障检测

网卡故障检测

高可用仲裁之cm_server自仲裁

•基本原理

cm_server自仲裁由独立HA线程基于DCF实现,涉及两个主要配置文件:静态配置文件clusterconfig.xml、动态配置文件custer_dynamic_configfile。

•自仲裁场景

(1) cm_server重启

cm_server每次重启均会判定升主模式、启动模式和仲裁模式。同时会基于DCF的判定(g_ddbRole)和前一次角色(g_HA_status->local_role)来断定当前角色,进一步实施升主或者降备。

(2) cm_server终止

异常场景导致原始cm_server primary停止服务(此时cm_server集群无主),DCF将基于心跳超时机制触发选主流程,最终dcf_leader所在节点上的cm_server将被提升为新主。
image.png

4 高可用仲裁之mogdb仲裁(Quorum模式)

•前提条件

集群内可参与选主的备机实例数量超过集群节点个数的一半

•细分策略

需要注意的是,当一个mogdb实例被仲裁之前,cma会尝试拉起mogdb实例(超时时间默认6s)

5 脑裂故障处理

•前提条件

cm_server primary必须存在,仅有其能够执行mogdb选主操作(mogdb经由cma上报状态时)。

•场景

1.网络隔离

(1) CM集群

        拥有原始主实例的分区,若满足多数派则该分区中CM子集群正常运行;若不满足多数派则会主动降备。不存在主实例的分区,若满足多数派则会触发选主流

        程,确保该分区中CM子集群可用性。

        一旦网络分区故障消失,CM集群将基于DCF实现多主决策完成CM集群脑裂故障恢复,最终使得CM集群恢复正常。

(2) mogdb

        Quorum仲裁:

           仅存在CM集群主实例的分区内才会执行数据库集群实例的主备角色仲裁,无CM集群主实例的分区内的所有数据库集群实例均会降备。

           一旦网络分区故障消失,CM集群主实例将基于数据库集群实例的term执行多主决策。若term能区分大小则重启term小的数据库主实例,若term相等则重

          启所有数据库主实例,进入新一轮的仲裁流程(参照“数据库集群高可用仲裁”)。

        DCF仲裁:

           参考CM集群高可用自仲裁

2.人为制造脑裂

集群正常状态下,人工强制将一个备升级为主导致的脑裂场景。CM会将两个数据库主实例都kill掉,然后触发新的选主流程。

7 常用命令

•集群级别

   启动:cm_ctl start

   停止:cm_ctl stop

   查询: cm_ctl query -Cvip -z ALL

   参数设置:cm_ctl set --param --agent|--server [-n <nodeid>] -k <PARAMETER>=“<value>”

   参数更新:cm_ctl reload --param --agent|--server

•节点级别

   启动:cm_ctl start -n <nodeid>

   停止:cm_ctl stop -n <nodeid>

•数据库实例级别

   启动:cm_ctl start -n <nodeid> -D <datapath>

   停止:cm_ctl stop -n <nodeid> -D <datapath>

   运维切换:cm_ctl switchover –n <nodeid> -D <datapath>

7 已知限制

•不支持VIP

•两节点部署时,集群仅支持启动、停止,一旦故障则不再具备高可用能力

•DCF仲裁模式下不支持AZ相关的switchover

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

评论