广州总部电话:020-85564311
广州总部电话:020-85564311

广州网站建设-小程序商城开发-广州小程序开发-企业微信开发公司-网站建设高端品牌-优网科技

20年
互联网应用服务商
请输入搜索关键词
知识库 知识库

优网知识库

探索行业前沿,共享知识宝库

达梦数据库-实时主备集群部署详解(附图文)
发布日期:2025-05-19 13:41:11 浏览次数: 808 来源:在异世界相逢
主备集群部署
主备集群为最基础的高可用架构,只有主库对外提供服务(读写),备库实时同步数据(只读),如果主库宕机的话,备库自动接管
达梦集群各个组件作用:
1、MAL通信系统:主备库之间的专用通信链路,
  • 用于传输事物日志,确保日志传输的实时性和网络的可靠性  。传输的日志记录主库的所有数据修改操作,通过MAL实时传输到备库,备库解析并应用到主库传输日志,保证数据一致性,而持久化日志用于备库延迟同步或数据恢复。
  • 心跳检测通过MAL定期发送心跳检测,检测节点存活状态,超时未响应触法备库升级主(依赖dmwatcher)
部分参数如下:
MAL_DW_PORT=7436(MAL 监听端口)INST_PORT=5236 (数据库实例通信端口)
2、DMServer:提供达梦服务
3、dmwatcher服务(守护进程):
  • 监控主备实例的运行状态(如进程存活、网络连通性)
  • 触法自动故障切换(当主库故障时,提供备库为新主库)
  • 控制集群模式(自动或手动切换)

4、监视器(dmmonitor):
  • 提供集群状态的可视化监控(如主备切换、日志同步进去)
  • 支持手动执行主备切换、故障恢复等操作

达梦数据库主备集群逻辑如下:
  1. 主库接收写请求,生成Redo log。
  2. MAL系统将日志实时传输到备库。
  3. 备库通过Redo apply应用日志,保持数据同步
  4. dmwatcher监控主备状态,异常时触法切换
  5. 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
dmrw2
本地存储LVM磁盘规划:(按实际需求调整磁盘空间)
安装目录/用途
/data/dmserver/app(数据库安装盘)
/data/dmserver/data(数据磁盘)
/data/dmserver/arch(归档日志存放目录)
/data/dmserver/backup  (备份目录)
一、数据库软件安装
该步骤与单机版部署一致,详情见 

达梦数据库单机部署步骤

乔亚博,公众号:在异世界相逢达梦数据库无图形化安装部署

