2.2.2 监视器
监视器(dmmonitor)是基于监视器接口实现的一个命令行工具,是DM数据守护系统的重要组成部分。通过监视器,可以监控数据守护系统的运行情况,获取主备库状态、守护进程状态及主备库数据同步情况等信息。同时,监视器还提供了一系列命令来管理数据守护系统。
1. 基本作用
概括起来,达梦数据库监视器的基本作用如下。
1)监控数据守护系统
接收守护进程发送的消息,显示主备库状态变化,以及监控故障切换过程中数据库模式、状态变化的完整过程。
2)管理数据守护系统
用户可以在监视器上输入命令,启动、停止守护进程的监控功能,执行主备库切换、备库接管等操作。
3)确认状态信息
在故障自动切换的数据守护系统中,主备库进行故障处理之前,需要通过监视器进行信息确认,确保对应的备库或主库真的发生异常了,避免主备库之间网络故障引发脑裂。
4)发起故障自动接管命令
用于故障自动切换的数据守护系统中,当主库发生故障时,挑选符合接管条件的备库,并通知备库执行接管操作。
【注意】对于实时主备和读写分离集群,监视器只允许配置一个守护进程组;MPP主备允许配置多个守护进程组,并且要求这些守护进程组的主库必须是同一套MPP系统;对于本地守护类型,允许和实时主备/读写分离集群/MPP主备配置到同一个守护进程组作为异步备库,如果不作为某个实例的异步备库,只是普通的单机配置为本地守护类型,则需要单独成组,并且监视器也不允许配置多个守护进程组。
2. 监视器类型
监视器支持两种运行模式:监控模式和确认模式。监视器运行模式由配置文件(dmmonitor.ini)的MON_DW_CONFIRM参数来确定。MON_DW_CONFIRM参数的默认值是0,表示监控模式;当MON_DW_CONFIRM参数值为1时,表示监视器运行在确认模式下。为了区分监视器的两种模式,将运行在确认模式下的监视器称为确认监视器,将运行在监控模式下的监视器称为一般监视器。
1)监控模式
在一个数据守护系统中,最多允许同时启动10个监视器,所有监视器都可以接收守护进程消息,获取守护系统状态。所有监视器都可以发起Switchover等命令,但守护进程一次只能接收一个监视器的命令。在一个监视器命令执行完成之前,若守护进程收到其他监视器发起的请求,则会直接报错返回。
2)确认模式
和监控模式一样,确认监视器接收守护进程消息,获取数据守护系统状态,也可以执行各种监控命令。区别在于,除具备监控模式监视器的所有功能外,确认监视器还具有状态确认和自动接管两个功能。此外,在一个数据守护系统中,只能配置1个确认监视器。在故障自动切换模式的数据守护系统中,必须部署一个确认监视器,否则在出现实例故障时,数据库服务会中断。
3. 状态确认
状态确认只对故障自动切换模式的数据守护系统有效,在手动切换模式下,不需要状态确认。在故障自动切换模式的数据守护系统中,当主库守护进程监测到备库故障时,需要向确认监视器求证,确认备库是否发生故障,再启动故障处理流程将归档失效,避免引发脑裂。例如,当主库发生网络故障时,主库直接将归档失效且继续以Primary模式提供服务;同时,确认监视器认为主库故障,将备库切换为Primary模式,守护进程组中同时出现多个主库,引发脑裂。
主库守护进程在满足一定条件时,会切换到Confirm状态,向确认监视器进行求证。主库守护进程切换到Confirm状态之后,会根据不同的场景决定是否切换为Failover状态并启动故障处理流程。
下面列举出几种常见场景的状态确认方式,如图2-7所示。注意:前提是主库的守护进程已经处于Confirm状态。
(1)场景1:主库网络故障,主库到备库、主库到确认监视器的连接异常。在这种情况下,主库守护进程一直保持Confirm状态,不会启动故障处理流程。
(2)场景2:备库故障或备库网络故障,主库守护进程会切换为Failover状态,并启动故障处理流程。
(3)场景3:主备库之间网络故障,但与确认监视器之间的网络正常,确认监视器确认主库满足Failover执行条件,主库守护进程会切换为Failover状态,并启动故障处理流程,否则主库守护进程一直保持Confirm状态。
图2-7 常见场景的状态确认方式
4. 自动接管
在故障自动切换模式下,确认监视器在检测到主库故障后,会根据收到的主备库LSN、归档状态、MAL链路状态等信息,确定一个接管备库,并将其切换为主库。
确认监视器启动自动接管流程的主要场景有以下3种,任何一种场景都会导致备库自动接管。
(1)场景1:主库数据库实例异常终止,主库守护进程正常。
(2)场景2:主库硬件故障或数据库实例和守护进程同时故障。
(3)场景3:主库网络故障,主备库之间、主库与监视器之间连接异常。
若想实现备库自动接管,主库、归档状态、备库都必须符合一定条件才行。
(1)主库条件:主库在Primary模式、Open状态下产生故障,如图2-8(a)、图2-8(b)所示;主库守护进程故障,主库在故障前处于Open/Recovery状态,如图2-8(b)所示;故障主库与接管备库和确认监视器之间的MAL链路断开,如图2-8(c)所示。
(2)归档状态条件:故障主库到接管备库的归档状态为Valid。
(3)备库条件:接管备库在Standby模式、Open状态下;接管备库的dmwatcher.ctl控制文件状态为Valid;故障主库和接管备库的dmwatcher.ctl控制文件相同。
图2-8 自动接管
【注意】如果主库在发生故障前,正在执行Switchover/Takeover等命令,则备库不会自动接管,需要人工干预。确认监视器要求一开始就启动,保证在出现故障情况时,确认监视器已经收到了故障主库或备库的历史消息,否则会因为条件不足无法自动处理,需要通过命令方式人工干预。确认监视器不要和主库部署在一台机器上,避免主库在出现网络故障时,备库无法自动切换为主库。确认监视器不要和备库部署在一台机器上,避免当主备库之间网络出现异常时,确认监视器误认为主库故障,将备库切换为主库,引发双主库问题。