oracle的TAF浅析

简介: 在使用rac的时候,有几个很闪亮的使用特性,一个就是load balance,这块毋庸置疑,确实做了很大的改进,从10g版本开始的多个vip地址的load balance,到11g版本中的进一步load balance改进 scan-ip,确实做了很大的简化。
在使用rac的时候,有几个很闪亮的使用特性,一个就是load balance,这块毋庸置疑,确实做了很大的改进,从10g版本开始的多个vip地址的load balance,到11g版本中的进一步load balance改进 scan-ip,确实做了很大的简化。
而在failover的实现中,还是有一定的使用限定,比如11g中默认的scan-ip的实现其实还是默认没有failover的选项,如果两个节点,某个节点挂了,那么原有的连接中继续查询就会提示session已经断开,需要重连。
很多应用都在这样使用scan-ip,也都相安无事,所以对于failover的选择还是有一定选择空间,如果说failover的实现方式,简单来说,主要就是通过换取时间,或者换取资源来实现。
怎么理解呢。
假设我们存在两个节点,如果某个session连接到了节点2,突然节点2挂了,那么故障转移的方式就有通过换取时间或者换取资源。
比如说换取时间,为了更快达到failover的速度,failover method 有preconnect,这种预连接方式还是会占用较多的资源使用,在各个节点上还是会预先占用一部分额外的资源,在切换时会相对更加平滑,速度更快。这种就是preconect的方式
另外一种情况,则在发生failover的情况时,再去切换对应的资源,中间会有一些卡顿,但是对于资源的相对来说要小很多。这种就是默认的basic模式。

failover method侧重于用户对于何时创建到实例的连接,即basic方式会在故障发生时采取判断,有一种delay的味道,而preconnect则是未雨绸缪,先准备后,在出现故障的时候,能够更快切换,从实际的应用来说,还是basic这种方式更加通用。

而对于failover的类型来说,rac的实现更加丰富而且灵活,这在别的数据库中真是不可想象。这个时候它的粒度就在于用户对于sql的执行情况进行控制。
比如说,我们有个很大的查询在节点2上进行,结果节点2突然挂了,然后这个时候,failover的类型就有两种,即对于正在执行的查询,比如说有1万条数据,结果刚好故障发生的时候查出了8000条,那么剩下的2000该怎么处理。
一种方式就是使用select,即会完成故障切换,继续把剩下的2000条记录返回,当然中间会有一些上下文环境的切换,对于用户基本还是透明的,但是会有一定的延时。
另外一种是直接断开连接,要求重新查询。这种type是session

在10g版本中借助于vip的配置达到load balance+failover的配置如下:
racdb =

(DESCRIPTION =

  (ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.101)(PORT= 1521))

  (ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.201)(PORT= 1521))

  (LOAD_BALANCE = yes)

  (FAILOVER = ON)

   (CONNECT_DATA =

    (SERVER= DEDICATED)

     (SERVICE_NAME = racdb)

     (FAILOVER_MODE =

       (TYPE= SELECT)

       (METHOD= BASIC)

       (RETRIES = 30)

       (DELAY = 5))))

11g的scan-ip如果也想进一步扩展failover,也需要设置failover_mode和对应的type.

当然有一个不同之处是在10g中我们可以直接通过dbca来完成配置,就是简单清晰。
在11g中,只能借助于命令或者EM来实现了。不知道为什么把这块功能的图形界面部分给去掉了。
通过命令其实也不算麻烦,我们可以使用下面的方式做一个简单的配置。
比如我们选择failover_mode为basic创建的taf为racdb_taf

srvctl add service -d RACDB -s racdb_taf -r "RACDB1,RACDB2" -P BASIC
bash-4.1$ crs_stat -t|grep taf
Name           Type           Target    State     Host       
------------------------------------------------------------  
ora....taf.svc ora....ce.type OFFLINE   OFFLINE     
我们手工开启         
srvctl start service -d RACDB -s racdb_taf 
     

然后通过dbms_service来配置更多的属性。
execute dbms_service.modify_service (service_name => 'racdb_taf', aq_ha_notifications => true, failover_method => dbms_service.failover_method_basic, failover_type => dbms_service.failover_type_select, failover_retries => 181,failover_delay => 5,clb_goal => dbms_service.clb_goal_long);

在数据库中可以简单查看相关的service情况。
SQL> select service_id ,name from dba_services ;

SERVICE_ID NAME
---------- ----------------------------------------------------------------
  1 SYS$BACKGROUND
  2 SYS$USERS
  3 racdb_taf
  5 RACDBXDB
  6 RACDB
select name, failover_method, failover_type, failover_retries,goal, clb_goal,aq_ha_notifications  from dba_services where service_id =3;


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
SQL Oracle 关系型数据库
|
SQL Oracle 网络协议
|
SQL Oracle 网络协议
Oracle 10g RAC TAF介绍
原文转自:http://www.cnblogs.com/einyboy/archive/2012/11/19/2777855.html http://blog.csdn.net/robinson_0612/article/details/8308965 Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
1112 0
|
负载均衡 Oracle 关系型数据库
Oracle RAC failover 测试(TAF方式)
    Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移。
1349 0
|
负载均衡 Oracle 关系型数据库
Oracle RAC failover 测试(Server TAF方式)
    Oracle RAC中,除了基于客户端的TAF方式之外,还有基于服务器端的TAF方式,可以把服务端的TAF方式看作是客户端TAF方式的一个升级版吧。
1103 0
|
17天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
56 7
|
1月前
|
Oracle 关系型数据库 数据库
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2
|
17天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
41 5