5 配置集羣主機
一般在配置集羣時,先不將數據庫實例註冊為服務,如果已經註冊為服務的,可以使用管理員賬户停止服務,在配置過程中使用數據庫用户直接啓動數據庫實例。注意,在註冊集羣的數據庫實例服務時,會加一個參數-m mount。如果已經註冊了數據庫實例服務,可以使用以下語句卸載。
kylin@KL1:~$ sudo /home/dameng/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDMSERVER1
是否刪除服務(DmServiceDMSERVER1)?(Y/y:是 N/n:否): y
Removed /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER1.service.
刪除服務文件(/usr/lib/systemd/system/DmServiceDMSERVER1.service)完成
刪除服務(DmServiceDMSERVER1)完成
5.1 啓動數據庫服務
使用數據庫用户啓動數據庫實例。第一次啓動時會等候較長的時間,看到“SYSTEM IS READY.”才成功的啓動數據庫實例。
dameng@KL1:~$ dmserver /home/dameng/dmdbms/data/DAMENG/dm.ini
file dm.key not found, use default license!
version info: develop
csek2_vm_t = 1440
nsql_vm_t = 328
…………
中間顯示很多配置信息,此處省略。
…………
trx: 6765 purged 1 pages
trx: 6767 purged 1 pages
systables desc init success.
ndct_db_load_info finished, code:100.
nsvr_process_before_open begin.
nsvr_process_before_open success.
SYSTEM IS READY.
5.2 開啓數據庫歸檔
此時另外開一個終端,使用dameng用户登錄後,用disql連接數據庫服務,修改數據庫實例參數,開啓歸檔。執行以下語句:
alter database mount;將數據庫置於mount狀態。
alter database archivelog;打開歸檔模式。
alter database add archivelog 'dest=/home/dameng/dmdbms/data/DAMENG/arch,type=local,file_size=1024,space_limit=51200';設置歸檔日誌文件,指定歸檔日誌目錄、文件大小、空間限制。
alter database open;將數據庫置於open狀態。
dameng@KL1:~$ disql sysdba/Dameng123
服務器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 5.383(ms)
disql V8
SQL> alter database mount;
操作已執行
已用時間: 21.966(毫秒). 執行號:0.
SQL> alter database archivelog;
操作已執行
已用時間: 93.883(毫秒). 執行號:0.
SQL> alter database add archivelog 'dest=/home/dameng/dmdbms/data/DAMENG/arch,type=local,file_size=1024,space_limit=51200';
操作已執行
已用時間: 84.258(毫秒). 執行號:0.
SQL> alter database open;
操作已執行
已用時間: 126.197(毫秒). 執行號:0.
5.3 備份拷貝數據庫
繼續在disql中備份數據庫。
SQL> backup database backupset '/home/dameng/dmdbms/data/DAMENG/bak/backup';
操作已執行
已用時間: 00:00:06.432. 執行號:66701.
退出disql,使用scp或者其他方式將備份文件複製到從機對應目錄。
SQL> quit
dameng@KL1:~$ scp -r /home/dameng/dmdbms/data/DAMENG/bak/backup dameng@192.168.20.102:/home/dameng/dmdbms/data/DAMENG/bak
dameng@192.168.20.102's password:
backup.meta 100% 114KB 52.4MB/s 00:00
backup.bak 100% 11MB 126.5MB/s 00:00
backup_1.bak 100% 21KB 19.3MB/s 00:00
5.4 修改數據庫參數
繼續在disql中修改數據庫實例參數。其中ALTER_MODE_STATUS=0表示不允許修改數據庫實例狀態,ENABLE_OFFLINE_TS=2表示不允許備庫OFFLINE表空間,MAL_INI=1表示打開MAL系統。
dameng@KL1:~$ disql sysdba/Dameng123
服務器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 5.383(ms)
disql V8
SQL> sp_set_para_value(2,'ALTER_MODE_STATUS',0);
DMSQL 過程已成功完成
已用時間: 6.758(毫秒). 執行號:67101.
SQL> sp_set_para_value(2,'ENABLE_OFFLINE_TS',2);
DMSQL 過程已成功完成
已用時間: 15.009(毫秒). 執行號:67102.
SQL> sp_set_para_value(2,'MAL_INI',1);
DMSQL 過程已成功完成
已用時間: 7.817(毫秒). 執行號:67103.
5.5 關閉數據庫服務
在啓動數據庫服務的終端中,使用Ctrl+C結束數據庫服務進程。如果是用管理員賬號啓動的數據庫服務,則用管理員賬號停止數據庫服務。
^CServer is stopping...
listener closed and all sessions disconnected
adjust undo_retention & wakeup purge thread...full check point starting...
generate force checkpoint, rlog free space[8589848576], used space[77824]
checkpoint begin, used_space[77824], free_space[8589848576]...
checkpoint end, 0 pages flushed, used_space[40960], free_space[8589885440].
full check point end.
shutdown audit subsystem...OK
…………
中間顯示很多提示信息,此處省略。
…………
shutdown huge buffer and memory pools...OK
close lsnr socket
DM Database Server shutdown successfully.
5.6 修改歸檔配置文件
開啓歸檔後,系統會在數據庫目錄下生成歸檔配置文件dmarch.ini,配置該文件如下內容。具體參數可以參考《DM8 數據守護與讀寫分離集羣》的附錄一節。
ARCH_WAIT_APPLY = 0 # 0表示高性能,1表示事務一致。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL # 本地歸檔類型。
ARCH_FILE_SIZE = 1024 # 單個歸檔大小(MB)。
ARCH_SPACE_LIMIT = 51200 # 歸檔文件上限(MB)
ARCH_FLUSH_BUF_SIZE = 2 # 歸檔刷盤緩存大小(MB)。
ARCH_HANG_FLAG = 1 # 磁盤不足時,是否掛起。
ARCH_DEST = /home/dameng/dmdbms/data/DAMENG/arch
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME # 歸檔類型。
ARCH_DEST = DMSERVER2 # 歸檔目標實例名。
如果有多個從機,就配置[ARCHIVE_REALTIME2]、[ARCHIVE_REALTIME3]等等。
5.7 添加鏈路配置文件
DAL(Multi-threaded Architecture Link)系統是主備庫之間的專用通信線路。在數據庫目錄下新建dmmal.ini文件,在裏面配置如下配置項。
MAL_TEMP_PATH = /home/dameng/dmdbms/data/DAMENG/malpath/ # 臨時文件目錄。
MAL_CHECK_INTERVAL = 10 # MAL鏈路檢測時間間隔。
MAL_CONN_FAIL_INTERVAL = 10 # 判定MAL鏈路斷開的時間。
MAL_BUF_SIZE = 512 # 單個MAL緩存大小(MB)。
MAL_SYS_BUF_SIZE = 2048 # MAL總大小限制(MB)。
MAL_COMPRESS_LEVEL = 0 # MAL消息壓縮等級,0表示不壓縮。
[MAL_INST1]
MAL_INST_NAME = DMSERVER1 # 實例名。
MAL_HOST = 192.168.20.101 # MAL系統監聽地址。
MAL_INST_HOST = 192.168.20.101 # 實例對外服務地址。
MAL_INST_PORT = 5236 # 實例對外服務端口。
MAL_PORT = 5336 # MAL系統監聽端口。
MAL_DW_PORT = 5436 # 實例守護進程端口。
MAL_INST_DW_PORT = 5536 # 實例守護請求端口。
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.20.102
MAL_PORT = 5336
MAL_INST_HOST = 192.168.20.102
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
5.8 添加守護配置文件
在數據庫目錄下新建dmwatcher.ini文件,在裏面配置如下配置項。
[GRP1] # 集羣的組名稱。
DW_TYPE = GLOBAL # 全局守護類型。
DW_MODE = AUTO # MANUAL:故障手切,AUTO:故障自切。
DW_ERROR_TIME = 20 # 遠程守護進程故障認定時間。
INST_ERROR_TIME = 20 # 本地實例故障認定時間。
INST_RECOVER_TIME = 60 # 主庫守護進程啓動恢復的間隔時間。
INST_OGUID = 45331 # 守護系統唯一 OGUID 值。
INST_AUTO_RESTART = 1 # 打開實例的自動啓動功能。
RLOG_SEND_THRESHOLD = 0 # 指定主庫發送日誌到備庫的時間閾值,默認關閉。
RLOG_APPLY_THRESHOLD = 0 # 指定備庫重演日誌的時間閾值,默認關閉。
INST_INI = /home/dameng/dmdbms/data/DAMENG/dm.ini # dm.ini文件路徑。
INST_STARTUP_CMD = /home/dameng/dmdbms/bin/dmserver # 命令行方式啓動。
5.9 註冊數據庫服務
使用管理員用户將數據庫、守護程序註冊為服務。
kylin@KL1:~$ sudo /home/dameng/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER1 -dm_ini /home/dameng/dmdbms/data/DAMENG/dm.ini -m mount
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER1.service → /lib/systemd/system/DmServiceDMSERVER1.service.
創建服務(DmServiceDMSERVER1)完成
kylin@KL1:~$ sudo /home/dameng/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /home/dameng/dmdbms/data/DAMENG/dmwatcher.ini
Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWATCHER.service → /lib/systemd/system/DmWatcherServiceWATCHER.service.
創建服務(DmWatcherServiceWATCHER)完成
6 配置集羣從機
6.1 創建數據庫實例
使用dameng賬號創建數據庫實例,實例名需與主庫不同。如果使用圖形界面創建,創建後需停止數據庫實例服務。
dameng@KL2:~$ dminit PATH=/home/dameng/dmdbms/data/ INSTANCE_NAME=DMSERVER2 CHARSET=1 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123
initdb V8
db version: 0x7000d
file dm.key not found, use default license!
License will expire on 2026-04-30
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /home/dameng/dmdbms/data/DAMENG/DAMENG01.log
log file path: /home/dameng/dmdbms/data/DAMENG/DAMENG02.log
write to dir [/home/dameng/dmdbms/data/DAMENG].
create dm database success. 2025-09-10 17:25:02
6.2 恢復數據庫數據
使用dmrman命令從主庫傳來的備份文件中恢復數據庫數據,一共三條指令。第一條restore database。
dameng@KL2:~$ dmrman ctlstmt="restore database '/home/dameng/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dameng/dmdbms/data/DAMENG/bak/backup'"
dmrman V8
restore database '/home/dameng/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dameng/dmdbms/data/DAMENG/bak/backup'
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:11][Remaining:00:00:00]
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:12][Remaining:00:00:00]
restore successfully.
time used: 00:00:12.450
第二條recover database。
dameng@KL2:~$ dmrman ctlstmt="recover database '/home/dameng/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dameng/dmdbms/data/DAMENG/bak/backup'"
dmrman V8
recover database '/home/dameng/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dameng/dmdbms/data/DAMENG/bak/backup'
file dm.key not found, use default license!
[Percent:100.00%][Speed:0.00PKG/s][Cost:00:00:00][Remaining:00:00:00]
recover successfully!
time used: 00:00:03.432
第三條recover database update db_magic。
dameng@KL2:~$ dmrman ctlstmt="recover database '/home/dameng/dmdbms/data/DAMENG/dm.ini' update db_magic"
dmrman V8
recover database '/home/dameng/dmdbms/data/DAMENG/dm.ini' update db_magic
file dm.key not found, use default license!
recover successfully!
time used: 00:00:02.356
6.3 修改實例配置文件
修改數據庫實例目錄下的配置文件dm.ini,設置ALTER_MODE_STATUS=0、ENABLE_OFFLINE_TS=2、MAL_INI=1、ARCH_INI=1。
6.4 添加歸檔配置文件
從集羣主機複製dmarch.ini文件到從機,修改主機實例名如下:
ARCH_WAIT_APPLY = 0 # 0表示高性能,1表示事務一致。
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL # 本地歸檔類型。
ARCH_FILE_SIZE = 1024 # 單個歸檔大小(MB)。
ARCH_SPACE_LIMIT = 51200 # 歸檔文件上限(MB)
ARCH_FLUSH_BUF_SIZE = 2 # 歸檔刷盤緩存大小(MB)。
ARCH_HANG_FLAG = 1 # 磁盤不足時,是否掛起。
ARCH_DEST = /home/dameng/dmdbms/data/DAMENG/arch
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME # 歸檔類型。
ARCH_DEST = DMSERVER1 # 歸檔目標實例名。
6.5 添加鏈路配置文件
從集羣主機複製dmmal.ini文件到從機,一般無需修改。
6.6 添加守護配置文件
從集羣主機複製dmwatcher.ini文件到從機,一般無需修改。
6.7 註冊數據庫服務
使用管理員用户將數據庫、守護程序註冊為服務,具體方法同主機。
kylin@KL2:~$ sudo /home/dameng/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMSERVER2 -dm_ini /home/dameng/dmdbms/data/DAMENG/dm.ini -m mount
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER2.service → /lib/systemd/system/DmServiceDMSERVER2.service.
創建服務(DmServiceDMSERVER2)完成
kylin@KL2:~$ sudo /home/dameng/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p WATCHER -watcher_ini /home/dameng/dmdbms/data/DAMENG/dmwatcher.ini
Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWATCHER.service → /lib/systemd/system/DmWatcherServiceWATCHER.service.
Created symlink /etc/systemd/system/multi-user.target.wants/DmWatcherServiceWATCHER.service → /lib/systemd/system/DmWatcherServiceWATCHER.service.
創建服務(DmWatcherServiceWATCHER)完成
7 配置監視主機
達夢數據守護集羣可以有單獨的監視主機,也可以使用數據庫服務器兼做監視主機。達夢的監視服務配置中,規定MON_DW_CONFIRM=1的配置的監視服務只能啓動一個,第二個再啓動的時候就會報錯。可以配置多實例監視器解決這個問題,達夢的多實例監視器要求監視器的個數必須為奇數,因此這裏增加了一台專用監視服務器,一樣安裝達夢數據庫軟件,但不創建實例。這樣集羣能夠實現任意單服務器失效後自動主從切換。
7.1 添加監視配置文件
首先在三台服務器上初始化聯機日誌文件。命令中的MON_MAGIC參數在三台服務器需要一致,MON_NAME為每台主機上的監視器名稱,如MON1、MON2、MON3。
dameng@KL1:~$ dmmonitor RAFT_FILE_PATH=/home/dameng/dmdbms/log RAFT_FILE_SIZE=512 MON_MAGIC=142857 MON_NAME=MON1
在數據庫目錄下新建dmmontor.ini文件,每台主機上的配置內容中只有MON_ID、MON_NAME兩項不同。例如:
MON_DW_CONFIRM = 1 # 0手動切換,1自動切換。
MON_LOG_PATH = /home/dameng/dmdbms/log # 監視器日誌文件存放路徑。
MON_LOG_INTERVAL = 60 # 每隔 60s 記錄日誌文件。
MON_LOG_FILE_SIZE = 512 # 單個日誌大小(MB)。
MON_LOG_SPACE_LIMIT = 2048 # 日誌上限(MB)。
MON_INST_NUM = 3 # 監視實例個數。
MON_HB_INTERVAL = 60 # 通信心跳檢測間隔。
MON_BRO_INTERVAL = 100 # RAFT協議中通信心跳間隔。
MON_VOTE_INTERVAL = 100 # RAFT協議中基礎投票間隔。
MON_ID = 1 # 當前監視器在監視器系統中的ID。
MON_MID = 45614 # 當前監視器系統的唯一標識。
MON_NAME = MON1 # 當前監視器名稱
[GRP1]
MON_INST_OGUID = 45331 # 組 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.20.101:5436 # MAL的地址端口
MON_DW_IP = 192.168.20.102:5436 # MAL的地址端口
[MON1]
MON_HOST = 192.168.20.101 # MON1監視器IP。
MON_PORT = 8341 # MON1監視器監聽端口。
MON_INST_ID = 1 # MON1監視器在監視器系統中的ID。
[MON2]
MON_HOST = 192.168.20.102 # MON2監視器IP。
MON_PORT = 8342 # MON2監視器監聽端口。
MON_INST_ID = 2 # MON2監視器在監視器系統中的ID。
[MON3]
MON_HOST = 192.168.20.103 # MON3監視器IP。
MON_PORT = 8343 # MON3監視器監聽端口。
MON_INST_ID = 3 # MON3監視器在監視器系統中的ID。
在其中一台服務器的數據庫目錄下新建dmmonitor_manual.ini文件,用於測試手工切換,其中MON_DW_CONFIRM設置為0。
MON_DW_CONFIRM = 0 # 0手動切換,1自動切換。
MON_LOG_PATH = /home/dameng/dmdbms/log # 監視器日誌文件存放路徑。
MON_LOG_INTERVAL = 60 # 每隔 60s 記錄日誌文件。
MON_LOG_FILE_SIZE = 512 # 單個日誌大小(MB)。
MON_LOG_SPACE_LIMIT = 2048 # 日誌上限(MB)。
[GRP1]
MON_INST_OGUID = 45331 # 組 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.20.101:5436 # MAL的地址端口
MON_DW_IP = 192.168.20.102:5436 # MAL的地址端口
7.2 註冊數據庫服務
使用管理員用户將監控程序註冊為服務。
kylin@KL1:~$ sudo /home/dameng/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p MONITOR -monitor_ini /home/dameng/dmdbms/data/DAMENG/dmmonitor.ini
Created symlink /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMONITOR.service → /lib/systemd/system/DmMonitorServiceMONITOR.service.
創建服務(DmMonitorServiceMONITOR)完成