注册
达梦数据守护集群安装部署流程
专栏/技术分享/ 文章详情 /

达梦数据守护集群安装部署流程

Coisini. 2025/08/01 260 0 0
摘要

零、部署前准备工作

1. 确认软硬件环境

类似于在linux环境下进行单机部署前的检查:检查操作系统版本、CPU类型是否与达梦数据库安装包保持一致。若不一致,将会导致数据库安装失败。

2. 网络环境与集群规划

首先介绍心跳网络和MAL通讯系统:

心跳网络(Heartbeat Network)是分布式系统、网络通信或高可用性架构中用于维持连接活性、实时监测节点状态的底层通信机制。其核心目的是通过周期性的信号交换(即“心跳包”),确保各方确认彼此在线,并及时发现连接中断或节点故障。

MAL通讯系统是达梦数据库实现的基于TCP协议的内部高速通信机制,主要用于实例间的Redo日志传输和消息通讯。其核心特性包括:

  1. 核心功能
  • 支持MPP集群/主备架构的实时日志同步;
  • 提供可靠、灵活的实例间消息通道;
  • 实现组播/单播混合通信模式;
  1. 关键配置参数
  • MAL_CHECK_INTERVAL:链路检测间隔(默认30s);
  • MAL_CONN_FAIL_INTERVAL:链路断开判定时间(默认10s);
  • MAL_BUF_SIZE:单缓存大小限制(默认100MB);
  • MAL_MESSAGE_CHECK:消息体校验开关(默认开启);
  1. 典型应用场景
  • 数据守护系统日志传输;
  • MPP集群节点间数据分发;
  • 实例状态同步与故障检测;

配置时需在所有节点保持DMMAL.INI文件一致性,通过MAL_INI=1参数启用系统。其性能直接影响集群的故障切换响应速度和数据一致性保障能力。

心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影响 mal 系统的处理能力,从而导致整个集群出现响应服务请求慢的情况。

本次实验环境搭建一主一备集群,服务器IP和端口规划如下:

类别 实例名 MAL_INST_HOST MAL_HOST PORT_NUM MAL_PORT MAL_DW_PORT MAL_INST_DW_PORT
主库 GRP1_RT_01 192.168.1.101 10.0.0.1 9001 10001 11001 12001
备库 GRP1_RT_02 192.168.1.102 10.0.0.1 9002 10002 11002 12002
  • MAL_HOST:MAL IP地址;

  • MAL_INST_HOST:实例对外服务的 IP 地址。若 dm.ini 中配置了 LISTEN_IP,MAL_INST_HOST 必须与 LISTEN_IP 保持一致;

  • PORT_NUM:数据库实例端口;

  • MAL_PORT:MAL 监听端口;

  • MAL_DW_PORT:MAL_INST_NAME 实例守护进程的监听端口;

  • MAL_INST_DW_PORT:节点实例监听守护进程的端口;

如果是在一台虚拟机上进行的试验环境搭建,需要设置虚拟业务IP和心跳IP

主库
ip addr add 192.168.1.101/24 dev lo label lo:0  # 业务IP
ip addr add 10.0.0.1/24 dev lo label lo:1       # 心跳IP

备库
ip addr add 192.168.1.102/24 dev lo label lo:0  # 业务IP
ip addr add 10.0.0.2/24 dev lo label lo:1       # 心跳IP

数据安装目录可以自行规划。

3. 其他准备工作

  • 创建安装用户:dmdba;
  • 调整limits.conf参数;
  • 获取安装包;
  • 规划安装路径;

4. 数据库软件安装

使用命令行方式安装,过程和在linux环境下进行单机部署一致,在此不再赘述。

一、主备集群搭建

部分步骤会需要root权限,遇到权限不够的问题切换root即可。

1. 初始化主库、备库实例

主库:

/opt/dm/bin/dminit PATH=/opt/dameng DB_NAME=DataWatch_01 INSTANCE_NAME=GRP1_RT_01 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=123456Aa SYSAUDITOR_PWD=123456Bb PORT_NUM=9001

备库:

/opt/dm/bin/dminit PATH=/opt/dameng DB_NAME=DataWatch_02 INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048 SYSDBA_PWD=123456Aa SYSAUDITOR_PWD=123456Bb PORT_NUM=9002

2. 主库备份并拷贝至备库

这里暂时不注册数据库服务,实例初始化后以前台方式启动一次主库实例进程:

/opt/dm/bin/dmserver /opt/dameng/DataWatch_01/dm.ini

