守护进程“独辟蹊径”

2024-01-07 20:04:04

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秒左右足够。

文章来源:https://blog.csdn.net/ai20110304/article/details/135376112
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。