注册
达梦数据库进阶:基于 DEM 的可视化监控与单机多实例数据守护(Data Watch)集群搭建全记录
技术分享/ 文章详情 /

达梦数据库进阶:基于 DEM 的可视化监控与单机多实例数据守护(Data Watch)集群搭建全记录

KAl 2025/12/31 174 0 0

标签:#达梦数据库 #DataWatch #DEM #高可用 #内网穿透


摘要

在数据库高可用(HA)方案中,数据守护(Data Watch) 是达梦数据库最核心的技术之一。本次实践旨在通过单机多实例的方式,模拟真实生产环境下的实时主备集群搭建。
本次任务具有一定的特殊性和挑战性:由于服务器的内存不足,管理端(DEM)部署在远程 Linux 服务器,而数据端(数据库实例 + Agent)运行在本地 Mac 虚拟机中。这种跨网段的混合架构,要求我们不仅要精通数据库原理,还需解决 SSH 隧道内网穿透、域名映射、端口冲突等多重网络难题。本文将完整复盘从环境规划、DEM 部署、手动搭建集群到最终实现可视化纳管的全过程,并重点记录了搭建过程中的“踩坑”与排错思路。


一、架构规划与环境准备

1.1 网络架构拓扑

为了模拟真实的远程纳管场景(实则是服务器只有 2GB 内存,Mac 只有 8GB 内存:分配了 4GB 给虚拟机),本次环境采用了一种特殊的“混合云”架构:

  • 服务端(Server):远程 Linux 服务器(公网 IP: 8.148.x.x),部署 Tomcat 和 DEM 应用。
  • 客户端(Client):本地 Mac 虚拟机(内网 IP: 10.211.55.11),部署达梦数据库实例和 dmagent。
  • 通信链路:由于 DEM 无法直接访问本地内网 IP,我们利用 SSH 远程端口转发(Remote Port Forwarding) 技术,将本地数据库端口映射到远程服务器的 Loopback(127.0.0.1)接口。
架构层级 数据端 (Local) ↔️ 通信隧道 (SSH Tunnel) ↔️ 管理端 (Remote)
物理环境 本地 Mac 虚拟机 SSH 远程端口转发 (-R) 远程 Linux 服务器
IP 地址 10.211.55.11 (内网) 流量穿透 8.148.x.x (公网)
部署组件 1. 主库 (GRP1_RT_01) 2. 备库 (GRP1_RT_02) 3. dmagent (代理) 端口映射规则 Remote:5236 ➡️ Local:5236 Remote:5237 ➡️ Local:5237 Remote:6364 ➡️ Local:6364 1. Tomcat 容器 2. DEM Web 应用 3. DEM 元数据库
关键配置 /etc/hosts 映射:127.0.0.1 mac-db-server 统一逻辑域名mac-db-server /etc/hosts 映射:127.0.0.1 mac-db-server

1.2 单机多实例端口规划

由于只有一台虚拟机,我们需要在同一台 OS 上运行两个数据库实例(主库与备库)。为了避免冲突,必须对实例端口MAL 通信端口守护进程端口进行严格的错位规划。

角色 实例名 实例端口 (PORT_NUM) MAL 内部通信端口 守护进程监听端口 实例监听守护端口 数据目录
主库 (A) GRP1_RT_01 5236 61141 52141 5536 /dmdata/data/DAMENG
备库 (B) GRP1_RT_02 5237 61142 52142 5537 /dmdata/data/DAMENG_S

二、DEM 部署与dmagent 联通

根据达梦官方 ECO 社区的 运维监控工具指南,DEM 的部署并非简单的“解压即用”,而是需要对后台库、中间件及系统环境进行严格的调优,以确保监控数据的实时性与稳定性。

2.1 系统环境准备(远程服务器)

  • JDK 版本:明确要求 JAVA 1.8 环境。

image20251229010325678.png

  • 时间同步(Time Sync)这是官方文档特别强调的一点。DEM Server 与 dmagent 所在服务器的时间必须保持一致,否则会导致监控数据无法上报或显示异常。
    • 实战操作:在 Mac 虚拟机和远程服务器上均配置 NTP 服务或手动同步时间,确保误差在秒级以内。

2.2 初始化 DEM 后台数据库

DEM 需要一个后台数据库来存储监控数据和告警日志。为了应对高并发写入,必须对 dm.ini 进行特定优化(参考官方推荐配置):

