DMCSS 介绍

DMCSS(Dameng Cluster Synchronization Services)达梦集群同步服务,使用 DMASM 集群或 DMDSC 集群都必须要配置 DMCSS 服务。在 DMASM 集群或 DMDSC 集群中,每个节点都需要配置一个 DMCSS 服务。这些 DMCSS 服务自身也构成一个集群,DMCSS 集群中负责监控、管理整个 DMASM 集群和 DMDSC 集群的节点称为控制节点(control node),其他 DMCSS 节点称为普通节点(normal node)。DMCSS 普通节点不参与 DMASM 集群和 DMDSC 集群管理,当 DMCSS 控制节点故障时,会从活动的普通节点中重新选取一个 DMCSS 控制节点。

DMCSS 工作的基本原理是:在 Voting disk 中,为每个被监控对象(dmasmsvr、dmserver、DMCSS)分配一片独立的存储区域,被监控对象定时向 Voting Disk 写入信息(包括时间戳、状态、命令、以及命令执行结果等);DMCSS 控制节点定时从 Voting Disk 读取信息,检查被监控对象的状态变化,启动相应的处理流程;被监控对象只会被动的接收 DMCSS 控制节点命令,执行并响应。

DMCSS 主要功能包括:写入心跳信息、选举 DMCSS 控制节点、选取 DMASM/DMDSC 控制节点、管理被监控对象的启动流程、集群状态监控、节点故障处理、节点重加入等,DMCSS 还可以接收并执行 DMCSSM 指令。

5.1 启动命令

./dmcss HELP
格式: dmcss.exe KEYWORD=value
例如: dmcss.exe DCR_INI=/home/data/DAMENG/dmdcr.ini
关键字说明(默认)
----------------------------------------------------------------
DCR_INI      dmdcr.ini路径
-NOCONSOLE   以服务方式启动
HELP         打印帮助信息

在 DM 透明分布式数据库中,因为 dcr/vtd 都是存放在 DRS 上,因此使用 DMCSS.exe 时,除了 DCR_INI 参数之外,还要选上 DFS_INI 参数。DFS_INI 用于指定保存了 DRS 连接信息的 dmdfs.ini。DFS_INI 参数本书不做详细的介绍,具体的使用情况请参考《DM8 透明分布式数据库》。

5.2 心跳信息

DMCSS 实例启动后,每间隔 1 秒向 Voting Disk 指定区域写入心跳信息(包括自身的状态、时间戳等),表示 DMCSS 节点处于活动状态。

5.3 选举 DMCSS 控制节点

DMCSS 启动后向 Voting Disk 写入信息,并读取其他 DMCSS 节点的信息,如果 DMCSS 集群中还没有活动的控制节点,则选举 DMCSS 控制节点。DMCSS 选举的原则有两条:

  1. 先启动的 DMCSS 作为控制节点。
  2. 如果 DMCSS 同时启动,那么则选择节点号小的节点为控制节点。
  3. 如果 DMCSS 控制节点挂掉,那么会将先向 Voting Disk 写入心跳信息的节点设置为控制节点;若同时有多个节点先向 Voting Disk 写入心跳信息,那么选择节点号小的节点为控制节点。

5.4 选取监控对象控制节点

DMCSS 控制节点启动后,会为基于 DMASM/裸设备的 DMDSC 集群指定控制节点。DMCSS 选取监控对象控制节点的原则有两条:

  1. 只有一个活动节点,则设置活动节点为控制节点。
  2. 存在多个活动节点,则选择节点号小的节点为控制节点。

5.5 启动流程管理

DMASM 和 DMDSC 集群中的实例启动后,一直处于 waiting 状态,等待 DMCSS 的启动命令。DMCSS 控制节点在选取监控对象控制节点后,通知控制节点启动,在控制节点启动完成后,再依次通知其他普通节点启动。

5.6 状态检测

DMCSS 维护集群状态,随着节点活动信息的变化,集群状态也会产生变化,DMCSS 控制节点会通知被监控节点执行不同命令,来控制节点启动、故障处理、故障重加入等操作。

DMCSS 控制节点每秒从 Voting Disk 读取被监控对象的心跳信息。一旦被监控对象的时间戳在 DCR_GRP_DSKCHK_CNT 秒内没有变化,则认为被监控对象出现异常。

DMCSS 普通节点定时读取 DMCSS 控制节点的心跳信息,监控 DMCSS 运行状态。

5.7 故障处理

