达梦数据库(DM)在高可用架构中引入了“数据守护系统”以保障主备库的协同运行与故障切换能力。监视器作为数据守护的核心组件,主要负责实时监控数据库运行状态,并在发生故障时自动接管或切换主备,确保数据库服务不中断。本文将简单介绍数据守护系统中的三类监视器:人工监视器、单节点确认监视器,以及具备分布式选举能力的多实例确认监视器,了解它们在高可用架构中的实际作用和部署要点。
集群部署部分请参考:
https://mp.weixin.qq.com/s/cCnk2JpqKEbcy0BzakaNww
1. 人工监视器
人工监视器是基于监视器接口实现的一个命令行工具,用于监控数据守护系统的运行情况,可获取主备库状态、守护进程状态及主备库数据同步情况等信息。同时提供一系列命令来管理数据守护系统,如启动、停止守护进程的监控功能,执行主备库切换、备库故障接管等操作。
1.1. 配置人工监视器参数文件
在仲裁节点/dmdata/DAMENG目录下新建监视器参数文件dmmonitor_manual_GRP1.ini,内容如下:
$ cat dmmonitor_manual_GRP1.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /dm/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 918294
MON_DW_IP = 192.168.3.167:5436
MON_DW_IP = 192.168.3.168:5436
1.2. 启动人工监视器
登录仲裁机,启动监视器服务查看集群状态
/dm/bin/dmmonitor /dmdata/DAMENG/dmmonitor_manual_GRP1.ini
1.3. 查看数据守护集群状态
输入show 查看集群状态,可以监控到所有实例都处于Open 状态,所有守护进程也都处于Open 状态,以下图示信息为正常。
1.4. 查看帮助信息
输入help命令可以查看帮助信息。
1.5. 使用监视器切换主备节点(Switchover)
命令格式:
switchover <组名>.<实例名>
示例:
switchover GRP1.DAMENG02
注意:switchover 是优雅的主备切换(需主备数据一致且状态正常)。
2. 单节点确认监视器
单节点确认监视器在数据守护系统的故障自动切换模式下,起到状态确认和自动接管的作用。它能够自动通知实时备库接管为新的主库,从而实现故障自动切换,确保数据库服务的连续性
2.1. 配置确认监视器参数文件
在仲裁节点/dmdata/DAMENG目录下新建监视器参数文件dmmonitor_GRP1.ini,内容如下:
$ cat dmmonitor_auto_GRP1.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 2048
[GRP1]
MON_INST_OGUID = 918294
MON_DW_IP = 192.168.3.167:5436
MON_DW_IP = 192.168.3.168:5436
2.2. 注册监视器服务
将数据库监视器注册为服务,使用root用户,执行以下命令:
su - root
cd /dm/script/root
./dm_service_installer.sh -t dmmonitor -p GRP1 -monitor_ini /dmdata/DAMENG/dmmonitor_auto_GRP1.ini
启动确认监视器
systemctl start DmMonitorServiceGRP1.service
3. 多实例确认监视器
多实例确认监视器由多个监视器实例组成,通过选举机制(基于RAFT协议)确定一个Leader实例作为确认监视器提供服务,其他实例作为备库存在。当Leader实例出现故障时,系统会从备库中选举新的Leader继续提供服务,从而进一步提高集群的高可用性。由于raft协议特点,需要有超过半数节点(N/2+1)在线,才能进行选举,所以搭建多实例确认监视器时,需要有奇数个节点。
3.1. 环境信息
主机名 | IP 地址 | 角色 |
dmdw01 | 192.168.3.167 | 主库 |
dmdw02 | 192.168.3.168 | 备库 |
dwmon01 | 192.168.3.169 | 多实例确认监视器01 |
dwmon02 | 192.168.3.170 | 多实例确认监视器02 |
dwmon03 | 192.168.3.171 | 多实例确认监视器03 |
3.2. 配置多实例确认监视器参数文件
在3个多实例确认监视器节点中均配置参数文件
一节点配置
# cat dmmonitor_GRP1.ini
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dmdata/DAMENG/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 2048
MON_INST_NUM = 3
MON_NAME = MON1
MON_HB_INTERVAL = 60
MON_BRO_INTERVAL = 100
MON_VOTE_INTERVAL = 100
MON_ID = 1
MON_MID = 45614
[GRP1]
MON_INST_OGUID = 918294
MON_DW_IP = 192.168.3.167:5436
MON_DW_IP = 192.168.3.168:5436
[MON1]
MON_HOST = 192.168.3.169
MON_PORT = 8339
MON_INST_ID = 1
[MON2]
MON_HOST = 192.168.3.170
MON_PORT = 8340
MON_INST_ID = 2
[MON3]
MON_HOST = 192.168.3.171
MON_PORT = 8341
MON_INST_ID = 3
二节点配置中不同的地方
MON_ID = 2
三节点配置中不同的地方
MON_ID = 3
3.3. 初始化联机日志文件
多实例监视器相比于其他的监视器增加了联机日志文件,用于存储多实例监视器节点运行过程中产生或收到的日志包。因此,在使用配置文件启动多实例监视器实例之前,需要先初始化联机日志文件。命令格式如下:
dmmonitor RAFT_FILE_PATH=<file_path> RAFT_FILE_SIZE=<file_size> MON_MAGIC=<mon_magic> MON_NAME=<mon_name>
参数说明:
RAFT_FILE_PATH:监视器联机日志路径,需要与 dmmonitor.ini 中 MON_LOG_PATH 保持一致;
RAFT_FILE_SIZE:监视器联机日志文件大小,取值范围 512~10240,单位 MB;
MON_MAGIC:监视器联机日志文件魔数,参数范围 0~4294967294;
MON_NAME:监视器实例名,需要与 dmmonitor.ini 中 MON_NAME 保持一致。
为防止用户误执行联机日志文件初始化命令,将已有的联机日志文件覆盖掉,在指定路径下已存在相同名称的联机日志文件的情况下,初始化命令会执行失败,并返回-4558 错误码,提示文件已存在。
示例:
在3个多实例节点执行以下命令创建联机日志文件
$ cd /dm/bin
./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON1
./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON2
./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON3
执行过程打印如下:
[dmdba@dwmon01:/home/dmdba]$ cd /dm/bin
[dmdba@dwmon01:/dm/bin]$ ./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON1
dmmonitor init raft file success!
[dmdba@dwmon01:/dm/bin]$ ./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON2
dmmonitor init raft file success!
[dmdba@dwmon01:/dm/bin]$ ./dmmonitor raft_file_path=/dmdata/DAMENG/log raft_file_size=2048 mon_magic=3331 mon_name=MON3
dmmonitor init raft file success!
3.4. 注册监视器服务
将数据库监视器注册为服务,使用root用户,执行以下命令:
su - root
cd /dm/script/root
./dm_service_installer.sh -t dmmonitor -p GRP1 -monitor_ini /dmdata/DAMENG/dmmonitor_GRP1.ini
3.5. 启动确认监视器
systemctl start DmMonitorServiceGRP1.service
3.6. 检查多实例确认监状态
3.7. 参考资料
多实例确认监视器:
https://eco.dameng.com/community/post/20230928140133CZLSAQQBBGAUTRK37D
监视器:
https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-monitor.html