2.2.1 参数调优

MEMORY_POOL = 200 # 内存池大小,建议 200M BUFFER = 1000 # 系统缓冲区,建议 1000M KEEP = 64 # KEEP 缓冲区,建议 64M SORT_BUF_SIZE = 50 # 排序缓冲区,建议 50M

image20251229005336028.png

2.2.2 元数据导入

使用 disql 工具执行安装目录下的 /dem_init.sql 脚本。

  • 注意:官方提示脚本编码为 UTF-8,执行前需设置 set CHAR_CODE UTF8; 以免乱码。
SQL> set CHAR_CODE UTF8; SQL> start dem/dem_init.sql;

2.3 Tomcat 安装与调优

2.3.1 解除包大小限制

conf/server.xml<Connector> 标签中增加 maxPostSize="-1"。这能防止 dmagent 上报的大量监控数据被 Tomcat 截断。

<Connector port="8080" protocol="HTTP/1.1" ... maxPostSize="-1"/>

image20251229005914351.png

2.3.2 加载本地驱动库

bin/catalina.sh 中配置 JAVA_OPTS,指定达梦本地驱动路径。这是解决启动报错 UnsatisfiedLinkError 的根本方法。

# Linux 环境示例 JAVA_OPTS="-server -Xms256m -Xmx1024m - Djava.library.path=/path/to/dmdbms/bin"

image20251229010601529.png

2.3.3 WAR 包部署

将DEM安装目录下 ./dem.war 上传至 Tomcat 的 webapps/ 目录。

  • 启动服务:
    执行 bin/startup.sh,Tomcat 会自动解压 war 包。

image20251229111017639.png

2.3 4. 配置数据库连接(db.xml)

DEM 启动后,需配置其连接后台数据库的方式。修改 webapps/dem/WEB-INF/db.xml

  • ⚠️ 环境特殊处理:由于数据库在本地 Mac 虚拟机,而 DEM 在远程,在Mac上我们通过 SSH 隧道(ssh -N -R 5236:10.211.55.11:5236 dmdba@8.148.x.x)进行了映射。因此,这里的连接地址必须填写 隧道入口

image20251229111717364.png

<?xml version="1.0" encoding="UTF-8"?> <ConnectPool> <Server>127.0.0.1</Server> <Port>5236</Port> <User>SYSDBA</User> <Password>*****</Password> <InitPoolSize>5</InitPoolSize> <CorePoolSize>10</CorePoolSize> <MaxPoolSize>50</MaxPoolSize> <KeepAliveTime>60</KeepAliveTime> <DbDriver></DbDriver> <DbTestStatement>select 1</DbTestStatement> <SSLDir>../sslDir/client_ssl/SYSDBA</SSLDir> <SSLPassword></SSLPassword> </ConnectPool>

image20251229111431528.png

2.3.5. 配置DEM日志级别

为了方便排查问题,建议修改 WEB-INF/classes/log4j.xml,将日志级别调整为 ERRORWARN,避免过多 INFO 日志占用磁盘空间。如果遇到启动报错,可临时调整为 DEBUGALL

根据项目的实际需要和磁盘的可用大小,调整 LOG_MAX_SIZE,LOG_MAX_COUNT,LOG_PRESERVE_DURATION 这 3 个参数的大小,避免出现磁盘爆盘的现象。此配置文件重启 Tomcat 之后才能生效。

日志最大大小= LOG_MAX_SIZE × LOG_MAX_COUNT × LOG_PRESERVE_DURATION;

image20251229114130831.png

2.4 dmagent 部署(本地 Mac 虚拟机)

dmagent 是监控数据的采集者,因此部署在被监控的数据库机器上。

2.4.1 获取与安装

获取 dmagent。dmagent 有两种获取方式:
(1)达梦数据库安装目录的 tool 下存有 dmagent。
(2)登录部署好的 DEM,在资源包中下载 dmagent 压缩包。
由于采取第一种方式,dmagent 无法正常运行(考虑版本不匹配),这里使用第二种方法:

  • 在浏览器输入 DEM 端 IP:端口/dem,默认用户和密码为 “admin/888888” ,登录到 DEM 页面中,如下图所示:

image20251229115131254.png

image20251229115346677.png

  • 拷贝 dmagent 到要部署的机器上。