DMCSS 控制节点检测到实例故障后,首先向故障实例的 Voting disk 区域写入 Kill 命令(所有实例一旦发现 Kill 命令,无条件自杀),避免故障实例仍然处于活动状态,引发脑裂,然后启动故障处理流程,不同类型实例的故障处理流程存在一些差异。

  • DMCSS 控制节点故障处理流程
  1. 活动节点重新选举 DMCSS 控制节点
  2. 新的 DMCSS 控制节点通知出现 DMCSS 故障节点对应的 dmasmsvr、dmserver 强制退出
  • DMASMSVR 实例故障处理流程
  1. 挂起工作线程
  2. 更新 DCR 的节点故障节点信息
  3. 通知故障节点对应 dmserver 强制退出
  4. dmasmsvr 进行故障恢复
  5. 恢复工作线程
  • dmserver 实例故障处理流程
  1. 更新 DCR 故障节点信息
  2. 重新选取一个控制节点
  3. 通知 dmserver 控制节点启动故障处理流程(参考 DMDSC 故障处理)
  4. 等待 dmserver 故障处理结束

5.8 节点重加入

如果检测到故障节点恢复,DMCSS 会通知控制节点启动节点重加入流程。

  • 数据库实例重加入
  1. 挂起工作线程
  2. 修改节点的状态
  3. 执行恢复操作
  4. 重新进入 STARTUP 状态,准备启动
  5. OPEN 重加入的节点
  6. 重启工作线程
  7. 执行 OPEN 数据库实例的操作
  • DMASM 实例重加入
  1. 挂起工作线程
  2. 修改节点的状态
  3. 执行恢复操作
  4. 重新进入 STARTUP 状态,准备启动
  5. OPEN 重加入的节点
  6. 重启工作线程

5.9 集群指令

DMCSS 控制节点通过一系列的集群指令,控制被监控对象的启动、故障处理、状态切换等。DMCSS 控制节点向目标对象的 Voting disk 指令区写入命令,通知目标对象执行相应命令,并等待执行响应。每条指令的功能都比较单一,比如修改状态、设置控制节点、执行一条 SQL 等,复杂的集群流程控制就是由这些简单的指令组合起来完成的。

5.10 状态查看

在 DMCSS 控制台输入 show 命令可以看到所监控的集群状态,如下所示。

group[]行显示的内容为:

name: 集群名称

seq: 集群编号

type: 集群类型[CSS/ASM/DB]

ep 行显示的内容为:

inst_name: 节点实例名

seqno: 节点编号

port: 实例对外提供服务的端口号

mode: 模式[控制/普通]

sys_status: 实例系统状态[MOUNT/OPEN 等]

vtd_status: 实例的集群状态[WORKING/SHUTDOWN/SYSHALT 等]

is_ok: 实例在集群内是否正常,ERROR 的节点暂时从集群内剔除

active: 实例是否活动

guid: 实例的 guid 值

ts: 实例的时间戳

======= group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 0] ===================  
ep:     inst_name  seqno  port  mode         inst_status    vtd_status    is_ok     active    guid           ts  
        CSS1       0      8060  Control Node   OPEN         WORKING       OK        TRUE      670744319      670748263     
        CSS2       1      8061  Normal Node    OPEN         WORKING       OK        TRUE      670744832      670748770     
        CSS3       2      8062  Normal Node    OPEN         WORKING       OK        TRUE      670745332      670749266     

self css info:  
[ASM1] auto restart = FALSE  
[RAC1] auto restart = FALSE  

======= group[name = GRP_ASM, seq = 1, type = ASM, Control Node = 0] ===================  
ep:     inst_name  seqno  port  mode         inst_status    vtd_status    is_ok     active    guid           ts  
        ASM1       0      8063  Control Node  OPEN          WORKING       OK        TRUE      670746265      670750197     
        ASM2       1      8064  Normal Node   OPEN          WORKING       OK        TRUE      670746960      670750891     
        ASM3       2      8065  Normal Node   OPEN          WORKING       OK        TRUE      670747502      670751432     
===================================================================================  

n_ok_ep = 3  
(0, 0)  
(1, 1)  
(2, 2)  
sta = OPEN, sub_sta = STARTUP  
break ep = NULL  
recover ep = NULL  
crash process over flag is TRUE

5.11 控制节点和普通节点显示信息差异

DMCSS 控制节点会显示 DMCSS、DMASM、DMDSC 三个集群的信息,而普通节点只会显示 DMCSS 集群的信息。

微信扫码
分享文档
扫一扫
联系客服