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-ins...
DM8 dminit 使用手冊:https://eco.dameng.com/document/dm/zh-cn/pm/dminit-parameters...
DM8 Linux 腳本使用手冊:https://eco.dameng.com/document/dm/zh-cn/pm/dm8_linux-script-...
DM8 數據守護與讀寫分離集羣:https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-append...