数据库运维
记录DBA学习成长历程

DM8-数据守护MAL系统

文章目录
MAL系统是基于TCP协议实现的一种内部通信机制,具有可靠、灵活、高效的特性。DM通过MAL系统实现redo日志传输,以及其他一些实例间的消息通讯。

OGUID

数据守护唯一标识码,配置数据守护时,需要由用户指定OGUID值。其中数据库的OGUID在MOUNT状态下有系统函数SP_SET_OGUID设置,守护进程和监视器的OGUID值在配置文件中设定。
通以守护进程组中的所有数据库、守护进程和监视器,都必须配置相同的OGUID值,范围0-2147483647
查看OGUID。
select oguid from v$instance;

守护进程组

配置了相同OGUID的两个或多个守护进程,构成一个守护进程组。为方便管理,对每个守护进程组进行命名,守护进程组中的所有守护进程的监视器,必须配置相同的组名。

组分裂

同一守护进程组中,不同数据库实例的数据出现不一致,并且无法通过重演redo日志重新同步数据的情况,我们称为组分裂,原因:
1、即时归档中,主库将redo日志写入本地联机redo日志文件之后,发送redo日志到备库之前出现故障,导致主备库数据不一致,为了继续提供服务,执行备库强制接管。此时,当故障主库重启后,就会引发组分裂。
2、故障备库重新完成数据同步之前,主库硬件故障,并且长时间无法恢复;在用户接受丢失部分数据情况下,为了尽快恢复数据库服务,执行备库强制接管,将备库切换为主库。此时,如果故障主库重启,也会造成组分裂。
检测到组分裂后,守护进程会修改控制文件为分裂状态,被分裂出去的数据库需要通过备份还原等技术手段重新恢复。

脑裂

脑裂是同一个守护进程中同时出现两个或多个活动主库,并且这些主库都接收用户请求,提供完成数据库服务。一旦发生脑裂,将无法保证数据一致性,对数据安全造成严重的后果。
DM数据守护系统为预防脑裂做了大量工作,例如故障自动切换模式的数据守护必须配置确认监视器。确认监视器启动故障切换之前,会进行严格的条件检查,避免脑裂发生。守护进程一旦检测到脑裂发生,会马上强制退出主库,等待用户干预,避免数据差异进一步扩大。
造成脑裂的主要原因两:网络不稳定或错误的人工干预,建议:
1、设置dm.ini参数ALTER_MODE_STATUS=0,限制用户进行直接通过SQL修改数据库模式,状态以及OUGID。
2、提供稳定可靠的网络环境。
3、配置自动切换数据守护时,将确认监视器部署在独立的第三方机器上,不要与某一个数据库实例部署在一起,避免由于网络问题触发自动故障切换,导致脑裂发生。
4、通过人工干预,将备库切换为主库前,一定要确认主库已经发生故障,避免主库活动情况下,备库强制接管,人为造成脑裂。

!!!!!!!!配置数据守护时,数据库实例名不建议配置为 Primary/Standby,守护进 程组名不建议配置成和实例名相同,避免在描述对象时产生歧义。

内容来自官方文档!

赞(1)
MySQL学习笔记 » DM8-数据守护MAL系统