2.4.2 配置 agent.ini (关键)

编辑 dmagent/agent.ini,配置 DEM 中心的地址。

  • center.url:填写远程 DEM 服务器的公网访问地址。

  • ip_list:填写dmagent所在服务器地址。

    # dem 所在机器的地址 center.url=http://8.148.x.x:8080/dem # dmagent所在服务器的地址 ip_list = [mac-db-server]

image20251229115937951.png

2.4.3 配置 dmagent 日志级别

同样修改 dmagent 目录下的 log4j.xml 文件,修改方法与 dem 端相同。

2.4.4 启动 dmagent

./start.sh -d agent.ini

2.4.5 脚本注册与服务启动

##注册服务 [root@localhost dmagent]# ./service.sh install input agent home [/home/dmdba/dm/dmdbms/tool/dmagent] : input agent.ini path [/home/dmdba/dm/dmdbms/tool/dmagent/agent.ini] : input service user [dmdba] :root installation the service DmAgentService completed. ##以服务的方式启动 dmagent [root@localhost dmagent]# cd service/ [root@localhost service]# ./DmAgentService start Starting dmagentStarting dmagent..... dmagent(pid: 28641) started successfully. SUCCESS!

image20251229121231536.png

2.4.6 其他

若要求不显示 manager 客户端工具,则在 tomcat/bin/catalina.sh 文件中追加属性字段 JAVA_OPTS=”…… -Drun_mode=DMA”。配置成功后则不会显示实例连接。

image20251229150000353.png

重启Tomcat服务,可以看到“客户端工具”部分不显示。

image20251229151923280.png

image20251229150814174.png

2.5 网络“连通但不可用”问题

在完成上述标准部署后,遇到了一个棘手的问题:DEM 能看到 Agent,但无法监控数据库,且状态显示异常。

问题根源:

  1. IP 识别冲突:SSH 隧道导致 DEM 认为数据库在本地(127.0.0.1),而 Agent 默认上报的是虚拟机的内网 IP(10.211.55.11)。
  2. 回环地址限制:如果强制 Agent 上报 127.0.0.1,会与 DEM 服务器自身的 Localhost 产生逻辑冲突。

最终解决方案 —— “域名映射法”:

通过引入一个逻辑域名 mac-db-server,让 DEM 和 Agent 在不同的网络环境下达成“共识”。

2.5.1 定义统一域名与 Hosts 映射

我们需要在两端都配置 Hosts,让它们都能解析这个伪造的域名。

  • 服务端(远程 Linux):修改 /etc/hosts,让 DEM 通过隧道访问。
    echo "127.0.0.1 mac-db-server" >> /etc/hosts

image20251229151438795.png

  • 客户端(本地 Mac 虚拟机):修改 /etc/hosts,让 Agent 识别本机。

    echo "127.0.0.1 mac-db-server" >> /etc/hosts

image20251229151531169.png

2.5.2 Agent 伪装配置 (关键步骤)

这是最关键的一步。我们需要强制 dmagent 上报这个逻辑域名,而不是它的真实 IP。
编辑本地虚拟机的 dmagent/agent.ini 文件,添加 ip_list 参数:

# dmagent/agent.ini # ... 其他配置保持不变 ... # 【关键】强制指定 Agent 上报的地址为逻辑域名 ip_list = [mac-db-server]

image20251229151840961.png


三、 手动搭建数据守护集群

本章节参照达梦官方文档 数据守护集群安装部署,结合单机多实例的特殊环境,一步步完成实时主备集群的搭建。

3.1 集群规划与环境准备

在开始操作前,必须制定详细的端口与路径规划。由于本次是在单台虚拟机上模拟主备双机,因此核心要点是利用端口偏移来避免冲突

3.1.1 端口与路径规划表

配置项 主库 (A 机器) 备库 (B 机器) 说明
IP 地址 127.0.0.1 (映射为内网IP) 127.0.0.1 (映射为内网IP) 单机环境共用同一 IP
实例名 GRP1_RT_01 GRP1_RT_02 需在 dm.ini 中修改
实例端口 5236 5237 必须错开,对外服务端口
MAL 端口 61141 61142 必须错开,内部数据传输端口
MAL 守护端口 52141 52142 必须错开,监视器连接端口
实例监听守护端口 5536 5537 必须错开,实例与守护进程通信端口
OGUID 45331 45331 必须一致,集群唯一标识
守护组 GRP1 GRP1 守护进程组名
数据目录 /dmdata/data/DAMENG /dmdata/data/DAMENG_S 利用不同目录隔离数据
归档上限 51200 (MB) 51200 (MB) 防止归档撑爆磁盘

