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)完成