ICollection

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

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地址连接。
image
  如果应用需要连接集群,在集群切换主备服务时无需修改连接,则需要先配置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)。
  配置好这个文件后,应用就可以通过集群名称连接数据库集群了。
image

9.2 集群同步测试

  集群启动后,在主库中创建用户、模式、表后,查看从库可以看到用户、模式、表已经存在。
  直接连接主库,在表中插入一条记录,但不提交。直接连接主库,查询这个表,看不到新插入的记录。主库提交事务后,从库才能查到这条记录。
image
image
image
image
image
  直接连接从库,向从库中插入一条记录,插入失败,报710错误。
image
  连接集群,向集群中插入一条记录,可以正常插入。
image

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

posted on 2025-09-28 14:49  ICollection  阅读(47)  评论(0)    收藏  举报