3.1.2 集群架构图

image20251229155623820.png

3.2 配置主库(A 机器)

3.2.1 初始化实例并备份数据

如果主库已存在(如端口 5236 的默认库),可跳过初始化,直接修改 dm.ini 参数。如果是新环境,需先执行 dminit。(本次用已存在的主库进行数据守护集群搭建)

  • 修改 dm.ini

    INSTANCE_NAME = GRP1_RT_01 # 修改实例名

image20251229161336296.png

  • 启动服务
/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini

image20251229161907829.png

3.2.2 开启归档

/home/dmdba/dmdbms/bin/disql SYSDBA/******@127.0.0.1:5236
ALTER DATABASE MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdata/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; ALTER DATABASE OPEN;

3.2.3 备份数据

BACKUP DATABASE BACKUPSET '/dmdata/dmbak/BACKUP_FILE';

3.2.4 关闭前台实例服务

shutdown immediate; exit

image20251229162932091.png

3.2.5 修改 dmarch.ini

vim /dmdata/data/DAMENG/dmarch.ini
#DaMeng Database Archive Configuration file #this is comments ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME # 实时归档(传给备库) ARCH_DEST = GRP1_RT_02 # 目标实例名(备库的名字)

image20251229163241570.png

3.2.6 创建dmmal.ini

vim /dmdata/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间 MAL_TEMP_PATH = /dmdata/data/malpath/ #【注意】我改成了你的数据目录 MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩 [GRP1_RT_01] MAL_INST_NAME = GRP1_RT_01 MAL_HOST = 10.211.55.11 MAL_PORT = 61141 # A 的内部端口 MAL_INST_HOST = 10.211.55.11 MAL_INST_PORT = 5236 # A 的服务端口 MAL_DW_PORT = 52141 # A 的守护端口 MAL_INST_DW_PORT = 5536 # 【补回】A 的实例监听守护端口 [GRP1_RT_02] MAL_INST_NAME = GRP1_RT_02 MAL_HOST = 10.211.55.11 MAL_PORT = 61142 # B 的内部端口 MAL_INST_HOST = 10.211.55.11 MAL_INST_PORT = 5237 # B 的服务端口 MAL_DW_PORT = 52142 # B 的守护端口 MAL_INST_DW_PORT = 5537 # 【补回】B 的实例监听守护端口 (必须不同!)

image20251229163612258.png

3.2.7 创建 dmwatcher.ini

vim /dmdata/data/DAMENG/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_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

image20251229163813669.png

3.2.8 拷贝备份文件

由于采用的是单机多实例数据守护,无需拷贝,直接使用本机文件即可。

3.2.9 注册服务

su - root cd /home/dmdba/dmdbms/script/root # 注册主库实例服务 ./dm_service_installer.sh -t dmserver -p GRP1_RT_01 -dm_ini /dmdata/data/DAMENG/dm.ini -m mount # 注册主库守护进程服务 # 关键!官方文档写的是 -p Watcher,但为了防止和备库的守护进程服务名冲突,我们把它改成了 -p GRP1_RT_01。 ./dm_service_installer.sh -t dmwatcher -p GRP1_RT_01 -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

3.3 配置备库(B 机器)

在单机多实例架构中,备库实际上是同一台机器上的另一个数据库实例。我们需要通过初始化还原配置修改三个步骤,将其打造为主库的副本。

3.3.1 初始化备库实例

虽然备库的数据后续会被主库备份覆盖,但必须先执行 dminit 以生成标准的目录结构和基础配置文件。为了与主库区分,我们使用新的端口 5237 和新的目录 DAMENG_S

mkdir -p /dmdata/data/DAMENG_S # 初始化备库,DB_NAME建议保持DAMENG,避免后续路径混乱 ./dminit PATH=/dmdata/data/DAMENG_S DB_NAME=DAMENG INSTANCE_NAME=GRP1_RT_02 PAGE_SIZE=8 EXTENT_SIZE=16 LOG_SIZE=256 PORT_NUM=5237 CHARSET=1 CASE_SENSITIVE=1 SYSDBA_PWD=****** SYSAUDITOR_PWD=******

3.3.2 恢复数据

这一步是赋予备库“灵魂”的关键。我们将使用 dmrman 工具,把之前备份的主库数据还原到备库目录中。

cd /home/dmdba/dmdbms/bin ./dmrman CTLSTMT="RESTORE DATABASE '/dmdata/data/DAMENG_S/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'" ./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG_S/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/BACKUP_FILE'" ./dmrman CTLSTMT="RECOVER DATABASE '/dmdata/data/DAMENG_S/DAMENG/dm.ini' UPDATE DB_MAGIC"

image20251229165216996.png

3.3.3 配置文件

3.3.3.1 配置 dm.ini
vim /dmdata/data/DAMENG_S/DAMENG/dm.ini

dm.ini 参数修改如下

INSTANCE_NAME = GRP1_RT_02 PORT_NUM = 5237 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
3.3.3.2 同步配置文件

将主库配置好的 dmmal.ini、dmarch.ini、dmwatcher.ini 复制到备库目录。

cp /dmdata/data/DAMENG/dmmal.ini /dmdata/data/DAMENG_S/DAMENG/ cp /dmdata/data/DAMENG/dmarch.ini /dmdata/data/DAMENG_S/DAMENG/ cp /dmdata/data/DAMENG/dmwatcher.ini /dmdata/data/DAMENG_S/DAMENG/
3.3.3.3 修改备库 dmarch.ini
vim /dmdata/data/DAMENG_S/DAMENG/dmarch.ini
#DaMeng Database Archive Configuration file #this is comments ARCH_WAIT_APPLY = 0 [ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = /dmdata/arch ARCH_FILE_SIZE = 1024 ARCH_SPACE_LIMIT = 51200 ARCH_FLUSH_BUF_SIZE = 2 ARCH_HANG_FLAG = 1 [ARCHIVE_REALTIME] ARCH_TYPE = REALTIME # 实时归档(传给备库) ARCH_DEST = GRP1_RT_01 # 目标实例名(备库的名字)
3.3.3.4 修改备库 dmwatcher.ini
vim /dmdata/data/DAMENG_S/DAMENG/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_INI = /dmdata/data/DAMENG_S/DAMENG/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3.3.4 注册备库服务

使用 root 用户注册备库服务。特别注意: 服务名后缀必须使用 -p GRP1_RT_02,以防止与主库服务冲突。

su - root cd /home/dmdba/dmdbms/script/root # 注册备库实例服务 ./dm_service_installer.sh -t dmserver -p GRP1_RT_02 -dm_ini /dmdata/data/DAMENG_S/DAMENG/dm.ini -m mount # 注册备库守护进程服务 ./dm_service_installer.sh -t dmwatcher -p GRP1_RT_02 -watcher_ini /dmdata/data/DAMENG_S/DAMENG/dmwatcher.ini

3.4 配置监视器(双监视器方案)

为了兼顾“自动故障切换”的便利性和“人工运维介入”的灵活性,我们将参考官方最佳实践,同时配置确认监视器(后台自动跑)和非确认监视器(前台手动跑)。

3.4.1 创建监视器目录

mkdir -p /dmdata/data/monitor

3.4.2 配置确认监视器 (dmmonitor.ini)

这是集群的“自动驾驶”系统,负责故障自动切换。

vim /dmdata/data/monitor/dmmonitor.ini
MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /dmdata/data/monitor/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 = 10.211.55.11:52141 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 10.211.55.11:52142

3.4.3 配置非确认监视器 (dmmonitor_manual.ini)

这是给运维人员使用的“手动驾驶”控制台,用于日常状态查看和紧急手动切换。

vim /dmdata/data/monitor/dmmonitor_manual.ini
MON_DW_CONFIRM = 0 #0:非确认(故障手切) 1:确认(故障自切) MON_LOG_PATH = /dmdata/data/monitor/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 = 127.0.0.1:52141 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT MON_DW_IP = 127.0.0.1:52142

3.4.4 注册监视器服务

通常我们只需要将“确认监视器”注册为后台服务,随系统自启。
非确认监视器无需注册服务。

su - root # 注册名为 Monitor 的服务,指向 dmmonitor.ini ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdata/data/monitor/dmmonitor.ini

四、启动与验证

所有的配置文件和环境都准备就绪,接下来我们将按照顺序启动集群。

4.1 启动数据库并修改参数

由于在注册服务时指定了 -m mount 参数,启动服务后数据库会自动处于配置状态(Mount),此时我们可以直接连接数据库进行参数配置。

4.1.1 启动主库服务并配置

在终端执行以下命令启动主库:

# 启动主库实例服务 service DmServiceGRP1_RT_01 start # 服务启动后,使用 disql 连接主库(端口 5236)并执行配置: /home/dmdba/dmdbms/bin/disql SYSDBA/你的密码@localhost:5236
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> SP_SET_OGUID(45331); SQL> ALTER DATABASE PRIMARY; -- 设置为主库 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

4.1.2 启动备库服务并配置

# 启动备库实例服务 service DmServiceGRP1_RT_02 start # 使用 disql 连接备库(端口 5237)并执行配置: /home/dmdba/dmdbms/bin/disql SYSDBA/你的密码@localhost:5237
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL> SP_SET_OGUID(45331); SQL> ALTER DATABASE STANDBY; -- 设置为备库 SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

4.2 启动守护进程

数据库实例配置完成后,启动守护进程(Watcher),它会自动接管数据库并将其状态从 MOUNT 切换为 OPEN。

# 启动主库守护 service DmWatcherServiceGRP1_RT_01 start # 启动备库守护 service DmWatcherServiceGRP1_RT_02 start

4.3 监视器验证

使用监视器查看集群状态。为了直观看到状态变化,建议在前台启动。

/home/dmdba/dmdbms/bin/dmmonitor /dmdata/data/monitor/dmmonitor.ini

进入监视器界面后输入 show 命令。若看到以下关键指标,说明集群搭建成功:

  • GRP1_RT_01: 状态为 OPEN,角色为 PRIMARY,归档状态为 VALID。
  • GRP1_RT_02: 状态为 OPEN,角色为 STANDBY,归档状态为 VALID。

image20251229221921761.png


五、最终成果:DEM 可视化纳管

在底层集群搭建成功并验证无误后,最后一步是将这套运行在本地 Mac 虚拟机上的集群,接入远程 Linux 服务器上的 DEM 平台,实现跨网络的可视化监控与管理。

5.1 网络链路升级

由于集群新增了备库(5237 端口),原有的 SSH 隧道需要升级,以打通 DEM 到备库的连接。

在 Mac 终端重建隧道,加入备库端口转发:

# 转发规则:5236(主库) + 5237(备库) + 6364(Agent) ssh -N -R 5236:10.211.55.11:5236 -R 5237:10.211.55.11:5237 -R 6364:10.211.55.11:6364 dmdba@8.148.x.x

5.2 DEM 添加集群监控

  1. 登录 DEM,进入 “智能运维” -> “资源监控”。
  2. 点击“添加”,选择 “集群” -> “DW(数据守护)”。

image20251229223610624.png

image20251229223633431.png

  1. 配置站点信息:
  • 集群名称:自定义(如 DW_Cluster_Mac)。
  • 添加主库:主机选择 mac-db-server(利用之前的域名映射),端口 5236。
  • 添加备库:主机选择 mac-db-server,端口 5237。
  • 凭证:输入 SYSDBA 用户密码。

image20251229223729553.png

5.3 可视化效果展示

添加成功后,DEM 会自动识别集群拓扑关系。我们可以看到以下核心监控视图:

image20251229224650077.png

主库节点 (Primary) ↔️ 实时同步链路 (Realtime) ↔️ 备库节点 (Standby)
🖥️ GRP1_RT_01<br><br>Host: mac-db-server<br>Port: 5236<br>Role: PRIMARY <br>📡 MAL 通信<br>Mode: AUTO<br>Status: Connected<br><br>⏩ Redo Log 流向 🖥️ GRP1_RT_02<br><br>Host: mac-db-server<br>Port: 5237<br>Role: STANDBY
🟢 OPEN (状态正常) VALID (链路有效) 🟢 OPEN (状态正常)

图解说明

  • 绿色状态:表示数据库实例运行正常。
  • 中间链路:展示了从主库到备库的归档日志传输方向,VALID 表示数据实时同步中。
  • 底层支撑:这一切的流量都通过 SSH 隧道 (127.0.0.1 <-> 10.211.55.11) 透明传输。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服