達夢主備集群段錯誤(核心已轉儲)


 在給客戶部署兩套主備集群的時候,出現一件讓我非常頭疼的問題。

第一套集群在政務外網,第二套集群在互聯網。

部署第一套集群的時候,啟動達夢守護進程報錯(段錯誤(核心已轉儲)),主備節點都報錯,檢查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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM