达梦主备集群段错误(核心已转储)

 在给客户部署两套主备集群的时候,出现一件让我非常头疼的问题。

第一套集群在政务外网,第二套集群在互联网。

部署第一套集群的时候,启动达梦守护进程报错(段错误(核心已转储)),主备节点都报错,检查dm.ini 、 dmarch.ini 、 dmmal.ini和dmwatcher.ini,都没发现有任何错误。这个时候我们猜测,会不会是安装包的问题,我们用的安装包如下:dm8_20210915_HWarm_centos7_64_ent_8.1.2.70.iso

这是最新的安装包,我之前没用这个安装包部署过集群,猜测可能是安装包中有bug。正好,在客户的第二套集群上试一下,看看会不会出现同样的问题。

吭哧吭哧部署完后,发现互联网上的那套集群,一切正常,这下傻眼了,检查了下集群配置,政务外网的和互联网的集群配置一模一样,那为什么政务外网那套集群会报错呢?

接下来开始正式排查问题。

一、查看报错信息

 

 

 

 

这是启动守护进程时报的错,从报错信息上看不出什么问题,后来也查看了watcher的日志,也没发现什么问题,最后只能生成core文件,查看core文件中的报错信息。

二、生成core文件

集群出现问题,core文件一般会自动生成,可以直接查找对应的core文件,也可以指定core文件生成路径。

1、直接查找core文件

因为我们是在启动dmwatcher的时候报错,所以可以直接通过守护进程的关键字进行查找。

1)、find查找  

find / -name *dmwatcher*

查到的内容如下:

 

2)、拷贝出来

如果觉得直接在这里查看不方便,可以拷贝最新的core到指定目录,最好把名字重命名一下,默认的名称太长了。

cp拷贝出来拷贝最新的,一般最下面的比较新:

cp /var/lib/systemd/coredump/core.dmwatcher.1001.88045ab03b7c437bb3b6ebbc53218cb6.16566.1631948801000000000000.lz4  /home/dmdba/

3)、Lz4解压

lz4 core.dmwatcher.1001.88045ab03b7c437bb3b6ebbc53218cb6.16566.1631948801000000000000.lz4

4)、重命名

   mv core.dmwatcher.1001.88045ab03b7c437bb3b6ebbc53218cb6.16566.1631948801000000000000 core.16566

5)、查看core

[root@localhost dmdba]# cd dmdbms/bin

[root@localhost bin]# gdb /home/dmdba/core.16566

 

输入bt

 

6)、猜测

core报错说“连接已存在”,猜测可能是ip和端口冲突导致的。

ps -ef|grem dmserver

ps -ef|grem dmwatcher

用上面两个命令没查到有重复的进程,咨询了下客户,客户说当前部署的ip没有部署过其他集群。

集群是ip+端口组合相同才会冲突,所以猜测肯定是有哪里占用这个ip了,但是一时半会查不出来,不过没关系,我们可以调整集群的端口。

2、指定core文件生成位置

用root执行下面语句即可。

echo "/home/dmdba/dmdbms/bin/corefile-%e" > /proc/sys/kernel/core_pattern   

指定好后再启动守护进程,报错进行就生成core了。

三、验证

为了以放万一,我把实例名、端口和OGUID全改了。

1、主库

1)、dm.ini

说明:原来实例名称为GRP1_RT_01,数据库实例监听端口为32141。

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME  = GRP2_RT_01
PORT_NUM  = 32241 #数据库实例监听端口
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 次的日志发送信息

2)、dmarch.ini

说明:原来实时归档目标实例名为GRP1_RT_02。

[ARCHIVE_REALTIME]
ARCH_TYPE  = REALTIME #实时归档类型
ARCH_DEST  = GRP2_RT_02  #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE  = LOCAL #本地归档类型
ARCH_DEST  = /home/dmdba/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 1024  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 51210 #单位 Mb,0 表示无限制,范围 1024~2147483647M

3)、dmmal.ini

注意:原来实例名为GRP1_RT_01,系统监听 TCP 连接的端口为61141和61142,实例的对外服务端口为32141和32142,实例本地的守护进程监听 TCP 连接的端口为52141和52142。

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP2_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.135.13 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61241 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.40.13 #实例的对外服务 IP 地址
MAL_INST_PORT = 32241 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT  = 52241 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33241 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP2_RT_02
MAL_HOST = 192.168.135.14
MAL_PORT = 61242
MAL_INST_HOST = 172.16.40.14
MAL_INST_PORT = 32242
MAL_DW_PORT  = 52242
MAL_INST_DW_PORT = 33242

4)、dmwatcher.ini

注意:原来OGUID为453331。

[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10  #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10  #本地实例故障认定时间
INST_OGUID = 453332  #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/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 #指定备库重演日志的时间阈值,默认关闭

2、备库

1)、dm.ini

#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME  = GRP2_RT_02
PORT_NUM  = 32242 #数据库实例监听端口
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 次的日志重演信息

2)、dmarch.ini

[ARCHIVE_REALTIME]
ARCH_TYPE  = REALTIME #实时归档类型
ARCH_DEST  = GRP2_RT_01  #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE  = LOCAL #本地归档类型
ARCH_DEST  = /home/dmdba/arch #本地归档文件路径
ARCH_FILE_SIZE = 1024  #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT  = 51210 #单位 Mb,0 表示无限制,范围 1024~2147483647M

3)、dmmal.ini

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = GRP2_RT_01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.135.13 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61241 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 172.16.40.13 #实例的对外服务 IP 地址
MAL_INST_PORT = 32241 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT  = 52241 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 33241 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = GRP2_RT_02
MAL_HOST = 192.168.135.14
MAL_PORT = 61242
MAL_INST_HOST = 172.16.40.14
MAL_INST_PORT = 32242
MAL_DW_PORT  = 52242
MAL_INST_DW_PORT = 33242

4)、dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10  #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10  #本地实例故障认定时间
INST_OGUID = 453332  #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/data/DAMENG/dm.ini  #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭

3、监视器

注意:原来OGUID为453331。

原来的 MON_DW_IP = 172.16.40.13:52141
原来的 MON_DW_IP = 172.16.40.14:52142
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/log #监视器日志文件存放路径
MON_LOG_INTERVAL  = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32  #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453332 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以―IP:PORT‖的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 172.16.40.13:52241
MON_DW_IP = 172.16.40.14:52242

四、结论

修改端口后,集群正常了。应该是ip+端口组合被占用了,换个端口就好了。

在安装监视器的时候又踩了一个坑,在备库上安装个监视器没有问题,但是当把监视器移到第三台机器上,启动监视器后,会自动kill守护进程。检查发现是第三台机器服务器数据库版本过低导致的。可以升级数据库,或者就把监视器放在备库。

 

 

 

更多资讯请上达梦技术社区了解: https://eco.dameng.com

posted @ 2021-09-23 10:49  xiaowu222  阅读(779)  评论(0编辑  收藏  举报