等到出现SYSTEM IS READY即可,然后输入EXIT退出进程。

主库与备库同时创建备份路径,主库执行rman备份,拷贝备份文件至备库服务器:

/opt/dm/bin/dmrman use_ap=2

backup database '/opt/dameng/DataWatch_01/dm.ini' backupset '/opt/dameng/DataWatch_01/bak/fullbak'

如果实验环境使用了两台分离的服务器或主机,需要使用scp命令传输命令,例如:scp D:\file_name.iso dmdba@ip_address:/home/dmdba/

如果在一台机器上部署,下一步直接读备份文件即可。

3. 备库还原恢复

在备机上,使用dmrman工具还原备库:

restore database '/opt/dameng/DataWatch_02/dm.ini' from backupset '/opt/dameng/DataWatch_01/bak/fullbak';
recover database '/opt/dameng/DataWatch_02/dm.ini' from backupset '/opt/dameng/DataWatch_01/bak/fullbak';
recover database '/opt/dameng/DataWatch_02/dm.ini' update db_magic;

4. 调整主库配置

  1. 修改dm.ini配置

    vim /opt/dameng/DataWatch_01/dm.ini

    #修改以下参数
    INSTANCE_NAME                   = GRP1_RT_01  #该参数应当正确
    PORT_NUM                        = 9001  #该参数应当正确
    ALTER_MODE_STATUS               = 0           
    ENABLE_OFFLINE_TS               = 2    
    MAL_INI                         = 1
    ARCH_INI                        = 1   
    
  2. 配置dmarch.ini

    vim /opt/dameng/DataWatch_01/dmarch.ini

    #创建此文件,并添加以下内容
    [ARCHIVE_REALTIME1]
    ARCH_TYPE = REALTIME                            
    ARCH_DEST = GRP1_RT_02               
    [ARCHIVE_LOCAL1]
    ARCH_TYPE = LOCAL                                 
    ARCH_DEST = /opt/dameng/DataWatch_01/arch       
    ARCH_FILE_SIZE = 2048                              
    ARCH_SPACE_LIMIT = 51200   
    
  3. 配置dmmal.ini

    vim /opt/dameng/DataWatch_01/dmmal.ini

    #创建此文件,并添加以下内容
    MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
    MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
    
    [MAL_INST1]
    MAL_INST_NAME            = GRP1_RT_01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
    MAL_HOST                 = 10.0.0.1  #MAL 系统监听 TCP 连接的 IP 地址
    MAL_PORT                 = 10001  #MAL 系统监听 TCP 连接的端口
    MAL_INST_HOST            = 192.168.1.101  #实例的对外服务 IP 地址
    MAL_INST_PORT            = 9001  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
    MAL_DW_PORT              = 11001  #实例对应的守护进程监听 TCP 连接的端口
    MAL_INST_DW_PORT         = 12001  #实例监听守护进程 TCP 连接的端口
    
    [MAL_INST2]
    MAL_INST_NAME            = GRP1_RT_02
    MAL_HOST                 = 10.0.0.2
    MAL_PORT                 = 10002
    MAL_INST_HOST            = 172.16.1.102
    MAL_INST_PORT            = 9002
    MAL_DW_PORT              = 11002
    MAL_INST_DW_PORT         = 12002
    
  4. 配置dmwatcher.ini

    vim /opt/dameng/DataWatch_01/dmwatcher.ini

    #创建此文件,并添加以下内容
    [GRP1]
    DW_TYPE                  = GLOBAL  #全局守护类型
    DW_MODE                  = AUTO  #MANUAL:故障手切 AUTO:故障自切
    DW_ERROR_TIME            = 10  #远程守护进程故障认定时间
    INST_ERROR_TIME          = 10  #本地实例故障认定时间
    INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
    INST_OGUID               = 45331  #守护系统唯一 OGUID 值
    INST_INI                 = /opt/dameng/DataWatch_01/dm.ini  #dm.ini 文件路径
    INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
    INST_STARTUP_CMD         = /opt/dm/bin/DmDW01Service  #命令行方式启动
    RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
    RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭
    
  5. 启动主库为mount状态

    /opt/dm/bin/dmserver /opt/dameng/DataWatch_01/dm.ini mount

    等到出现SYSTEM IS READY即可。

  6. 修改OGUID值&数据库状态

    /opt/dm/bin/disql SYSDBA/123456Aa@localhost:9001

    SP_SET_OGUID(45331); ALTER DATABASE PRIMARY; EXIT

