防大于治,做好数据保护的最后一公里

韩朝阳

小编荐语

今天的这篇文章,介绍的是Oracle高可用性架构中的一个重要成员:Oracle Active Data Guard。Oracle Active Data Guard可以确保企业数据的高可用性,实现数据保护和灾难恢复。在创建、维护和管理一个或多个同步备用数据库的同时避免灾难和数据损坏。Active Data Guard从Oracle 11g开始推出,历经多代发展,是一个非常成熟的数据库组件,保护着全球众多的关键业务系统和核心数据。

本文作者韩朝阳,是Oracle公司资深解决方案顾问,曾服务于国外某大型银行及Oracle公司数据中心。对Oracle数据库的体系结构、数据库的备份恢复原理和MAA架构有深入了解,同时具备丰富的性能调优经验。韩朝阳是Oracle Database 11g OCM、12c OCM,大家可以访问其个人网站http://www.ohsdba.cn/阅读其撰写的技术文章。

Oracle 高可用性架构

近些年,我们经常会听到数据库被勒索病毒攻击,或者数据库被加密,在网上或新闻中看到数据中心发生火灾水灾,造成业务瘫痪的报道,这些事也可能发生在我们身边。当我们静下来的时候,也可能会有一些思考,从这些惨痛的教训中能学到些什么呢?怎么做,才能保护好我们的数据资产呢?在问题或灾难发生时,通过什么方法能拯救我的关键数据呢?因为在任何时候防大于治。

我们也曾听到无意或恶意的“删库跑路” ,即使有备份,恢复起来往往需要很长时间,还可能会有数据丢失。我们知道应用大部分是无状态的,损坏了可以再部署,但是作为核心数据资产的数据库,一旦发生重大故障,造成数据损坏或丢失,可能就是灾难性的,甚至是毁灭性的。因此,很有必要为我们的数据资产多一层防护,保障数据资产的最后一公里。当出现故障或灾难时,减少或避免业务中断,进而减少经济损失,改善用户体验,降低社会影响。

MAA(Maximum Availability Architecture),高可用性架构,是一站式的解决方案,它的目标是确保Oracle数据库高可用,减少业务中断和系统宕机时间,是保障业务连续性的极佳实践。它解决了可能引起业务中断的各个因素:

  • 通过ASM解决了存储单点故障的问题

  • 通过RAC解决服务器的单点故障的问题,实现本地的高可用

  • 通过ADG、OGG解决站点级故障的问题,实现远端的高可用

  • 通过Flashback纠正人为的错误,快速恢复数据

  • 通过RMAN和ZDLRA实现终极数据保护

  • 通过应用连续性、全局数据服务减少或避免应用中断,实现业务透明切换,保障业务的连续性

Oracle Active Data Guard 概述

Oracle Active Data Guard是目前用于避免任务关键型Oracle数据库发生站点故障的全面解决方案。该解决方案能够在远端维护生产数据库的一个同步物理副本,从而以简单和经济的方式防止数据丢失和停机。如果生产数据库由于任何原因不可用,客户端连接可以迅速地(在某些配置中可以透明地)故障切换至同步副本以恢复服务。

下图是Oracle Active Data Guard和第三方实现容灾的不同维度对比。不论是从风险角度,方案复杂度和投资成本,还是从数据保护机制来看,Oracle Active Data Guard都是容灾的极佳选择。可以用十二个字来描述,“数据不丢,业务不断,运维简单”。

Active Data Guard 与Data Guard

