在深入了解达梦数据库后,我们会知道监视器服务和守护进程服务都是很重要的一部分,它们主要用来监控数据库状态,并在异常情况下进行故障处理。
以下我们对这两个服务进行一些测试,来了解它们的工作特性。
首先搭建了一主一备的集群,启动非确认监视器信息如下:
一、监视器正常情况下的主备
模拟主库发生异常:
- 将主库数据库进程KILL(由于dmwatcher进程,kill后会很快进程会被重新拉起)
- 查看主库和备库的状态 原主库(OPEN) MODE变成STANDBY/ 原备库(OPEN)MODE变成PARMARY
现象:主备模式发生切换
模拟备库发生异常:
- 将备库数据库进程KILL(由于dmwatcher进程,kill后会很快进程会被重新拉起)
- 查看主库和备库的状态
现象:主库会短暂的进入suspend挂起状态,然后变为open。
二、监视器异常情况下的主备(如监视器服务器网络断开)
模拟主库数据库服务发生异常:
- 将主库数据库进程KILL(由于dmwatcher进程,kill后会很快进程会被重新拉起)
- 查看主库和备库的状态
主库(OPEN)
备库(OPEN)
现象:主备模式无变化,数据库依然正常对外提供服务。
模拟主库数据库服务和守护进程都发生异常:
- 将主库数据库进程和守护进程都KILL
- 查看主库和备库的状态
- 恢复主库守护进程和数据库服务进程后,主库和备库的状态都为OPEN,恢复正常。
备库(OPEN)
现象:备库模式虽然处于OPEN状态,可依旧为standby模式。无法正常对外提供服务。
模拟备库发生异常:
1.将备库数据库进程KILL(由于dmwatcher进程,kill后会很快进程会被重新拉起)
2.查看主库和备库的状态
主库:(SUSPEND)
备库:(OPEN)
3.查看主库的log日志
显示是由于主库将存档日志发送到远程实例失败,导致主库挂起
4.此时数据库处于挂起状态,无法对外提供正常服务,此时只需要恢复监视器服务即可故障恢复(主库:->MON CONFIRM->FAILOVER->OPEN->RECOVER->OPEN)
现象:监视器服务断开后,主库出现故障后,备库不会正常切换成主库,但主库服务恢复正常后,主备依旧可以正常使用;备库出现故障时,主库会变成挂起状态,无法正常提供服务,就算备库恢复正常后,也不会故障恢复变为OPEN。
根据以上情况进行总结如下:
- 依靠监视器服务,主备才能进行正常的故障切换。
- 依靠守护进程服务,数据库服务在出现异常断开时才能被自动拉起。
- 当主库将存档日志发送到远程实例失败,会挂起,且就算备库恢复正常后,由于没有监视器提供信息,也无法正常OPEN
- 无监视器时,主库自身的异常和恢复过程对备库无影响,且恢复后可正常使用
另外就守护进程服务,还有一点需要说明,并非只有集群下才能使用,单机达梦也可以设置并起到相同的作用。
以下是单机守护进程的搭建过程
①修改达梦dm.ini中MAL_INI=1,DW_PORT=9997
②disql执行以下命令
alter database mount;
sp_set_oguid(453331);
alter database open;
③实例目录下创建dmmal.ini,内容:
[MAL_INST]
MAL_INST_NAME=DMSERVER #和dm.ini中INSTANCE_NAME对应
MAL_HOST=127.0.0.1
MAL_PORT=9998
MAL_INST_HOST=127.0.0.1
MAL_INST_PORT=5236 #和dm.ini中PORT_NUM对应
MAL_DW_PORT=9999
④实例目录下创建dmwatcher.ini,内容:
[GRP1]
DW_TYPE = LOCAL #全局守护类型
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /opt/dmdbms/bin/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
⑤重启实例
⑥注册守护进程服务:cd /opt/dmdbms/script/roo t执行./dm_service_installer.sh -t dmwatcher -p DM -i /opt/dmdbms/bin/DAMENG/dmwatcher.ini
⑦修改目录权限:chown -R dmdba:dinstall /opt/dmdbms和实例目录
⑧启动守护进程服务: service DmWatcherServiceDM start