暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【达梦】实时主备系统DG之基本术语概述

原创 李美静 2020-06-14
2383

1 达梦实时主备系统即DG

由主库,实时备库,守护进程和监视器组成。

主要功能:

实时数据同步:主备库通过实时归档完成数据同步,实时归档要求主库将RLOG_BUF发送到备库后,再将RLOG_BUF写入本地联机REDO日志文件。但要注意的是,备库确认收到主库发送的REDO日志,并不保证备库已经完成重演这些redo日志,因此主备库之间的数据同步存在一定的时间差。

2 关键特性

2.1 主备库切换

主备库正常运行过程中,可以通过监视器的swithover命令,一键完成主备库角色转换。主备库切换功能可以确保在软、硬件升级,或系统维护时,提供不间断的数据库服务。

2.2 自动故障处理

备库故障,不影响主库正常提供数据库服务,守护进程自动通知主库修改实时归档为INVALID状态,将实时备库失效。

2.3 自动数据同步

备库故障恢复后,守护进程自动通知主库发送归档REDO日志,重新进行主备库数据同步,并在历史数据同步后,修改主库的实时归档状态为valid,恢复实时备库功能。
备库接管后,原主库故障恢复,守护进程自动修改原主库的模式为standby,并重新作为备库加入主备系统。

2.4 备库接管

主库发生故障后,可以通过监视器的takeover命令,将备库切换为主库,继续对外提供服务。如果配置为自动切换模式,确认监视器可以自动检测主库故障,并通知备库接管,这个过程不需要人工干预。

2.5 备库强制接管

如果执行takeover 命令不成功,但主库可能由于硬件损坏等原因无法马上恢复,为了及时恢复数据库服务,DM提供了takeover force命令,强制将备库切换为主库。但需要由用户确认主库故障前,主库与接管备库的数据是一致的。也就是takeover force命令可能引发守护进程组分裂,而takeover命令是在确保不会产生组分裂情况下才允许执行。

3 守护进程

dmwatcher是DM数据守护系统不可或缺的核心部件,是数据库实例和监视器之间信息流转的桥梁。 数据库实例向本地守护进程发送信息, 接收本地守护进程的消息和命令;监视器(dmmonitor)接收守护进程的消息,并向守护进程发送命令;数据库实例与监视器之间没有直接的消息交互;守护进程解析并执行监视器发起的各种命令(Switchover/Takeover/Open force 等) ,并在必要时通知数据库实例执行相应的操作。

3.1 主要功能

守护进程是管理数据守护系统的核心部件,监视器(dmmonitor)负责发起命令,守护进程负责解析、处理命令。守护进程提供了数据库监控、故障检测、故障处理、故障恢复等各种功能。

4 OGUID

数据守护唯一标识码,配置数据守护时,需要由用户指定 OGUID 值。其中数据库的
OGUID 在 MOUNT 状态下由系统函数 SP_SET_OGUID 设置, 守护进程和监视器的 OGUID 值。在配置文件中设定。同一守护进程组中的所有数据库、守护进程和监视器,都必须配置相同的 OGUID 值,取值范围为 0~2147483647。OGUID 的查询方式:
select oguid from v$instance;
配置了相同 OGUID 的两个或多个守护进程,构成一个守护进程组。为方便管理,对每
个守护进程组进行命名,守护进程组中的所有守护进程和监视器,必须配置相同的组名。

5 组分裂

同一守护进程组中, 不同数据库实例的数据出现不一致, 并且无法通过重演 Redo 日志,重新同步数据的情况,我们称为组分裂。引发组分裂的主要原因包括:

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

6 脑裂

脑裂是同一个守护进程组中, 同时出现两个或者多个活动主库, 并且这些主库都接收用户请求,提供完整数据库服务。一旦发生脑裂,将无法保证数据一致性,对数据安全造成严重后果。
为预防脑裂做了大量工作,例如故障自动切换模式数据守护,必须配置确认监视器。确认监视器启动故障切换之前,会进行严格的条件检查,避免脑裂发生。守护进程一旦检测到脑裂发生,会马上强制退出主库,等待用户干预,避免数据差异进一步扩大。
造成脑裂的主要原因有两个:网络不稳定或错误的人工干预。为了避免出现脑裂,我们
建议:

  • 设置 dm.ini 参数 ALTER_MODE_STATUS=0,限制用户进行直接通过 SQL 修改数据库模式和状态。
  • 提供稳定、可靠的网络环境。
  • 配置自动切换数据守护时, 将确认监视器部署在独立的第三方机器上,不要与某一个数据库实例部署在一起,避免由于网络问题触发自动故障切换,导致脑裂发生。
  • 通过人工干预,将备库切换为主库之前,一定要确认主库已经发生故障,避免主库活动情况下,备库强制接管,人为造成脑裂。
最后修改时间:2020-06-15 10:55:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论