对于数据库的灾备,Oracle在8i推出了Standby  Server,在9i融入了大量的新特性,并正式更名为Data Guard。Active Data Guard于Oracle 11gR1推出,是Oracle 数据库企业版的一个选件。用于创建和维护生产数据库的一个或多个同步副本,保护Oracle数据免受故障、灾难、人为错误和数据损坏的影响,同时为任务关键型应用提供高可用性。Active Data Guard还可以将报表分析、即席查询和数据提取分流到物理备库,从而消除高昂的闲置冗余成本。Active Data Guard 与Oracle数据库深度集成,并且完全专注于实时数据保护和可用性,避免了存储远程镜像或其他基于主机的复制解决方案存在的不利影响。Active Data Guard支持高级功能,是在Data Guard基本功能的基础上进行了扩展。这些高级功能包括:

  • 实时查询 — 将只读负载分流到新的备用数据库

  • 自动块修复 — 自动修复物理损坏,该操作对用户是透明的

  • 远程同步 — 任意距离均可实现零数据丢失保护

  • 备用块更改跟踪 — 在活动备用数据库上启用增量备份

  • Active Data Guard 滚动升级 — 可轻松缩短计划停机时间

  • 全局数据库服务 — 可在复制数据库之间实现负载平衡和服务管理

  • 应用连续性 — 将停机透明地呈现给用户

以下为Oracle Data Guard支持的主要特性:

以下为Oracle Active Data Guard支持的主要特性:

Data Guard 三大代表特性

目前Oracle数据库当前长期支持版本是Oracle 19c。Data Guard在稳定的基础上,功能也一直在增强,在每个版本中,都会引入一些很实用的特性。下面我们介绍一下Data Guard中三个比较有代表性的特性:

一、Active Data Guard

在Oracle 11g以前,物理备库以只读模式打开时,必须停止应用重做;应用重做时,数据库就不能打开。从11g开始,物理备库在应用重做的同时,还能以只读模式打开,我们把这个特性称为Active Data Guard。这个特性释放了备库的天性,因为主备库数据可以实时同步,因此我们在备库上查询的结果和主库上的操作是一致的。这样就起到了分流的作用,比如实现读写分离,减轻对主库的压力。除此之外,我们还可以将备份等工作放在备库上操作。

二、Far Sync 实例

远程同步实例,是在Oracle 12.1开始引入的。我们可以在距离生产中心相对较近的地点配置Far Sync实例,主库实时传输redo到Far Sync实例,由于距离近,网络延时小,对主库性能影响很小,同时还可以保证零数据丢失。然后Far Sync实例再将redo异步传送到远端备库,起到中转站的作用。它将数据保护的距离延伸到了无限远。

三、DML Redirect

DML重定向。Oracle Database 19c之前,在Active Data Guard环境中,您只能更新备用数据库上的全局临时表。在Oracle 19c中,您还可以更新常规表,我们称这个特性为DML重定向,建议在读多写少的场景下使用。其工作原理为:

  • 更新被重定向到主库

  • 在主库上更新后,生成并发送该更新到备库

  • 重定向更新在提交之前仅对会话可见,提交后对所有会话可见

Active Data Guard灾备库的类型

在Active Data Guard灾备环境中,为了满足不同的需要,可能会同时存在多种类型的灾备库。下面这张图包含了所有的灾备库类型。相对来说,Physical standby用得较多,Logical standby用得会少一些。

Primary database

生产库,也称为主库,它起主要作用。这是大多数应用程序访问的数据库。

Physical standby database

物理备库,提供和生产库在物理上相同的副本。在磁盘上,物理备库数据块和生产库是完全一致的。物理备库通过Redo Apply与主库保持同步,恢复从主库接收到的重做数据,并将重做应用到物理备库。从Oracle 11.1开始,物理备库可以在接收并应用重做日志的情况下,以只读的方式打开备库。因此,物理备库可以用于实时数据保护和实时报告分析。

Logical standby database

逻辑备库,包含与生产库相同的逻辑信息,数据的物理组织和结构可能不同。逻辑备库通过SQL Apply与主库保持同步,SQL Apply将从主库接收的重做中的数据转换为SQL语句,然后在备库上执行SQL语句。允许用户随时访问用于查询和报告目的的逻辑备库。此外,使用逻辑备库,您可以升级Oracle数据库软件和应用修补程序集,几乎不需要停机。通过dbms_rolling进行滚动升级就是借助逻辑备库来实现的。因此,逻辑备用数据库可以同时用于数据保护、报告分析和数据库升级。

