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

Oracle datagaurd新进化——Far Sync

炬南山 2020-10-10
2319
01
  Active Data Guard Far Sync 概述 



Data Guard是oracle数据库容灾非常合适的解决方案,并且随着oracle产品的迭代不断进化完善。Active Data Guard Far Sync是Oracle 12c引入的新功能(也称为Far Sync Standby)。

传统的ADG主要由主备库组成,redo数据直接传输到备库,待备库成功写入standbylog file才能保证数据的最大保护。如果主备库之间的网络带宽不足、备库性能较差等因素,不可避免会导致主备库之间的同步延迟,此时一旦出现主库宕机的情况,极易出现数据丢失。12c开始可以在主备库之间添加一个Far Sync实例,redo数据先由主库传输到Far Sync实例,再由于Far Sync实例转发给备库。Far Sync实例只有密码文件、init参数文件和控制文件,而没有数据文件,只负责接收归档和redo而不需要应用,所以主库到Far Sync实例的同步非常迅速,基本没有延迟。

一般Far Sync实例与主库就近部署,主库可以配置同步(synchronous)传输redo到Far Sync实例,保证零数据丢失(zero data loss)。然后Far Sync实例再将redo异步(asynchronous)发送到终端备库(Standby Database)。

Far Sync配置对于Data Guard 角色转换(role transitions)是透明的,即switchover/failover命令方式与12c之前相同。

考虑到可能发生Data Guard 角色转换,即switchover/failover,可以在距离备库较近的地方也配置Far Sync实例,这个Far Sync实例只有在当前的备库切换为主库后才启用。

考虑到Far Sync实例的单点故障,可以在距离主库交近的地点配置2个Far Sync实例,起到备用的作用。

以上是借用网上的一张Active Data Guard Far Sync架构图,图中没有画出备库端的Far Sync实例。


02

Far Sync的相关参数和用例




1、GROUP和PRIORITY

1) 为日志传输路径分配group

GROUP (12cR2引入)可以使的备用远程传输路径的目标数量增加。GROUP之间相互独立,互不干扰。GROUP可用于从far sync实例或级联将redo分发到多个目标的多个归档目标,GROUP的数量可以设置1到8。每个GROUP可最多配置30个目标。

如果要为日志传输路径分配group,则需要组内的至少一个目的地为可用并为活动状态。组中最多可以存储30个日志存档目标,而且只能为远程日志传输路径(SERVICE = ...)分配组,不能为本地日志传输路径(LOCATION = ...)分配组。同时当一个组中存在多个日志传输路径时,必须把其他备用的日志传输路径状态LOG_ARCHIVE_DEST_STATE_n改为 ALTERNATE。

如下例子中,LOG_ARCHIVE_DEST_2和LOG_ARCHIVE_DEST_3组成一个group.当LOG_ARCHIVE_DEST_2失效时候,系统会自动切换到LOG_ARCHIVE_DEST_3进行日志远程归档,ALTERNATE即为备用的意思。

当LOG_ARCHIVE_DEST_2再次变为可用时,不会立即切换到LOG_ARCHIVE_DEST_2(因为没有指定PRIORITY), 除非后面LOG_ARCHIVE_DEST_3出现不可用。

2)在相同组内,为多个归档目标分配优先级PRIORITY

PRIORITY这个属性可以对相同GROUP中的目标进行优先级排序,以便同个GROUP里只能有一个目标位置处于活动状态。如果活动目的地不可用,其他目的地可用于后续激活并接替不可用的日志传输路径。优先级也是设置1-8 (1优先级最高)。

如下例子,LOG_ARCHIVE_DEST_2将为当前首选的日志归档目标,如果2不可用,将会切换到4(因为4的优先级高过3)。如果2再次可用,2只会作为4的备用目标而不会立马切换回2(因为2和4的优先级相同)。如果2与4都不可用,将会切换到3,后面2或者4任一可用了,会自动切换回其中一个。

一般同个group中redo只传输到ENABLE的LOG_ARCHIVE_DEST_STATE_n中。如果当前首选的日志归档目标不可用,我们可以通过配置相同的PRIORITY=8来实现多个日志归档目标,通用用于同步到多个目标备库。
2、常用的场景配置

