RAC 和ADG 高可用TNS 或者service实现

Oracle RAC

===========================

Oracle Real Application Clusters (简称RAC)是屡获奖项的 Oracle Database Enterprise Edition 的一个选件。Oracle RAC采用共享缓存体系结构的数据库集群。一组Oracle RAC数据库服务器组成一个集群,他们之间通过高速内网互联,共享缓存。用户通过外部网络连接到数据库集群,当数据库服务器有单点故障时,上层用户不会受到任何影响。数据库集群共享下层的SAN存储。

Oracle Extended Distance Cluster是 Oracle RAC的一种部署模式,通过将集群中的服务器部署在物理分隔的位置。Oracle Extended Distance Cluster提供更胜于本地Oracle RAC的可用性。Oracle Extended Distance Cluster对距离、时延等都有较严格的要求,因此在现有的网络技术及存储技术的前提下,建议最远的距离不超过100km,两节点之间采用裸光纤。

Oracle异地RAC不适合于全量灾备恢复,只适合防范停电,空难,洪水等灾难性事故。更推荐的异地高可靠性方式是本地RAC + 异地DataGuard。

===========================

Oracle DataGuard

===========================

1、 DataGuard重做日志同步原理

主数据库的LGWR进程将重做数据写入到自己的ORL,同时DataGuard的LNS (Log Network Server)进程捕获日志写入器写入的重做数据,并以同步或异步方式将重做数据传输到备用数据库。

备用数据库Data Guard的RFS(Remote File Server)接收重做数据,然后将其写入一个名为备用重做日志(Standby Redo Log,SRL)文件的顺序文件中。备用数据库端的MRP(Managed Recovery Process)进程或者LSP进程在备用数据库上应用这些日志,进而同步数据。

DateGuard支持一主多备间通过重做日志方式同步。

DataGuard的重做日志传输是支持两种方式:

  • 同步重做传输 (SYNC)

  要求主数据库上的日志写入器等待 LNS 确认备用数据库已经接收重做数据并已将其写入备用重做日志,然后才能确认到客户端应用程序的提交。这确保了提交的所有事务都在磁盘上,并在备用位置受到保护;但是影响了主库的性能。

  1. 用户提交一个事务,事务在SGA 中创建一个重做记录。LGWR从日志缓冲区中读取重做记录,写入ORL,然后等待LNS 的确认。
  2. LNS 从日志缓冲区中读取相同的重做记录,通过Oracle Net 服务传给备用数据库。备用数据库上的RFS 接收重做数据,然后将其写入备用重做日志文件中。
  3. 当RFS 从磁盘接收到一个写完消息时,会将一个确认消息传回给主数据库上的LNS进程,LNS 接着通知LGWR 传输完成。LGWR 接着向用户发送提交确认信息。

  • 异步重做传输 (ASYNC)

  不要求主数据库上的日志写入器等待备用数据库确认重做已被写入磁盘。确认到客户端应用程序的提交与重做传输是异步进行的。

  

  异步传输方式会根据场景的不同,调节读取日志的方式不同:

  1. LNS的读取速度跟得上重做日志产生的速度,LNS进程从日志缓冲池中读取重做日志,然后通过Oracle Net服务传给备用数据库。
  2. 当LNS赶不上SGA重做日志的产生速度,在将重做数据传给备用数据库前就回收了日志缓冲区,LNS将自行转为从ORL读取和发送重做数据,当LNS赶上进度后,将自行转回到直接从日志缓冲区中读取/发送。
  3. 如果主数据库和备用数据库断开连接(网络故障或备用服务器故障),主数据库将继续处理事务并累积不能传输到备用数据库的重做数据积压并按文件归档,直到能建立新的网络连接为止(称为归档日志差异)。在这种状态下,DataGuard在主数据库上使用ARCH进程连续Ping备用数据库来确定其状态。当还原与备用数据库的通信后,ARCH进程会查询备用控制文件(通过其RFS进程),来确定备用数据库从主数据库收到的最后一个完整日志文件。DataGuard确定需要哪些日志文件来重新同步备用数据库,然后立即开始使用其他ARCH进程传输相应文件。

第三点不用LNS进程,远程RFS进程和本地ARCH进程沟通

场景三:(这种情况比较复杂,这边也是摘录了Data Guard的完全参考手册整理而成)

在极少数情况下,(ORL产生的速率非常快,或者网络出现故障的情况下),LNS还在发送第一个ORL文件的时候,但是系统已经发生了多次日志切换,LNS发送的完当前的文件,下个要传送的文件已经被归档。

这时候Data Guard在主数据库上使用ARCH 进程连续ping备用数据库来确定其状态。当还原与备用数据库的通信后,ARCH ping 进程会查询备用控制文件(LRBA)(通过其RFS 进程),来确定备用数据库从主数据库收到的最后一个完整日志文件。Data Guard 确定需要哪些日志文件来重新同步备用数据库,然后立即开始使用其他ARCH2 进程传输相应文件。

在接下来执行日志切换时,LNS 会试图连接备用数据库,成功后开始传输当前重做数据,而ARCH 进程在后台处理间隔。一旦备用应用进程能赶上当前重做记录的进度,应用进程就自行转换,不再读取归档重做日志,改而读取当前SRL(假定用户已经配置了Data Guard“实时应用”)。

最后需要注意的一点是,从Data Guard 10g 开始,主数据库的一个ARCH进程一直专门负责本地归档,从而确保在处理间隔期间,远程归档操作不影响主数据库回收;