Snapshot standby database

快照备库,是完全可更新的备用数据库。与物理或逻辑备库一样,快照备库从主库接收并归档重做数据。与物理或逻辑备用数据库不同的是,快照备库不应用其接收的重做数据。仅当快照备库转换回物理备库的时候才会应用之前接收的重做数据,然后继续和主库保持同步。因此,快照备库可还可以用于测试和相关场景。由于快照备库接收的重做数据只有在转换回物理备库用后才会应用,因此从主数据库故障中恢复所需的时间与需要应用的重做数据量成正比。

Far sync instance

远程同步实例,是Oracle Data Guard的一个目的地,主要用于远距离零数据丢失的场景。它接受主库的重做,然后将重做传递给Oracle Data Guard配置的其它成员。远程同步实例管理一个控制文件,将重做接收到备重做日志(SRL)中,并将这些SRL归档到本地归档的重做日志中。远程同步实例没有用户数据文件,不能打开访问,不能运行重做应用,也不能转换为主库或其它类型的备库。远程同步实例只消耗很少的磁盘和处理资源,但提供了故障转移到终端目的地的能力,并且没有数据丢失,还可以卸载主库的其他类型的开销,例如重做传输。远程同步实例是Oracle Active Data Guard特性的一部分,因此需要购买Oracle Active Data Guard授权。

Active Data Guard的保护模式和常用架构

下图是Oracle Active Data Guard的保护模式,建议使用Maximum Availability模式,可根据实际情况,考虑是否采用Far Sync实例。Oracle Active Data Guard的部署很简单,也很稳定。对底层的存储设备没有要求,只要主备库的数据库版本和字节序一致就好,不论是集群,还是单机,使用文件系统或者ASM都没有问题。通常情况下,为了保证备库切换为主库后的性能和体验,我们建议备库使用同等的配置。如果只是作为数据保护,一台PC加本地硬盘或许也能搞定。

下图的配置,是通用的配置,也只经典的配置。这种模式,一般在同机房或者在同城内使用。

下图的配置,增加了Far Sync实例,在这种模式下,灾备的距离就拉伸了很远。可以到达全球任何一个有网络通达的地方。

下面的配置,是经典的两地三中心的配置,也使用了Far Sync实例,确保灾备能真正的发挥作用,数据得到有效保护。

除了以上的经典配置外,我们还可以根据实际情况,设计更合理的架构,下面也是比较常用的架构:

Active Data Guard的管理和监控

上面我们介绍了Active Data Guard的多种架构图。大家可能会觉得,这么多数据库,管理起来会比较复杂。其实管理起来非常简单。我们推荐使用管理神器Data Guard Broker,功能特别强大,和手动管理相比,一方面节省了时间,另一方面减少了人为配置的失误,提升了健壮性和稳定性,也是实现主备一键切换的基石。使用Data Guard Broker还有其他的优势,比如:

1.从12.1.0.2开始,如果是Oracle Restart,Oracle RAC One Node或者是Oracle RAC,Oracle集群会动态自动管理与DG Broker相关的StaticConnectIdentifier、DGConnectIdentifier、listener.ora和tnsnamess.ora的相关工作,无需再配置"_DGMGRL"或"_DGB"。这就大大简化了配置工作。

2.redoroutes大大的简化了redo传输和主备切换的配置工作,比如下面的配置

edit database pgold set property 'redoroutes'='(local : (ptwcfs1 fastsync priority=1, ptwcfs2 fastsync priority=2), psilver sync)';

3.自带健康检查功能,通过validate命令就可以很方便的检查DG配置是否存在问题,也可以检查是否具备切换的条件。

validate database verbose pgold;

4.和企业管理器(Oracle Enterprise Manager Cloud Control)很好地结合,通过浏览器就可以做所有的工作,更直观,更便捷。