二、主备集群配置:
1、初始化实例
2个节点完成实例初始化,达梦集群之间实例名需要不同
分别执行以下命令:
主库:
[dmdba@BBBB cdrom]cd /data/dmserver/app/bin[dmdba@BBBB 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
备库:
[dmdba@BBBB cdrom]cd /data/dmserver/app/bin[dmdba@BBBB 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=dmrw2
注册服务:
注册服务需使用 root 用户进行注册。使用 root 用户进入数据库安装目录的 /script/root 下,如下所示:

[root@AAAA bin]# cd /data/dmserver/app/script/root/

注册服务,如下所示:

[root@AAAA 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、脱机备份数据库
所有节点都要停止数据库
[root@AAAA bin]# 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

注意:从节点也要执行上面的步骤,确保DMAP服务启动

2.1、执行backup全库:
在主库上执行,备份文件备份到/data/dmserver/backup目录
[dmdba@AAAA service_template]$ cd /data/dmserver/app/bin[dmdba@AAAA bin]$ ./dmrman dmrman V8RMAN> 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.295RMAN> 
将备份的文件/data/dmserver/backup拷贝到备库服务器上。
[dmdba@AAAA bin]scp -r /data/dmserver/backup/* 192.168.5.137:/data/dmserver/backupdmdba@192.168.5.137's password: backup.bak        100%   28MB 298.4MB/s   00:00    backup.meta       100%  110KB  41.4MB/s   00:00 
2.2备份还原备库
在备库上执行

在主机BBBB上,使用dmrman工具还原备份文件

[dmdba@BBBB service_template]$  cd /data/dmserver/app/bin[dmdba@BBBB bin]$ ./dmrman dmrman V8RMAN> restore database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';restore database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';file dm.key not found, use default license![Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]                                 restore successfully.time used: 00:00:02.451RMAN> 

完成后执行recover(图中报错显示为备份期间没有日志产生,可忽略):

RMAN> recover database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';recover database '/data/dmserver/data/DAMENG/dm.ini' from backupset '/data/dmserver/backup';==============================Error Stack==============================DM[603]:备份集[/data/dmserver/backup]备份过程中未产生日志=======================================================================recover successfully!time used: 288.652(ms)

最后执行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                         = 1ARCH_INI                        = 1ALTER_MODE_STATUS               = 0ENABLE_OFFLINE_TS               = 2
备库修改以下参数:
INSTANCE_NAME                   = DMRW2MAL_INI                         = 1ARCH_INI                        = 1ALTER_MODE_STATUS               = 0ENABLE_OFFLINE_TS               = 2
4、配置归档配置文件 dmarch.ini
在实例目录下/data/dmserver/data/DAMENG/新建文件dmarch.ini
主库:
[dmdba@AAAA bin]$ 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 bin]$ 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个节点文件内容要相同。
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

主备库内容要相同
[GRP_DW] DW_TYPE    = GLOBAL    #全局守护类型DW_MODE    = MANUAL     #自动切换模式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 /dmdata/dmdb/dmwatcher.ini	
注册监视器服务(建议在备库上执行)
[root@BBBB root]# ./dm_service_installer.sh -t dmmonitor -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)完成[root@BBBB root]# systemctl status DmMonitorServiceDW.service  DmMonitorServiceDW.service - DM Data Watch Monitor Service(DmMonitorServiceDW).   Loaded: loaded (/usr/lib/systemd/system/DmMonitorServiceDW.service; enabled; vendor preset: disabled)   Active: inactive (dead)[root@BBBB root]# systemctl start DmMonitorServiceDW.service 
注册之后先不启动,启动服务不以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 bin]$ ./disql SYSDBA密码:服务器[LOCALHOST:5236]:处于普通配置状态登录使用时间 : 3.426(ms)disql V8SQL> 

主备库都修改 oguid,执行以下命令

SQL> sp_set_oguid(453331);DMSQL 过程已成功完成已用时间: 1.527(毫秒). 执行号:1.

主库dmdb01上修改数据库模式为 primary,执行以下命令:

SQL> alter database primary;操作已执行已用时间: 5.289(毫秒). 执行号:0.
备库dmdb02上修改数据库模式为 standby,执行以下命令:
SQL> alter database standby;操作已执行已用时间: 4.679(毫秒). 执行号:0.

启动守护进程
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

[dmdba@AAAA bin]$ ./dmwatcher /data/dmserver/data/DAMENG/dmwatcher.ini

出现

DMWATCHER[4.0] V8DMWATCHER[4.0] IS READY
就说明正常了

守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。

9、配置监视器

启动监视器(可以在任意节点配置,建议配置在从节点上)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
 cat /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     #日志文件最大32MMON_LOG_SPACE_LIMIT  = 1024    #不限定日志文件总占用空间[GRP_DW]  MON_INST_OGUID    = 453331     #组GRP1的唯一OGUID值
 MON_DW_IP     = 192.168.5.136:7436 MON_DW_IP     = 192.168.5.137:7436
执行以下命令,启动监视器。
[dmdba@BBBB bin]$ ./dmmonitor /data/dmserver/data/DAMENG/dmmonitor.ini
启动后输入 show 命令查看集群状态。
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。
disql 客户端验证
10、配置sql日志
所有节点修改sqllog.ini
到实例路径下
[dmdba@BBBB dmserver]$ vim /data/dmserver/data/DAMENG/sqllog.ini
BUF_TOTAL_SIZE = 10240BUF_SIZE = 1024BUF_KEEP_CNT = 6[SLOG_ALL]FILE_PATH = ../logPART_STOR = 1SWITCH_MODE = 2SWITCH_LIMIT = 512ASYNC_FLUSH = 1FILE_NUM = 5ITEMS = 0SQL_TRACE_MASK = 2:3:25MIN_EXEC_TIME = 1500USER_MODE = 0USERS = 
11、验证集群同步状态
使用达梦客户端登录主库,创建测试表,插入数据,执行以下命令:
create table test(id int);insert into test values (1);commit;
使用达梦客户端登录备库,查询测试表验证,执行以下命令:
select * from test;
数据正常!
三、验证集群主备切换测试
更改主备服务器监听配置文件,

更改/data/dmserver/data/DAMENG/dmwatcher.ini

DW_MODE = MANUAL 更改为DW_MODE = AUTO

停止顺序:监视器—>备库守护---->主库守护—>主库服务---->备库服务
启动顺序:主库服务—>备库服务—>主库守护—>备库守护---->监视器

主备需要将上面的数据库全部重启一下,使用以下两个命令

 systemctl stop DmServiceDMSERVER.service  systemctl stop DmWatcherServiceDW.service

之后启动主和备

systemctl start DmServiceDMSERVER.service systemctl start DmWatcherServiceDW.service
1、主备集群故障切换测试
1.1关闭达梦守护进程(DmWatcherServiceDW)
[root@AAAA cdrom]# systemctl stop DmWatcherServiceDW.service
日志开始报错接收不到守护进程的消息了
1.2关闭达梦服务
[root@AAAA cdrom]# systemctl stop DmServiceDMSERVER.service 
监视器输出检测不到主库的进程,使用实例DMRW2自动接管
到这里自动切换主备测试完成。
博主测试过,如果主库宕机后,从库接管后产生的数据,等宕机后的库重新加入到集群中后会自动同步差异数据
2、手动切换主备库
在监视器交互界面输入 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.5.136:5236,192.168.5.137: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 内容后,需要重启客户端程序,修改的配置才能生效。

优网科技,优秀企业首选的互联网供应服务商

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!

优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、DIY体验、720全景展厅及3D虚拟仿真)、移动端应用(手机站APP开发)、微信定制开发(微信官网、微信商城、企业微信)、微信小程序定制开发等一系列互联网应用服务。


我要投稿

姓名

文章链接

提交即表示你已阅读并同意《个人信息保护声明》

专属顾问 专属顾问
扫码咨询您的优网专属顾问!
专属顾问
马上咨询
联系专属顾问
联系专属顾问
联系专属顾问
扫一扫马上咨询
扫一扫马上咨询

扫一扫马上咨询

和我们在线交谈!