
# CM
#### 简介
CM（Cluster Manager）是一款数据库资源管理与监控组件，提供高可用、自动化的实例管理和故障恢复能力，保障集群的稳定运行。
GaussDB提供了cm_ctl工具用来控制集群服务。
**核心组件**
- **CMS（cm_server）**
  - 是用来进行集群管理和实例仲裁的组件。
  
  - 功能：
    - 接收各个节点上CMA发送的集群各实例状态。
    
    - 监控实例的状态变化并进行仲裁命令的下发。
    
    - 提供集群整体状态查询接口。
     
  
  - 高可用特性：支持主备或一主多备配置，当主CMS出现故障时自动切换到备CMS接管业务继续执行。
   

- **CMA（cm_agent）**
  - 是部署在集群每个主机上，用来启停和监控各个数据库实例进程的集群管理组件。
  
  - 功能：
    - 启停本机数据库实例。
    
    - 监控实例状态并上报给CMS。
    
    - 执行CMS下发的仲裁命令。
     
   
- **OMM（om_monitor）**
  - 看护cm_agent的定时任务组件。
  
  - 功能：
    - 看护cm_agent进程，定时检查其运行状态。
    
    - 在cm_agent进程停止时自动重启，确保监控不中断。
     
   
- **DDB（distribute database）**
  - 用于CMS自仲裁选主和持久化存储仲裁数据的管理服务组件。
  
  - CMS可以选择使用ETCD或DCC。
    - ETCD：高度一致的分布式键值存储组件。
    
    - DCC：分布式配置中心组件，基于DCF（Distributed Consensus Framework）实现，DCF采用Paxos协议来保证高可用与一致性。
     
   
**作用**
- **统一管理**
  提供集群、节点、实例的统一启停、查询、切换功能，提升管理效率。
  
- **实时监控**
  多维度监控节点、实例、网络通信、文件系统等资源的运行状态，有问题可及时发现。
  
- **灵活扩展**
  支持自定义资源监控和故障检测规则，适应不同业务场景。
  
- **自动化运维**
  提供故障自动主备切换等能力，降低人工运维负担。
  
- **高可用性** **保障**
  主备cm_server架构，自动故障接管，避免单点故障，提升系统可用性。
  
 
#### 示例
- 查询集群状态。
  ```
  cm_ctl query -Cvd
  [  CMServer State   ]
  node               instance                                            state
  ------------------------------------------------------------------------------
  1  kwephis32851484 1    /var/standard/usr/local/cm/cm_server/cm_server Primary
  [   Cluster State   ]
  cluster_state   : Normal
  redistributing  : No
  balanced        : Yes
  current_az      : AZ_ALL
  [ Coordinator State ]
  node               instance                        state
  ----------------------------------------------------------
  1  kwephis32851484 5001 /var/standard/usr/local/cn Normal
  [ Central Coordinator State ]
  node               instance                        state
  ----------------------------------------------------------
  1  kwephis32851484 5001 /var/standard/usr/local/cn Normal
  [     GTM State     ]
  node               instance                         state
  --------------------------------------------------------------
  1  kwephis32851484 1001 /var/standard/usr/local/gtm P Primary
  [  Datanode State   ]
  node               instance                                               state
  ---------------------------------------------------------------------------------------------
  1  kwephis32851484 6001 /var/standard/var/lib/engine/data1/data/datanode1 P Primary Normal
  1  kwephis32851484 6002 /var/standard/var/lib/engine/data1/data/datanode2 P Primary Normal
  ```
  
- 检测进程运行状态。
  ```
  -- 检测gaussdb进程运行状态，/var/standard/var/lib/engine/data1/data/datanode1为指定实例的数据目录，可以通过cm_ctl query -Cvd查询获得。
  cm_ctl check -B gaussdb -T /var/standard/var/lib/engine/data1/data/datanode1
  -- 执行如下命令，查看上一个命令的返回值，2表示进程存在。
  echo $?
  2
  ```
  
- 设置CM相关参数。
  ```
  -- 设置cm_agent参数log_file_size值为20。
  cm_ctl set --param --agent -k "log_file_size=20"
  cm_ctl: set cm_agent.conf success.
  -- 动态加载cm_agent参数。
  cm_ctl reload --param --agent
  cm_ctl: reload cm_agent.conf success.
  ```
  

- 查询CM相关参数。
  ```
  cm_ctl list --param --agent
  [conf of node(1)]
  log_dir = /var/standard/var/log/Mike/Mike/cm/cm_agent
  log_file_size = 20
  log_min_messages = WARNING
  incremental_build = on
  security_mode = off
  upgrade_from = 0
  alarm_component = /opt/huawei/snas/bin/snas_cm_cmd
  ......
  ```
  
 
#### 另请阅读
《参考》中"日志参考 \> 系统日志"章节
《参考》中"数据库运行参数说明 \> CM参数说明"章节