Active Data Guard和数据库整合

从Oracle 12c开始,Oracle还引入了多租户功能,这个特性也很实用。如果您有多个数据库,通过这个选件,还可以很方便的将多个数据库整合在一个容器数据库内。多租户选件对应用是透明的,因此应用程序无需做任何更改。如果容器数据库内的PDB数量不超过3个,是不收取多租户选件的费用的。整合之后,硬件成本和授权成本会明显降低。还将大大降低运维的难度和复杂度,数据库管理员可以更轻松地管理和监控数据库,应用补丁,数据库升级迁移更容易。如果对整个CDB做容灾,就更方便了,以下图为例,之前需要搭建3套Active Data Guard环境,现在一套就够了。

Active Data Guard和客户端连接

不论是任何语言开发的应用程序,要连接Oracle数据库,必须具备三个要素,IP地址、端口、服务名。IP地址建议使用SCAN地址,端口是可定制的,服务名建议用自己创建的,也就是非默认的。说到服务名,我们稍微多说一点,这个服务名真的很重要。服务名分两种,一种是数据库默认的,另外一种是我们自己创建的。当集群中某个节点发生故障,或者主备库角色转换后,用我们自己创建的服务名,将大大简化主备切换流程和缩减主备切换时间,因为数据库一键切换后,在应用层面,无需修改任何配置。因此,建议服务名这样用:

  • 数据库默认的服务:默认的服务名就是数据库的名字,建议这个用于内部通信和redo传输

  • 自己创建的数据库服务:应用连接数据库时用,这个很重要。Oracle数据库的很多新特性都是基于服务来实现的,比如Oracle事务卫士(Transaction Guard)和应用连续性(Application Continuity)等。

在主备库上创建自己的数据库服务。然后在客户端配置连接数据库服务的字符串。主备客户端配置样本如下,如果有多个备库,把其它备库的加进来就好:

Active Data Guard与Oracle GoldenGate

除了Active Data Guard之外,我们也可能听说过Oracle GoldenGate(OGG)这款软件产品。这里我们简单的介绍一下ADG和OGG的差异。OGG是一款非侵入式的、用于实现异构IT环境间实时数据集成和复制的综合软件包。允许您在Oracle数据库、其他支持的异构数据库和异构数据库之间复制、过滤和转换数据。此外,您还可以将数据库中的数据复制到Java消息队列、文本文件和大数据平台等。从OGG 12.3开始,还引入了微服务架构,支持自动冲突检测。新版Oracle GoldenGate不仅拥有超强性能,还简化了配置和管理,支持云环境,能够与Oracle数据库更紧密集成,提供更高的安全性。

Oracle GoldenGate与Oracle数据库内核相连,提供卓越的高速数据移动性能。经过专门优化,可在并发写入到多个目标时降低缓冲延迟。就Oracle数据库来说,OGG主要用于表级别数据复制、零停机迁移、跨平台迁移和复制数据,比如从AIX、HPUX、SPARC迁移至Exadata,反之亦然。从灾备角度来看,OGG是逻辑上的复制,ADG是物理上的复制,建议使用ADG,相对OGG来说,ADG更稳定、运维更简单。当然OGG和ADG也可以结合,比如在灾备库上,采用ALO(Archived Log Only)模式抽取重做日志,然后再复制到目标库。

结束语

通过以上的内容,大家对什么是Active Data Guard(活动数据卫士)和怎么用好Active Data Guard有了一定的了解。除此之外,Active Data Guard还可以和Oracle数据库的其他特性或产品相结合,将数据保护发挥到极致,助您做好数据保护的最后一公里。

参考:

  • https://apex.oracle.com/database-features/

  • https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/getting-started-with-oracle-data-guard.html

  • https://www.oracle.com/technetwork/database/availability/dg-adg-technical-overview-wp-5347548.pdf

  • http://www.ohsdba.cn/index.php?m=Article&a=show&id=434

编辑:萧宇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值