1)单个Far Sync 实例 → 单个standby

首先主数据库把redo传输到Far Sync 实例,SYNC与AFFIRM模式保证数据的完整性。在LOG_ARCHIVE_DEST_2不可用情况下,主数据库直接把redo传输到standby备库,同时改成异步方式。当Far Sync 实例恢复后,再自动切换回LOG_ARCHIVE_DEST_2继续使用Far Sync 实例。

2)单个Far Sync 实例 → 多个standby

首先主数据库把redo传输到Far Sync 实例。在LOG_ARCHIVE_DEST_2不可用情况下,主数据库直接把redo同时传输到standby和standby1。

当Far Sync 实例恢复后,再自动切换回LOG_ARCHIVE_DEST_2继续使用Far Sync 实例。
3)多个Far Sync 实例 → 单个standby

这个又叫做Far Sync 实例的高可用,在靠近primary的环节中部署多个Far Sync 实例,在其中一个Far Sync 实例不可用的时候不会马上切换到standby进行传输日志,更是切换到第二个Far Sync 实例。

首先主数据库把redo传输到primaryfs 这个Far Sync 实例,当primaryfs 这个Far Sync 实例不可用的时候,自动切换到primaryfs1 这个Far Sync 实例,当两个Far Sync 实例都不可用情况下,才直接把redo传输到standby。

4)多个Far Sync 实例 → 多个standby

首先主数据库把redo传输到primaryfs 这个Far Sync 实例,当primaryfs 这个Far Sync 实例不可用的时候,自动切换到primaryfs1 这个Far Sync 实例,当两个Far Sync 实例都不可用情况下,直接把redo同时传输到standby和standby1。

当任何一个Far Sync 实例恢复后,再自动切换继续使用Far Sync 实例。


03

配置Active Data Guard with Far Sync




接下来我们测试primary+far sync+ standby架构的ADG环境搭建。

角色

主库(Primary Database)

Far Sync实例

备库(Standby Database)

地点

生产中心

距离生产中心较近的的灾备中心

距离生产中心较远的灾备中心

IP地址

192.168.233.12

192.168.233.13

192.168.233.14

DB_UNIQUE_NAME

primary

primaryfs

standby

数据库版本

12cR2

12cR2

12cR2


1、创建主库、备库之间传统的Active Data Guard

      这一步就是我们平时创建ADG,具体过程略过。

2、创建Far Sync实例的密码文件/参数文件/控制文件

1)创建Far Sync实例的控制文件,在主库执行: 


2)创建Far Sync 实例的pfile文件,在主库执行:

     将上面的控制文件和参数文件和密码文件复制到Far Sync实例所在的服务器。 将控制文件存放在/u01/app/oracle/oradata/primaryfs/control01.ctl


3、 启动Far Sync实例

修改参数文件

在Far Sync实例服务器创建监听器(过程略)。

Mount Far Sync实例: 


4、创建standby redo log

在Far Sync实例创建standby redo log,standby redo log大小等于主库online redo log大小: 


5、 修改主库和备库的参数

1)主 库

2)备 库


6、确认配置


04
总 结



Far Sync马是oracle Dataguard的再次进化和完善,很好地解决了普通ADG最大保护影响发生,其他保护模式无法做到零丢失的问题。同时利用新增group和PRIORITY,可以更加灵活地配置和管理日志归档目标,定制各类故障场景下的日志传输目标和传输机制。

参考文献

https://blogs.oracle.com/database4cn/12c-active-data-guard-far-sync

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sbydb/creating-oracle-data-guard-far-sync-instance.html

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sbydb/LOG_ARCHIVE_DEST_n-parameter-attributes.html





本期作者|马育义 十年老DBA,精通Oracle数据库管理,精通OGG运维,喜欢各种数据库故障和救援处理。同时熟悉mysql、mongodb运维,喜欢钻研各类疑难杂症、技术新动向。持有oracle OCM,ogg OCP, mysql OCP, mongodb认证,AWS SAP认证,阿里云ACP认证等。



文章转载自炬南山,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论