为使备用数据库赶上进度,主数据库必须以远超平时生成重做数据的速度传输数据。Data Guard 架构允许使用多个后台ARCH 进程来快速处理间隔,与此同时,LNS 进程像通常一样执行当前日志流的SYNC 或者ASYNC 传输

总结异步传输方式:

1、LNS首先会读取SGA中的重做日志缓存,这种情况下是最佳情况;

2、当LNS从第1个操作里面读取不到数据的情况下就去获取当前联机重做日志的数据;

3、当LNS从第1、2个操作里面均获取不到数据的情况下 arch  ping本地进程  就要去查看备库上面日志的传输情况,查看完成后主库通过返回的信息进行传输数据;

----------------------------------

 

DataGuard支持配置三种数据保护模式,以实现成本、可用性、性能和数据保护的平衡:

保护模式

主数据库出现故障时的数据丢失风险

重做传输

最大保护

零数据丢失

  • Data Guard 确认事务数据安全保存到至少一台备用服务器的磁盘上之后,主数据库上的日志写入器进程才会确认到客户端应用程序的提交。由于重做传输的同步特性,最大保护模式可能影响主数据库的响应时间。
  • 如果没有任何一台备用数据库能返回重做已被接收并写入磁盘的确认,主数据库将停滞(并最终崩溃)。因此此种方式下,强烈建议至少配置两个备用数据库。

SYNC

最高可用性(maximum availability mode)

零数据丢失 — 假设出现故障之前主数据库提交事务时的同步通信没有中断

  • Data Guard 确认事务数据安全保存到至少一台备用服务器的磁盘上之后,主数据库上的日志写入器进程才会确认到客户端应用程序的提交。由于重做传输的同步特性,最大保护模式可能影响主数据库的响应时间。
  • 如果没有任何一台备用数据库能返回重做已被接收并写入磁盘的确认,主数据库处理将继续进行。当再次建立连接时,Data Guard 将自动重新同步备用数据库和主数据库。

SYNC

最高性能(maximum performance mode)

最小数据丢失 — 只有几秒,具体取决于网络带宽

  • 在这种模式下,当主数据库处理事务时,重做数据通过ASYNC 重做传输异步传输到备用数据库。主数据库上的日志写入器不用等待备用数据库确认即可确认到客户端应用程序的提交。
  • 在正常操作中,可能丢失的数据量只限于在主数据库和备用数据库之间传输的数据量 — 这个量由处理主数据库生成的重做数据量的网络容量决定。如果有足够的带宽,可能丢失的总数据量非常小或为零。

ASYNC

2、 DataGuard实现自动切换

Oracle DataGuard支持使用快速启动故障切换FSFO(fast-start failover)特性来自动将故障数据库Failover到远程容灾节点,数据库RTO与FastStartFailoverLagLimit参数有关,可小于30秒。

当Primary数据库故障后,FSFO会自动地快速把原Standby数据库切换为为Primary数据库操作。FSFO的触发条件:

  • 当数据库以正常模式(shutdown immediate/normal/transactional)关闭Primaty数据库时,系统不会触发FSFO。
  • 使用非正常方式shutdown abort关闭Primaty数据库时,会触发FSFO。

FSFO只支持DataGuard配置在最高可用性(maximum availability mode)、最高性能(maximum performance mode)模式下:

  • 最高可用性模式下,在切换时可以保证无数据丢失(切换之前主数据库提交事务时的同步通信没有中断)。
  • 在maximum performance mode下面,会有数据丢失,丢失多少数据由FastStartFailoverLagLimit这个参数来配置。

3、 TAF实现数据库切换后客户端无缝连接

TAF(Transparent Application Failover),透明应用程序故障转移,当客户端和Oracle数据库建立连接后,正在执行某个应用,此时客户端连接的某个实例突然宕机,那么客户端的连接就会被转移到其他健康实例上去。对于客户端的TAF,如果执行的是update、insert等事物语句,那么就会回退,如果是select语句,那么会转移到新的实例继续执行,这个过程不需要用户的的介入,是透明的。

TAF配置参考(【DATAGUARD】物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置_ITPUB博客):

1) 在主库上配置一个TAF的Service

  此Service在数据库出现故障时会发送通知给客户端,允许查询语句在故障转移发生后继续运行。

2) 建立一个存储过程,调度TAF的Service,确保Service只在主库运行

3) 创建一个触发器,确保让数据库在启动和角色转换时运行此存储过程

  重启数据库、或当数据库切换后,执行存储过程,触发主库启动TAF的Service。

4) 在主库手工启动TAF的Service(或重启数据库,重启数据会触发 触发器->存储过程->TAF的Service)

  执行成功后,可以看到TAF的Service

5) 在备库查询,确保备库已经存在触发器和存储过程

6) 客户端配置

样例1:

dg_taf =

    (DESCRIPTION =

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.130)(PORT = 1521))

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.131)(PORT = 1521))

            (LOAD_BALANCE = yes)

                (CONNECT_DATA =

                    (SERVER = DEDICATED)

                    (SERVICE_NAME = dg_taf_lhr.lhr.com)

                (FAILOVER_MODE =

                    (TYPE = session)

                    (METHOD = basic)

                    (RETRIES = 180)

                    (DELAY = 5)

               )

        )

)

样例2:(73/74是主站点主库的RAC、75/76是备站点备库的RAC)

此配置不用service也可以实现,不过切换时需要关闭

iccc =

    (DESCRIPTION_LIST=(LOAD_BALANCE=off) (FAILOVER=on)

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.73)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.74)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.75)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.76)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值