8 启动停止集群
8.1 首次启动集群
使用管理员账户启动主库数据库服务。
kylin@KL1:~$ sudo systemctl start DmServiceDMSERVER1
使用管理员账户启动从库数据库服务。
kylin@KL2:~$ sudo systemctl start DmServiceDMSERVER2
使用dameng账户通过连接主库,设置OGUID值,并主库为primary状态。
dameng@KL1:~$ disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 5.290(ms)
disql V8
SQL> sp_set_para_value(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 13.301(毫秒). 执行号:5801.
SQL> sp_set_oguid(45331);
DMSQL 过程已成功完成
已用时间: 180.011(毫秒). 执行号:5802.
SQL> alter database primary;
操作已执行
已用时间: 110.172(毫秒). 执行号:5803.
SQL> sp_set_para_value(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 13.301(毫秒). 执行号:5804.
使用dameng账户通过连接主库,设置OGUID值,并从库为standby状态。
dameng@KL2:~$ disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 5.290(ms)
disql V8
SQL> sp_set_para_value(1, 'ALTER_MODE_STATUS', 1);
DMSQL 过程已成功完成
已用时间: 13.301(毫秒). 执行号:5901.
SQL> sp_set_oguid(45331);
DMSQL 过程已成功完成
已用时间: 180.011(毫秒). 执行号:5902.
SQL> alter database standby;
操作已执行
已用时间: 110.172(毫秒). 执行号:5903.
SQL> sp_set_para_value(1, 'ALTER_MODE_STATUS', 0);
DMSQL 过程已成功完成
已用时间: 13.301(毫秒). 执行号:5904.
之后使用管理员账户启动主库守护服务、从库守护服务、监视服务。
kylin@KL1:~$ sudo systemctl start DmWatcherServiceWATCHER
kylin@KL2:~$ sudo systemctl start DmWatcherServiceWATCHER
kylin@KL1:~$ sudo systemctl start DmMonitorServiceMONITOR
kylin@KL2:~$ sudo systemctl start DmMonitorServiceMONITOR
kylin@KL3:~$ sudo systemctl start DmMonitorServiceMONITOR
8.2 集群启停顺序
集群启动应遵循:主库数据库服务、备库数据库服务、主库守护服务、备库守护服务、监视服务的顺序。集群停止应遵循:监视服务、备库守护服务、主库守护服务、主库数据库服务、备库数据库服务的顺序。启停顺序不当,可能造成集群主备之间来回切换。
9 集群同步测试
9.1 应用连接集群
应用连接主库或者备库的数据库服务,可以直接通过主机和从机的IP地址连接。

如果应用需要连接集群,在集群切换主备服务时无需修改连接,则需要先配置dm_svc.conf文件。如使用Windows系统,该文件在system32目录下,Linux系统,该文件在/etc目录下。编辑该文件如下:
TIME_ZONE=(480)
LANGUAGE=(CN)
ZBJQ=(192.168.20.101:5236,192.168.20.102:5236)
[ZBJQ]
SWITCH_TIMES=(3)
SWITCH_INTERVAL=(100)
LOGIN_MODE=(1)
这里定义了一个集群名称“ZBJQ”,描述了他的主从服务的地址端口。SWITCH_TIMES=3表示若连接失败,将在主从服务列表依次重试3次,SWITCH_INTERVAL=100表示切换的间隔时间100毫秒,LOGIN_MODE=1表示只连接主库(0:优先连接PRIMARY模式的库,NORMAL模式次之,最后选择STANTBY模式;1:只连接主库;2:只连接备库;3:优先连接STANDBY模式的库,PRIMARY模式次之,最后选择NORMAL模式;4:优先连接NORMAL模式的库,PRIMARY模式次之,最后选择STANDBY模式;默认值是4)。
配置好这个文件后,应用就可以通过集群名称连接数据库集群了。

9.2 集群同步测试
集群启动后,在主库中创建用户、模式、表后,查看从库可以看到用户、模式、表已经存在。
直接连接主库,在表中插入一条记录,但不提交。直接连接主库,查询这个表,看不到新插入的记录。主库提交事务后,从库才能查到这条记录。





直接连接从库,向从库中插入一条记录,插入失败,报710错误。

连接集群,向集群中插入一条记录,可以正常插入。

10 测试主备切换
10.1 手工切换主备
按照集群启动顺序启动主库数据库服务、备库数据库服务、主库守护服务、备库守护服务,但不启动监视服务。以dmmonitor_manual.ini为配置文件使用dameng用户启动主库主机上的监视服务。可以看到此时DMSERVER1是Primary状态,DMSERVER2是Standby状态。
dameng@KL3:~$ dmmonitor /home/dameng/dmdbms/data/DAMENG/dmmonitor_manual.ini
[monitor] 2025-09-12 14:58:04: DMMONITOR[4.0] V8
[monitor] 2025-09-12 14:58:05: DMMONITOR[4.0] IS READY.
[monitor] 2025-09-12 14:58:05:
#---------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DMSERVER2), THE FIRST LINE IS SELF INFO.
DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2025-09-12 14:58:05 FALSE 1202299153 ::ffff:192.168.20.103 DMMONITOR[4.0]
#---------------------------------------------------------------------------------------#
[monitor] 2025-09-12 14:58:05: 收到守护进程(DMSERVER2)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 14:58:05 OPEN OK DMSERVER2 OPEN STANDBY
[monitor] 2025-09-12 14:58:05: 收到守护进程(DMSERVER1)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 14:58:05 OPEN OK DMSERVER1 OPEN PRIMARY
使用login命令登录,dmmonitor不显示输入提示符,但实际上是可以输入命令的。
login
用户名:sysdba
密码:
[monitor] 2025-09-12 15:05:07: 登录监视器成功!
使用switchover GRP1.DMSERVER2指令,将主库切换到DMSERVER2,系统会提示用户确认,输入yes后开始切换。
switchover GRP1.DMSERVER2
此操作需谨慎, 将会导致主库发生切换, 是否继续使用GRP1.DMSERVER2执行SWITCHOVER操作(YES/NO/Y/N)?
yes
[monitor] 2025-09-12 15:06:38: 开始切换实例DMSERVER2
[monitor] 2025-09-12 15:06:38: 通知守护进程DMSERVER1切换SWITCHOVER状态
[monitor] 2025-09-12 15:06:38: 守护进程(DMSERVER1)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2025-09-12 15:06:38: 切换守护进程DMSERVER1为SWITCHOVER状态成功
[monitor] 2025-09-12 15:06:38: 通知守护进程DMSERVER2切换SWITCHOVER状态
[monitor] 2025-09-12 15:06:38: 守护进程(DMSERVER2)状态切换 [OPEN-->SWITCHOVER]
[monitor] 2025-09-12 15:06:38: 切换守护进程DMSERVER2为SWITCHOVER状态成功
…………
中间显示很多提示信息,此处省略。
…………
[monitor] 2025-09-12 15:06:39: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2025-09-12 15:06:39: 清理守护进程(DMSERVER1)请求成功
2025-09-12 15:06:39
#================================================================================#
GROUP OGUID MON_CONFIRM MODE MPP_FLAG
GRP1 45331 FALSE AUTO FALSE
…………
中间显示很多提示信息,此处省略。
…………
#================================================================================#
[monitor] 2025-09-12 15:06:39: 清理守护进程(DMSERVER2)请求成功
[monitor] 2025-09-12 15:06:39: 实例DMSERVER2切换成功
[monitor] 2025-09-12 15:06:42: 守护进程(DMSERVER2)状态切换 [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:06:42 RECOVERY OK DMSERVER2 OPEN PRIMARY
[monitor] 2025-09-12 15:06:45: 守护进程(DMSERVER2)状态切换 [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:06:45 OPEN OK DMSERVER2 OPEN PRIMARY
集群主备切换,再向原来的主库中插入数据,因为主库已经切换为从库,将插入失败。

再向原来的从库中插入数据,因为从库已经切换为主库,可以正常插入。

向集群中插入一条记录,无论是否切换,都可以正常插入。

10.2 自动切换主备
关闭监视服务,修改dmmonitor_manual.ini文件,将MON_DW_CONFIRM设置为1,使用dameng用户启动主库主机上的监视服务。可以看到现在DMSERVER2是主库。
dameng@KL3:~$ dmmonitor /home/dameng/dmdbms/data/DAMENG/dmmonitor_manual.ini
[monitor] 2025-09-12 15:23:49: DMMONITOR[4.0] V8
[monitor] 2025-09-12 15:23:50: DMMONITOR[4.0] IS READY.
[monitor] 2025-09-12 15:23:50:
#--------------------------------------------------------------------------------------#
GET MONITOR CONNECT INFO FROM DMWATCHER(DMSERVER2), THE FIRST LINE IS SELF INFO.
DW_CONN_TIME MON_CONFIRM MID MON_IP MON_VERSION
2025-09-12 15:23:50 TRUE 431611958 ::ffff:192.168.20.103 DMMONITOR[4.0]
#---------------------------------------------------------------------------------------#
[monitor] 2025-09-12 15:23:50: 收到守护进程(DMSERVER2)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:23:50 OPEN OK DMSERVER2 OPEN PRIMARY
[monitor] 2025-09-12 15:23:50: 收到守护进程(DMSERVER1)消息
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:23:50 OPEN OK DMSERVER1 OPEN STANDBY
模拟DMSERVER2所在的服务器掉线,本次模拟采用暂停DMSERVER2所在的服务器的虚拟机的方式实现,该操作相当于拔掉该服务器的网线。此时查看监视进程的窗体,可以看到接收守护进程(DMSERVER2)消息超时后,监视进程已经启动了切换。
[monitor] 2025-09-12 15:28:29: 接收守护进程(DMSERVER2)消息超时
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:28:08 ERROR OK DMSERVER2 OPEN PRIMARY
[monitor] 2025-09-12 15:28:29: 检测到PRIMARY实例故障,开始对组(GRP1)执行自动接管
[monitor] 2025-09-12 15:28:29: 通知组(GRP1)当前活动的守护进程设置MID
[monitor] 2025-09-12 15:28:29: 通知组(GRP1)当前活动的守护进程设置MID成功
[monitor] 2025-09-12 15:28:29: 开始使用实例DMSERVER1接管
[monitor] 2025-09-12 15:28:29: 通知守护进程DMSERVER1切换TAKEOVER状态
…………
中间显示很多提示信息,此处省略。
…………
[monitor] 2025-09-12 15:28:30: 通知守护进程DMSERVER1切换OPEN状态
[monitor] 2025-09-12 15:28:30: 守护进程(DMSERVER1)状态切换 [TAKEOVER-->OPEN]
[monitor] 2025-09-12 15:28:30: 切换守护进程DMSERVER1为OPEN状态成功
[monitor] 2025-09-12 15:28:30: 通知组(GRP1)的守护进程执行清理操作
[monitor] 2025-09-12 15:28:30: 清理守护进程(DMSERVER1)请求成功
[monitor] 2025-09-12 15:28:30: 使用实例DMSERVER1接管成功
[monitor] 2025-09-12 15:28:30: 组(GRP1)使用实例DMSERVER1自动接管成功
此时可以向主库中插入一条数据。将DMSERVER2所在的服务器的虚拟机恢复后,可以看到监视进程已经感知到DMSERVER2上线,并将其置为Standby状态此时在从库中也可以查到刚才插入的数据。
[monitor] 2025-09-12 15:35:27: 实例DMSERVER2[PRIMARY, MOUNT, ISTAT_SAME:TRUE]恢复正常
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:27 STARTUP OK DMSERVER2 MOUNT PRIMARY
[monitor] 2025-09-12 15:35:27: 守护进程(DMSERVER2)状态切换 [STARTUP-->UNIFY EP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:27 UNIFY EP OK DMSERVER2 MOUNT PRIMARY
[monitor] 2025-09-12 15:35:27: 守护进程(DMSERVER2)状态切换 [UNIFY EP-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:27 STARTUP OK DMSERVER2 MOUNT STANDBY
[monitor] 2025-09-12 15:35:27: 守护进程(DMSERVER2)状态切换 [STARTUP-->UNIFY EP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:27 UNIFY EP OK DMSERVER2 MOUNT STANDBY
[monitor] 2025-09-12 15:35:28: 守护进程(DMSERVER2)状态切换 [UNIFY EP-->STARTUP]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:28 STARTUP OK DMSERVER2 OPEN STANDBY
[monitor] 2025-09-12 15:35:28: 守护进程(DMSERVER2)状态切换 [STARTUP-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:28 OPEN OK DMSERVER2 OPEN STANDBY
[monitor] 2025-09-12 15:35:28: 守护进程(DMSERVER1)状态切换 [OPEN-->RECOVERY]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:28 RECOVERY OK DMSERVER1 OPEN PRIMARY
[monitor] 2025-09-12 15:35:31: 守护进程(DMSERVER1)状态切换 [RECOVERY-->OPEN]
WTIME WSTATUS INST_OK INAME ISTATUS IMODE
2025-09-12 15:35:31 OPEN OK DMSERVER1 OPEN PRIMARY
测试自动切换主备,也可以使用管理员账户启动三台服务器上的监视进程服务,然后使用tail -f指令观察监视服务的日志。
dameng@KL1:~$ tail -f /home/dameng/dmdbms/log/dmmonitor_GRP1_MON2_20250912172400.log
11 参考文献
达梦数据库集群介绍:https://eco.dameng.com/document/dm/zh-cn/start/dm-cluster.html
数据库规范化部署:https://eco.dameng.com/document/dm/zh-cn/ops/installation-install.html
DM8 dminit 使用手册:https://eco.dameng.com/document/dm/zh-cn/pm/dminit-parameters.html
DM8 Linux 脚本使用手册:https://eco.dameng.com/document/dm/zh-cn/pm/dm8_linux-script-manual.html
DM8 数据守护与读写分离集群:https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-appendix.html

浙公网安备 33010602011771号