达梦数据库如何寻找集群内监视器的IP地址

01  背景

在达梦的主备集群中,确认监视器最重要的作用就是负责用于故障自动切换的数据守护系统中,主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。当主备集群发生故障时需要排查监视器日志时,不知道到底数据库集群有没有部署确认监视器,有些时候用户人员交接的问题出现过不知道监视器的所在的服务器IP是多少。

 那么有监视器的集群,我们如何找到监视器的IP地址呢?

 

02  思路

1. 在达梦数据库中在2023年Q2的版本中提供v$dmmonitor视图,可以直接查询视图。

select * from v$dmmonitor;

image

image

具体视图链接在这里

https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-appendix.html#22.V$DMMONITOR

 

2. 当现场使用的数据库中的版本没有这个视图时或者现场没有查询权限等其他原因,那么如何解决该问题?

通过查看《DM8数据守护与读写分离集群V4.0.pdf》手册,看到下面这一句,监视器跟守护进程之间的消息走的是TCP协议。

image

既然走的是TCP协议,那么肯定走三次握手,那么查询对外的端口监听肯定能找到服务器IP地址。

基于TCP监听端口寻找监视器IP

第一步:在实例目录下查看dmmal.ini文件中守护进程与监视器通信的端口即MAL_DW_PORT端口,查找可得7436

 

image

第二步:使用netstat命令查看该端口的监听情况

ps:提供已经编写的命令,替换实际集群的MAL_DW_PORT端口后运行即可。

netstat -anp|grep 7436|grep ESTABLISHED|awk '{ print index($4,":7436")?$5:""}'

image

 

 以上是基于监视器服务拉起的情况下,才可以找到。如果监视器关闭服务,则无法找到监视器所在的服务器,需要自己重新创建一个

image

image

image

 

 [dmdba@~]$ vi /dmdata/dmdb/dmmonitor.ini

MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH = ../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.1.1:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT

MON_DW_IP = 192.168.1.2:5436

 

 

 

 

 

 

 

 

 

posted @ 2025-08-18 11:16  徐创业  阅读(58)  评论(0)    收藏  举报