守护进程“独辟蹊径”
- 一、前言
- 二、实际运用
- 2.1 知识介绍
- 2.2 单机库场景应用
- 2.2.1 配置dmwatcher.ini
- 2.2.2 注册后台守护服务
- 2.2.3 配置dmmal.ini
- 2.2.4 配置归档和守护OGUID
- 2.2.5 开启mal
- 2.2.6 启动守护
- 2.2.7 测试dmserver异常退出
- 三、总结
DM技术交流QQ群:940124259
一、前言
面对24小时不间断的业务系统,如遇到数据库进程异常退出(某个特殊bug触发)或OOM killer,是否能快速自动恢复服务?为此给我们带来了一些思考,DM8数据库是否有像MySQL数据库的守护进程mysql_safe进程保护机制?只能自己写脚本实时监测数据库状态和进程是否异常,便立即处理?
答案:达梦数据库有提供类似于mysql_safe的数据守护机制,因此完全没必要费心思自己编写脚本。
二、实际运用
2.1 知识介绍
达梦数据库提供一种数据守护集群的技术,利用dmwatcher守护进程实时监测数据库状态和进程,能够自动拉起dmserver进程并重新打开数据库,继续对外提供服务。虽然数据守护主要运用于数据库守护集群,但它也可以变型运用于单机数据库,为单机库提供实例保护和自我恢复功能。
守护进程核心参数说明dmwatcher.ini
2.2 单机库场景应用
数据库版本:1-2-192-2023.05.17-190669-20033-ENT
数据守护版本:v4.0
2.2.1 配置dmwatcher.ini
[LOCAL_DW_DMLOG] # 守护组标识名称(个人习惯:LOCAL_DW_实例名),不超过16个字符即可。
DW_MODE=MANUAL # 手工模式(单机库)
DW_TYPE=LOCAL # 本地守护(单机库)
INST_ERROR_TIME=10 # 实例故障认定时间阀值
INST_OGUID=20231230 # 目标实例的守护唯一标识
INST_INI=/dmdata/DMLOG/dm.ini # 数据库实例dm.ini路径
INST_STARTUP_CMD=/opt/dmdbms/bin/dmserver # 自拉起命令或服务脚本
INST_AUTO_RESTART=1 # 自动拉起开关
将dmwatcher.ini放在config_path路径下
2.2.2 注册后台守护服务
注意:root账户执行脚本注册。注册脚本位于数据库软件的安装主目录script下。
/opt/dmdbms/script/root/dm_service_installer.sh -t watcher_ini /dmdata/DMLOG/dmwatcher.ini -p DMLOG
systemctl list-unit-files |grep DmW
2.2.3 配置dmmal.ini
配置文件统一存放于config_path路径。config_path查看方法见2.2.1
MAL_CHECK_INTERVAL = 5 # 链路检测间隔时间,单位秒。
MAL_CONN_FAIL_INTERVAL = 5 # 链路连接异常认定时长,单位秒。
[MAL_INST0]
mal_inst_name=DMLOG # 实例名,必须于dm.ini文件中参数instance_name取值相同。
mal_inst_host=192.168.1.120 # 对外提供数据库服务的实例地址。
mal_inst_port=5236 # 对外提供数据库服务的实例端口。
mal_inst_dw_port=7236 # 守护进程监测本地实例的监听端口,故障认定、状态检测
mal_host=192.168.1.120 # 内部链路监听地址。
mal_port=8236 # 内部链路监听端口。
mal_dw_port=9236 # 本地守护进程监听端口,远程守护/监听器相互之间通讯端口
2.2.4 配置归档和守护OGUID
注意:
1)如果数据库已经开启归档,可省略本步骤。
2)归档空间上限space_limit设定根据实际情况。
3)如果不想因开启归档占用磁盘空间,可以忽略alter database add archivelog 步骤,它会产生一个大小为0的dmarch.ini配置文件(空内容),则以后数据库是不会实际产生任何归档日志的输出,但归档的开关对于实例守护是关键步骤,动作必做。
比如:我的测试环境单机库dmarch.ini
-- 配置归档和OGUID
SQL> alter database mount ;
SQL> SP_SET_OGUID(20231230);
SQL> alter database add archivelog 'type=local, dest=/dmdata/DMLOG/dmarch,file_size=128, space_limit=10240';
SQL> alter database archivelog ;
SQL> alter database open ;
确认查看数据库是否开启归档,两种方法
1)select arch_mode from v$database;
2)show parameter arch_ini
2.2.5 开启mal
通常情况下,单机库是没开启mal内部链路。
-- 修改此静态参数后,重启数据库才能生效
SQL> ALTER SYSTEM SET 'MAL_INI' = 1 SPFILE;
SQL> SELECT SF_GET_PARA_VALUE(1,'MAL_INI'), INSTANCE_NAME, OGUID FROM V$INSTANCE;
su - dmdba
DmServiceDMLOG restart
2.2.6 启动守护
su - dmdba
DmWatcherSerivceDMLOG start
ps -ef | grep dmw
2.2.7 测试dmserver异常退出
通过kill模拟dmserver异常故障,dmwatcher守护进程会自动拉起dmserver服务。
三、总结
- 1)达梦的数据守护集群分不同时期的版本,现最常用的是数据守护4.0,不同版本的配置细节则不同,请根据实际版本正确配置。
- 2)被守护数据库实例oguid和守护进程配置的oguid必须一致。
- 3)本环境的测试版本数据地守护4.0,必须开启归档模式(满足归档开启就行【可能未具体配置归档参数】)和MAL链路(4个端口配置不可缺少【mal_inst_port/mal_inst_dw_port/mal_port/mal_dw_port】),这两个配置是守护的前提条件。
- 4)对于数据库实例的故障认定时长(inst_error_time/mal_conn_fail_interval),根据自己的实际容忍时长而定,一般5秒左右足够。