在学习主备集群和读写分离集群的过程中,关于集群中守护进程和监视器是整个集群学习和部署中重要的一部分。在学习理论知识时,因为主备守护进程的状态切换流程,容易混淆,所以通过这次理论的梳理和实验来重新加深学习和理解守护进程和监视器的功能及作用这一知识点。
守护进程是达梦主备和读写分离集群中重要的组件,主要用于数据库实例和监视器之间的信息流转。监视器负责发起命令,守护进程负责解析、处理、转发命令。实例向本地守护进程发送消息和接收本地守护进程的命令,监视器接受守护进程的消息并向守护进程发送消息。
(1)、监控数据库实例,监控数据库运行状态,必要时重启数据库服务;
(2)、发送实例信息和守护进程自身信息,定时发送给其他守护进程和监视器;
(3)、接受并解析其他守护进程的消息,监控其他守护进程;
(4)、接受并执行监视器的消息和操作。
接收主库的实例信息,并将消息传递给备库的守护进程和监视器。对故障进行实时检测,在条件允许的情况下进行主库故障的处理。
接收备库的实例信息,并将消息传递给主库的守护进程和监视器。对故障进行实时检测,在条件允许的情况下进行主库故障的处理。
接受主库和备库的守护进程传递过来的信息,可以通过管理命令向主备的守护进程发送指令来完成切换,故障处理等操作。
最基本的守护功能,用于监控本地数据服务。若当前实例是以mount的方式启动,则守护进程会通知mount的实例启动到open状态。若守护进程无法收到被监控实例的消息,在一段时间后会判断数据库故障,然后发起自动启动(前提是守护进程配置了INST_AUTO)。
实时主备、读写分离集群中,守护进程配置为全局守护。守护进程根据数据库服务器配置的归档类型来识别集群类型。全局守护在监控本地数据服务的基础之上,还可以和远程守护进程进行交互,此外还拥有主备切换,故障接管等功能。
主库发生故障时,确认监视器自动选择一个备库,切换为主库对外提供服务。故障自动切换模式,要求必须且只能配置一个确认监视器。
cat dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 5551
INST_INI = /data/dmdata/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/dmsoft/dmdbms/bin/DmServiceDM start
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
主库发生故障时,由用户根据实际情况,通过监视器命令将备库切换为主库。在用户操作之前,备库可以继续提供只读服务和临时表的操作。
cat dmwatcher.ini
[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 5551
INST_INI = /data/dmdata/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /data/dmsoft/dmdbms/bin/DmServiceDM start
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
(1)startup:启动状态,要根据远程守护进程的状态信息,以及本地数据库模式、状态和同步情况。确认启动模式和状态后,进入open状态。
(2)open:守护进程正常的工作状态,监控数据库,定时发送数据库的状态,以及接收其他守护进程发送的信息,接收监视器发送的用户请求。
(3)shutdown:已经停止工作的状态,当前状态下无法进行主备切换、故障处理等功能。
(4)switchover:主备库正常情况下,手动主备切换过程中设置为 Switchover 状态。
(5)failover:远程备库故障后,本地主库执行故障处理时,守护进程设置为Failover状态。
(6)recovery:故障恢复同步历史数据过程中为 Recovery 状态。
(7)confirm:通过监视器确认远程库是否活动的过程中,守护进程设置为Confirm状态。
(8)takeover:主库确认故障后,备库手工接管或监视器通知自动接管过程中,守护进程设置为Takeover 状态。
(9)open force:借助监视器命令强制Open主库或备库实例时,守护进程设置为Open force状态。
(10)error:超过一段时间没有接收到远程守护进程消息,本地守护进程或监视器认定远程守护进程故障,改变守护进程为Error。
(1)监控数据守护进程,接受守护进程发送的消息,显示集群状态变化
(2)管理数据守护进程,可以对集群进行启停以及切换主备的操作
(3)确认集群状态信息,用于自动切换前的环境信息确认
(4)发起接管命令,用于自动切换情况下主库故障,通知备库接管
普通监视器之间相互独立,互不干扰。所有普通监视器都可以接收守护进程消息,获取守护系统状态,也可以执行监控命令。但守护进程一次只能接收一个监视器的命令,在命令执行完成前,守护进程收到其他监视器发起的请求,会直接报错。
MON_DW_CONFIRM = 0 #监视器模式
MON_LOG_PATH = /data/dmlog/mon_log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 256 #限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 5551
MON_DW_IP = 192.168.197.11:52141
MON_DW_IP = 192.168.197.12:52141
确认监视器用于普通监视器的所有功能,此外确认监视器还可以自行状态确认和故障情况下的自动接管。在数据守护系统的故障自动切换模式下,必须部署一个确认监视器,否则在出现数据库故障时,会导致数据库服务中断。
MON_DW_CONFIRM = 1 #监视器模式
MON_LOG_PATH = /data/dmlog/mon_log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔60s定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大32M
MON_LOG_SPACE_LIMIT = 256 #限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 5551
MON_DW_IP = 192.168.197.11:52141
MON_DW_IP = 192.168.197.12:52141
[root@dm ~]# poweroff
守护进程采用超时机制判断远程守护进程是否故障,当前备库通过模拟故障已经停止了工作,停止时间超过了守护进程配置文件中设置的DW_ERROR_TIME的值,即超出了故障判断时间。因此当前集群环境判断备库守护进程故障并提示报错。
恢复备库故障后,监视器中备库的守护进程进行了四次状态的切换:
(1)NONE-->STARTUP
此时备库机器恢复,守护进程开始启动服务
(2)STARTUP-->UNIFY EP-->STARTUP
守护进程在 Startup 或 Open 状态下通知实例执行相关操作,都进入 Unify_ep 状态执行。
(3)STARTUP-->OPEN
备库从故障中恢复并重启后,当前存在活动的主库,由主库发起恢复过程,将备库重新恢复到一致的状态。
[root@dm ~]# poweroff
通过模拟备库故障,监视器中主库的守护进程进行了四次状态的切换:
(1)OPEN-->STARTUP
备库故障后,备库的守护进程暂时还处在活动状态时,主库的守护进程会切换到startup状态。
(2)STARTUP-->MON CONFIRM
此时备库已经完全故障停机,但是主备库之间的归档仍然有效,所以主库会先切换到CONFIRM状体,等待监视器的进一步故障判断和确认消息。
(3)MON CONFIRM-->FAILOVER
这时,监视完成了对备库的状态的判断,确认备库故障,向主库发送确认消息。主库这时会切换到FAILOVER状态,将备库的归档判断为失效。
(4)FAILOVER-->OPEN
在完成把备库归档全都判断为失效之后,守护进程重新切换到open状态,对外提供服务。
[dmdba@dm ~]$ disql sysdba/Dameng_123:5136
服务器[LOCALHOST:5136]:处于主库打开状态
登录使用时间 : 5.210(ms)
disql V8
SQL> create table test2.test_ERROR(id int);
操作已执行
已用时间: 18.194(毫秒). 执行号:801.
SQL> commit;
操作已执行
已用时间: 0.299(毫秒). 执行号:802.
SQL>
恢复备库故障后,监视器中主库的守护进程进行了两次状态的切换:
(1)OPEN-->RECOVERY
这时备库从故障中恢复,仍处于活动的主库收到了消息。根据当前的状态的,由主库守护进程发起了RECOVERY流程。
(2)RECOVERY-->OPEN
此时主库完成了RECOVERY的流程,将主备重新恢复到一致的状态,并重新切换的open状态对外提供服务。
[root@dm ~]# poweroff
通过模拟主库故障,监视器中备库的守护进程进行了两次状态的切换:
(1)OPEN-->TAKEOVER
因为当前为自动切换模式,主库确认故障后,由确认监视器完成判断并选择接管的备库,然后向备库发送消息通知备库进程接管。
(2)TAKEOVER-->OPEN
备库接受到来自确认监视器的消息后,备库发起了接管,接替了原先的主库。
要注意在之前的故障中,原先的备库已经完成了守护集群的接管,升级为了主库。恢复故障库后,监视器中新的主库的守护进程进行了两次状态的切换:
(1)OPEN-->RECOVERY
这时故障库从故障中恢复,仍处于活动的主库收到了消息。根据当前的状态的,由主库守护进程发起了RECOVERY流程。
(2)RECOVERY-->OPEN
此时主库完成了RECOVERY的流程,将主备重新恢复到一致的状态,并重新切换的open状态对外提供服务。
[root@dm ~]# poweroff
守护进程采用超时机制判断远程守护进程是否故障,当前主库通过模拟故障已经停止了工作,停止时间超过了守护进程配置文件中设置的DW_ERROR_TIME的值,即超出了故障判断时间。因此当前集群环境判断主库守护进程故障并提示报错。
要注意在之前的故障中,原先的备库已经完成了守护集群的接管,升级为了主库。恢复故障库故障后,监视器中故障库的守护进程进行了多次状态的切换:
(1)NONE-->STARTUP
此时故障库机器恢复,守护进程开始启动服务
(2)STARTUP-->UNIFY EP-->STARTUP
守护进程在 Startup 或 Open 状态下通知实例执行相关操作,都进入 Unify_ep 状态执行。
(3)STARTUP-->OPEN
故障库从故障中恢复并重启后,当前存在活动的主库(之前发起了takerover的备库),由主库发起恢复过程,将备库重新恢复到一致的状态。
守护进程和监视器是主备集群,读写分离集群重要的组成部分和管理操作手段。守护进程能够有效的维护集群的稳定性,及时恢复故障的实例保障服务的可持续行和可用性。监视器为集群的管理和运维提供了相应的命令和操作手段,为运维工作提供了便利。了解和学习守护进程功能作用,能够帮助我们有效了解监视器中显示的集群状态,了解集群的健康状况,方便后续的运维工作。
文章
阅读量
获赞