达梦数据库-实时主备集群部署详解(附图文)
目录
一、、主备集群作用:
二、达梦集群各个组件作用::
1、MAL通信系统:主备库之间的专用通信链路
2、DMServer:提供达梦服务
3、dmwatcher服务(守护进程):
4、监视器(dmmonitor):
三、达梦数据库主备集群逻辑:
四、数据库软件安装
五、主备集群配置
1、初始化实例
2、脱机备份数据库
2.1、执行backup全库:
2.2备份还原备库
3、修改dm.ini参数
4、配置归档配置文件 dmarch.ini
5、配置MAL配置文件 dmmal.ini
6、配置守护进程配置文件
7、注册服务
8、mount状态启动集群
9、配置监视器
10、注册监视器服务(建议在备库上执行)
11、配置sql日志
12、验证集群同步状态
六、验证集群主备切换测试
七、手动切换主备库
八、客户端连接集群
一、、主备集群作用:
主备集群为最基础的高可用架构,只有主库对外提供服务(读写),备库实时同步数据(只读),如果主库宕机的话,备库自动接管
二、达梦集群各个组件作用::
1、MAL通信系统:主备库之间的专用通信链路
- 用于传输事物日志,确保日志传输的实时性和网络的可靠性 。传输的日志记录主库的所有数据修改操作,通过MAL实时传输到备库,备库解析并应用到主库传输日志,保证数据一致性,而持久化日志用于备库延迟同步或数据恢复。
- 心跳检测通过MAL定期发送心跳检测,检测节点存活状态,超时未响应触法备库升级主(依赖dmwatcher)
部分参数如下:
MAL_DW_PORT=7436(MAL 监听端口) INST_PORT=5236 (数据库实例通信端口)
2、DMServer:提供达梦服务
3、dmwatcher服务(守护进程):
- 监控主备实例的运行状态(如进程存活、网络连通性)
- 触法自动故障切换(当主库故障时,提供备库为新主库)
- 控制集群模式(自动或手动切换)
4、监视器(dmmonitor):
- 提供集群状态的可视化监控(如主备切换、日志同步进去)
- 支持手动执行主备切换、故障恢复等操作
三、达梦数据库主备集群逻辑:
- 主库接收写请求,生成Redo log。
- MAL系统将日志实时传输到备库。
- 备库通过Redo apply应用日志,保持数据同步
- dmwatcher监控主备状态,异常时触法切换
- dmmonitor提供监控和管理入口
注意:守护进程配置为自动切换时,必须配置确认监视器。如果在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)
---------------------------------------------------------------------------------------------------------------------------------
主机规划:
主机名 服务器IP 心跳IP 数据库名 实例名 备注 AAAA 192.168.5.136 192.168.5.136 DAMENG dmrw1 BBBB 192.168.5.137 192.168.5.137 DAMENG dmrw1 主机BBBB部署达梦监视器 本地存储LVM磁盘规划:(按实际需求调整磁盘空间)
安装目录/用途
/data/dmserver/app(数据库安装盘)
/data/dmserver/data(数据磁盘)
/data/dmserver/arch(归档日志存放目录)
/data/dmserver/backup (备份目录)
四、数据库软件安装
该步骤与单机版一致,详情见达梦数据库无图形化安装部署
五、主备集群配置
1、初始化实例
2个节点完成实例初始化,达梦集群之间实例名需要不同
分别执行以下命令:
主库:
cd /data/dmserver/app/bin
./dminit path=/data/dmserver/data/ CHARSET=1 CASE_SENSITIVE=N EXTENT_SIZE=16 PAGE_SIZE=32 SYSDBA_PWD=Passw0rd@DM SYSAUDITOR_PWD=Passw0rd@DM INSTANCE_NAME=dmrw1
备库:
./dminit path=/data/dmserver/data/ CHARSET=1 CASE_SENSITIVE=N EXTENT_SIZE=16 PAGE_SIZE=32 SYSDBA_PWD=Passw0rd@DM SYSAUDITOR_PWD=Passw0rd@DM INSTANCE_NAME=dmrw2
注册服务:
注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /script/root 下,如下所示:
[root@AAAA bin]# cd /data/dmserver/app/script/root/
注册服务,如下所示:
[root@BBBB root]# ./dm_service_installer.sh -t dmserver -dm_ini /data/dmserver/data/DAMENG/dm.ini -p DMSERVER Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service → /usr/lib/systemd/system/DmServiceDMSERVER.service. 创建服务(DmServiceDMSERVER)完成
注意:dm.in文件位置可以通过find查找位置
2、脱机备份数据库
所有节点都要停止数据库
systemctl stop DmServiceDMSERVER.service
在主机AAAA上执行以下命令查询dmap服务已启动:
ps -ef | grep dmap
若未启动,则先启动DMAP服务,dmdba到安装目录的bin/service_template目录下执行以下命令
[dmdba@AAAA ~]# cd /data/dmserver/app/bin/service_template/ [dmdba@AAAA service_template]# /data/dmserver/app/bin/service_template/DmAPService start Starting DmAPService: 上一次登录: 日 3月 16 14:15:46 CST 2025 pts/0 上 [ OK ]
注意:从节点也要执行上面的步骤,确保DMAP服务启动
2.1、执行backup全库:
主库上执行,备份文件备份到/data/dmserver/backup目录
[dmdba@AAAA ~]$ cd /data/dmserver/app/bin [dmdba@AAAA bin]$ [dmdba@AAAA bin]$ ./dmrman dmrman V8 RMAN> backup database '/data/dmserver/data/DAMENG/dm.ini' backupset '/data/dmserver/backup'; backup database '/data/dmserver/data/DAMENG/dm.ini' backupset '/data/dmserver/backup'; file dm.key not found, use default license! Processing backupset /data/dmserver/backup [Percent:100.00%][Speed:0.00M/s][Cost:00:00:04][Remaining:00:00:00] backup successfully! time used: 00:00:05.309 RMAN>
将备份的文件/data/dmserver/backup拷贝到备库服务器上。
[dmdba@AAAA bin]$ scp -r /data/dmserver/backup/* 192.168.5.137:/data/dmserver/backup dmdba@192.168.5.137's password: backup.bak 100% 28MB 282.2MB/s 00:00 backup.meta 100% 110KB 31.5MB/s 00:00
2.2备份还原备库
在备库上执行
在主机BBBB上,使用dmrman工具还原备份文件
restore database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';
完成后执行recover(图中报错显示为备份期间没有日志产生,可忽略):
recover database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';
最后执行recover update db_magic。
RMAN> recover database '/data/dmserver/data/DAMENG/dm.ini' update db_magic;
3、修改dm.ini参数
有节点都要修改
主库修改以下参数:
vim /data/dmserver/data/DAMENG/dm.ini
INSTANCE_NAME = DMRW1 MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2
备库修改以下参数:
INSTANCE_NAME = DMRW2 MAL_INI = 1 ARCH_INI = 1 ALTER_MODE_STATUS = 0 ENABLE_OFFLINE_TS = 2
4、配置归档配置文件 dmarch.ini
在实例目录下/data/dmserver/data/DAMENG/新建文件dmarch.ini
主库:
[dmdba@AAAA~]$ cat /data/dmserver/data/DAMENG/dmarch.ini
[ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DMRW2 #实时归档目标实例名(主库则填写备库实例名) [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /data/dmserver/arch #本地归档存放路径 ARCH_FILE_SIZE = 2048 #单位MB,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 102400 #单位MB。0标识无限制,范围1024~4294967294MB
备库:
[dmdba@BBBB ~]$ cat /data/dmserver/data/DAMENG/dmarch.ini
[ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = DMRW1 #实时归档目标实例名(主库则填写备库实例名) [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /data/dmserver/arch #本地归档存放路径 ARCH_FILE_SIZE = 2048 #单位MB,本地单个归档文件最大值 ARCH_SPACE_LIMIT = 102400 #单位MB。0标识无限制,范围1024~4294967294MB
5、配置MAL配置文件 dmmal.ini
在实例目录下/data/dmserver/data/DAMENG/新建文件dmmal.ini
主备库2个节点文件内容要相同。
[dmdba@AAAA bin]$ cat /data/dmserver/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 15 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = DMRW1 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 192.168.5.136 #MAL 系统监听 TCP 连接的 IP 地址 MAL_PORT = 7336 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 192.168.5.136 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 7436 #实例对应的守护进程监听 TCP 连接的端口 MAL_INST_DW_PORT = 7536 [MAL_INST2] MAL_INST_NAME = DMRW2 MAL_HOST = 192.168.5.137 MAL_PORT = 7336 MAL_INST_HOST = 192.168.5.137 MAL_INST_PORT = 5236 MAL_DW_PORT = 7436 MAL_INST_DW_PORT = 7536
6、配置守护进程配置文件
主备库dmwatcher.ini内容要相同
cat /data/dmserver/data/DAMENG/dmwatcher.ini
[GRP_DW] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 30 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_OGUID = 453331 #守护系统唯一 OGUID 值 INST_INI = /data/dmserver/data/DAMENG/dm.ini #dm.ini 配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /data/dmserver/app/bin/DmServiceDMSERVER start #命令行方式启动
7、注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /data/dmserver/data/DAMENG/dmwatcher.ini
注册之后先不启动,启动服务不以root用户,而要用dmdba用户,启动脚本在v$DM_HOME/bin目录下(也就是软件安装的bin目录),执行 ll | grep Dm可以看到。
8、mount状态启动集群
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行)
[dmdba@AAAA bin]$ ./dmserver /data/dmserver/data/DAMENG/dm.ini mount
主备库都要是ready状态,表示成功
在新的终端使用 disql 工具连接数据库:
[dmdba@AAAA ~]$ cd /data/dmserver/app/bin [dmdba@AAAA bin]$ ./disql SYSDBA/'"Passw0rd@DM"' 服务器[LOCALHOST:5236]:处于普通配置状态 登录使用时间 : 3.237(ms) disql V8 SQL>
主备库都修改 oguid,执行以下命令
SQL> sp_set_oguid(453331); DMSQL 过程已成功完成 已用时间: 2.601(毫秒). 执行号:1. SQL>
主库dmrw1上修改数据库模式为 primary,执行以下命令:
SQL> alter database primary; 操作已执行 已用时间: 5.220(毫秒). 执行号:0. SQL>
备库dmrw2上修改数据库模式为 standby,执行以下命令:
SQL> alter database standby; 操作已执行 已用时间: 4.452(毫秒). 执行号:0. SQL>
启动守护进程:
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
[dmdba@AAAA bin]$ pwd /data/dmserver/app/bin [dmdba@AAAA bin]$ ./dmwatcher /data/dmserver/data/DAMENG/dmwatcher.ini
出现
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY
说明正常了
守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。
9、配置监视器
启动监视器(可以在任意节点配置,建议配置在从节点上)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
[dmdba@BBBB ~]$ vim /data/dmserver/data/DAMENG/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式(0非确认监视器) MON_LOG_PATH = /data/dmserver/jsq #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔60秒定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 200 #日志文件最大32M MON_LOG_SPACE_LIMIT = 1024 #不限定日志文件总占用空间 [GRP_DW] MON_INST_OGUID = 453331 #组GRP1的唯一OGUID值 MON_DW_IP = 192.168.5.136:7436 #集群内部节点1 MON_DW_IP = 192.168.5.137:7436 #集群内部节点2
执行以下命令,启动监视器。
[dmdba@BBBB ~]$ cd /data/dmserver/app/bin
[dmdba@BBBB bin]$ ./dmmonitor /data/dmserver/data/DAMENG/dmmonitor.ini
启动后输入 show 命令查看集群状态。
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
disql 客户端验证
10、注册监视器服务(建议在备库上执行)
[root@BBBB ~]# cd /data/dmserver/app/script/root/
[root@BBBB root]# ./dm_service_installer.sh -t dmmonitor -p DW -monitor_ini /data/dmserver/data/DAMENG/dmmonitor.ini Created symlink /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDW.service → /usr/lib/systemd/system/DmMonitorServiceDW.service. 创建服务(DmMonitorServiceDW)完成
11、配置sql日志
所有节点修改sqllog.ini
到实例路径下
[dmdba@AAAA ~]$ vim /data/dmserver/data/DAMENG/sqllog.ini
BUF_TOTAL_SIZE = 10240 BUF_SIZE = 1024 BUF_KEEP_CNT = 6 [SLOG_ALL] FILE_PATH = ../log PART_STOR = 1 SWITCH_MODE = 2 SWITCH_LIMIT = 512 ASYNC_FLUSH = 1 FILE_NUM = 5 ITEMS = 0 SQL_TRACE_MASK = 2:3:25 MIN_EXEC_TIME = 1500 USER_MODE = 0 USERS =
12、验证集群同步状态
使用达梦客户端登录主库,创建测试表,插入数据,执行以下命令:
create table test(id int); insert into test values (1); commit; select * from test;
使用达梦客户端登录备库,查询测试表验证,执行以下命令:
select * from test;
数据正常!
六、验证集群主备切换测试
这里建议将所有服务停止一下,因为前面启动的服务都是用前台启动的,后面再使用systemctl启动
停止顺序:监视器—>备库守护---->主库守护—>主库服务---->备库服务
启动顺序:主库服务—>备库服务—>主库守护—>备库守护---->监视器
启动命令:
[root@BBBB ~]# systemctl start DmServiceDMSERVER.service [root@BBBB ~]# systemctl start DmWatcherServiceDW.service [root@BBBB root]# systemctl start DmMonitorServiceDW.service
停止命令:
[root@BBBB ~]# systemctl stop DmServiceDMSERVER.service [root@BBBB ~]# systemctl stop DmWatcherServiceDW.service [root@BBBB root]# systemctl stop DmMonitorServiceDW.service
开始模拟故障
将主库的守护进程停止后,监听器报错接受不到主库的监视器消息了
再将主数据库的服务停止后,监视器开始切换升级备库为主库
在BBBB服务器上执行写操作,查看是否可以正常写入
现在将AAAA达梦数据库重新启动加入集群,验证数据是否可以正常同步
启动宕机的达梦数据库:
[root@BBBB ~]# systemctl start DmServiceDMSERVER.service
启动宕机的达梦数据库监视器:
[root@BBBB ~]# systemctl start DmWatcherServiceDW.service
查看监视器日志已经检测到被宕机的库了,并且已经重新加入了集群
上AAAA达梦数据库上查询数据库的数据同步是否正常
数据同步正常
七、手动切换主备库
在监视器交互界面输入 login
输入sysdba账号和密码
手动切换命令格式如下
switchover GRP1(组名).GRP1_RT_02(要切换成主库的备库实例名)
组信息存放在达梦守护进程配置文件中
cat /data/dmserver/data/DAMENG/dmwatcher.ini
手动切换主备集群测试
switchover GRP_DW.DMRW1
到这里手动切换集群状态也完成了
八、客户端连接集群
客户端主机上需要配置 dm_svc.conf 文件(未安装 DM 数据库的机器新建即可),文件路径:
32 位的 DM 安装在 Win32 操作平台下,此文件位于 %SystemRoot%\system32 目录;
64 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\system32 目录;
32 位的 DM 安装在 Win64 操作平台下,此文件位于 %SystemRoot%\SysWOW64 目录;
在 Linux 平台下,此文件位于/etc/dm_svc.conf。
文件内容:
#全局配置区 DMDW=(192.168.10.101:5236,192.168.10.102:5236) TIME_ZONE=(+480) #表示+8:00 时区 LOGIN_ENCRYPT=(0) DIRECT=(Y) #服务配置区 [DMDW] LOGIN_MODE=(1) #只连主库
客户端程序连接数据库时,需要指定 IP 端口处替换为服务名即可,例如:disql SYSDBA/‘“password”’@DMDW。jdbc的url为:jdbc:dm://DMDW
注意
当修改了 dm_svc.conf 内容后,需要重启客户端程序,修改的配置才能生效。