5. 调整备库配置

备库的配置与主库的配置大致相同,仅有一些细节的不同。主要区别点在于部署位置是否是两台独立的机器还是位于一台机器上。

  1. 修改dm.ini配置

    vim /opt/dameng/DataWatch_02/dm.ini

    #修改以下参数
    INSTANCE_NAME                   = GRP1_RT_02  #该参数应当正确
    PORT_NUM                        = 9002  #该参数应当正确
    ALTER_MODE_STATUS               = 0           
    ENABLE_OFFLINE_TS               = 2    
    MAL_INI                         = 1
    ARCH_INI                        = 1   
    
  2. 配置dmarch.ini

    vim /opt/dameng/DataWatch_02/dmarch.ini

    #创建此文件,并添加以下内容
    [ARCHIVE_REALTIME1]
    ARCH_TYPE = REALTIME                            
    ARCH_DEST = GRP1_RT_01               
    [ARCHIVE_LOCAL1]
    ARCH_TYPE = LOCAL                                 
    ARCH_DEST = /opt/dameng/DataWatch_02/arch       
    ARCH_FILE_SIZE = 2048                              
    ARCH_SPACE_LIMIT = 51200   
    
  3. 配置dmmal.ini

    与主库配置完全一致。

    vim /opt/dameng/DataWatch_02/dmmal.ini

    #创建此文件,并添加以下内容
    MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
    MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
    
    [MAL_INST1]
    MAL_INST_NAME            = GRP1_RT_01  #实例名,和 dm.ini 的 INSTANCE_NAME 一致
    MAL_HOST                 = 10.0.0.1  #MAL 系统监听 TCP 连接的 IP 地址
    MAL_PORT                 = 10001  #MAL 系统监听 TCP 连接的端口
    MAL_INST_HOST            = 192.168.1.101  #实例的对外服务 IP 地址
    MAL_INST_PORT            = 9001  #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
    MAL_DW_PORT              = 11001  #实例对应的守护进程监听 TCP 连接的端口
    MAL_INST_DW_PORT         = 12001  #实例监听守护进程 TCP 连接的端口
    
    [MAL_INST2]
    MAL_INST_NAME            = GRP1_RT_02
    MAL_HOST                 = 10.0.0.2
    MAL_PORT                 = 10002
    MAL_INST_HOST            = 172.16.1.102
    MAL_INST_PORT            = 9002
    MAL_DW_PORT              = 11002
    MAL_INST_DW_PORT         = 12002
    
  4. 配置dmwatcher.ini

    vim /opt/dameng/DataWatch_02/dmwatcher.ini

    #创建此文件,并添加以下内容
    [GRP1]
    DW_TYPE                  = GLOBAL  #全局守护类型
    DW_MODE                  = AUTO  #MANUAL:故障手切 AUTO:故障自切
    DW_ERROR_TIME            = 10  #远程守护进程故障认定时间
    INST_ERROR_TIME          = 10  #本地实例故障认定时间
    INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
    INST_OGUID               = 45331  #守护系统唯一 OGUID 值
    INST_INI                 = /opt/dameng/DataWatch_02/dm.ini  #dm.ini 文件路径
    INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
    INST_STARTUP_CMD         = /opt/dm/bin/DmDW02Service  #命令行方式启动
    RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
    RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭
    
  5. 启动主库为mount状态

    /opt/dm/bin/dmserver /opt/dameng/DataWatch_02/dm.ini mount

    等到出现SYSTEM IS READY即可。

  6. 修改OGUID值&数据库状态

    /opt/dm/bin/disql SYSDBA/123456Aa@localhost:9002

    SP_SET_OGUID(45331); ALTER DATABASE PRIMARY; EXIT

6. 配置监视器

由于主库和实时备库的守护进程配置为自动切换模式,因此这里选择配置确认监视器。和普通监视器相比,确认监视器除了相同的命令支持外,在主库发生故障时,能够自动通知实时备库接管为新的主库,具有自动故障处理的功能。
修改 dmmonitor.ini 配置确认监视器,其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

mkdir -p /opt/dm/bin/log

vim /opt/dm/bin/dmmonitor_auto.ini

#创建此文件,并添加以下内容
MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = /opt/dm/bin/log #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 0  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 10.0.0.1:11001  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 10.0.0.2:11002

vim /opt/dm/bin/dmmonitor_manual.ini

#创建此文件,并添加以下内容
MON_DW_CONFIRM             = 0  #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH               = /opt/dm/bin/log #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 32  #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT        = 0  #日志上限,单位 MB

[GRP1]
MON_INST_OGUID           = 45331  #组 GRP1 的唯一 OGUID 值
MON_DW_IP                = 10.0.0.1:11001  #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP                = 10.0.0.2:11002

7. 启动集群

前面配置oguid&状态时数据库实例已处于mount状态,所以在这里配置结束就不再重新启动实例。

前台启动方法:

启动主库实例:
	./dmserver /opt/dameng/DataWatch_01/dm.ini mount
启动备库实例:
	./dmserver /opt/dameng/DataWatch_02/dm.ini mount
启动主库守护进程:
	./dmwatcher /opt/dameng/DataWatch_01/dmwatcher.ini
启动备库守护进程:
	./dmwatcher /opt/dameng/DataWatch_02/dmwatcher.ini
启动监视器:
	./dmmonitor dmmonitor_manual.ini

停止前台启动的集群:

停止监视器:exit
停止备库守护进程:exit
停止主库守护进程:exit
停止主库实例:exit
停止备库实例:exit

8. 注册服务

注册服务参数说明:

屏幕截图 20250725 085903.png

主库注册实例服务:

#在bin文件夹下执行
cp service_template/DmService DmDW01Service
vim DmDW01Service 
INI_PATH=/opt/dameng/DataWatch_01/dm.ini

主库注册守护进程服务:

cd /opt/dm/script/root
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dameng/DataWatch_01/dmwatcher.ini -p GRP1_RT_01 

备库注册服务:

#在bin文件夹下执行
cp service_template/DmService DmDW02Service
vim DmDW02Service 
INI_PATH=/opt/dameng/DataWatch_02/dm.ini

备库注册守护进程服务:

cd /opt/dm/script/root
./dm_service_installer.sh -t dmwatcher -watcher_ini /opt/dameng/DataWatch_02/dmwatcher.ini -p GRP1_RT_02 

注册监视器服务:

cd /opt/dm/script/root
./dm_service_installer.sh -t dmmonitor -monitor_ini /opt/dm/bin/dmmonitor_auto.ini -p GRP1

9. 服务启停

启动过程:

主库实例:
	/opt/dm/bin/DmDW01Service start mount
备库实例:
	/opt/dm/bin/DmDW02Service start mount
主库守护进程:
	/opt/dm/bin/DmWatcherServiceGRP1_RT_01 start
备库守护进程:
	/opt/dm/bin/DmWatcherServiceGRP1_RT_02 start
确认监视器:
	/opt/dm/bin/DmMonitorServiceGRP1 start

若是要查看监视器监视的主备信息,则需关闭确认监视器的后台服务进程,然后前台启动(确认监视器只能打开一个,输入help可以查看监视器指令内容):

./dmmonitor dmmonitor_manual.ini

停止顺序:

确认监视器:
	/opt/dm/bin/DmMonitorServiceGRP1 stop
备库守护进程:
	/opt/dm/bin/DmWatcherServiceGRP1_RT_02 stop
主库守护进程:
	/opt/dm/bin/DmWatcherServiceGRP1_RT_01 stop
主库实例:
	/opt/dm/bin/DmDW01Service stop
备库实例:
	/opt/dm/bin/DmDW02Service stop

查看dmserver进程:

ps -ef|grep dmserver

查看dmwatcher进程:

ps -ef|grep dmwatcher

主备启停顺序要严格按照下面的顺序依次进行:

主备启动:实例服务(先主后备) – 守护进程服务(先主后备) – 确认监视器;

主备停止:确认监视器 – 守护进程服务(先备后主) – 实例服务(先主后备);

二、验证

前台启动监视器后,输入show命令或tip命令查看集群状态:

屏幕截图 20250725 101349.png

其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 REALTIME,归档状态 RSTAT 为VALID。

主库和备库状态也可用disql工具登录后查看:

登录主备库:
	/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9001
	/opt/dm/bin/disql SYSDBA/123456Aa@localhost:9002
查询:
	select instance_name,status$,mode$ from V$instance;
	select file_lsn,cur_lsn,n_magic,db_magic from v$rlog;

使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

create table t1(id int); insert into t1 values(1); insert into t1 values(2); commit; exit

使用 disql 客户端登录备库,查询测试表验证,执行以下命令:

select * from t1;

查看数据是否正常同步。

屏幕截图 20250725 103045.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服