oracle的TAF浅析 (r6笔记第37天)

在使用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;

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美团技术团队

分布式系统互斥性与幂等性问题的分析与解决

前言 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问、海量数据处理的场景也越来越多。如何用较低成本实现系统的高可用、易伸缩...

59640
来自专栏Java架构

正确的打日志姿势

19950
来自专栏deed博客

充分利用4G 空间 C8815 修改DATA分区,扩大存储空间,重新分配内置存储空间

24040
来自专栏程序员叨叨叨

compileSdkVersion 'android-24' requires JDK 1.8 or later to compile

今天,好久没有写Android程序的我突发奇想,想简单写一个每日任务APP。好的!新建工程->写好代码框架->开启模拟器->运行!哎哎哎?!那啥!咋报错了嘞?!...

13440
来自专栏微服务生态

深入浅出Netflix Conductor使用

Netflix Conductor框架是典型的服务编排框架,通过Conductor还可以实现工作流和分布式调度,性能非常卓越。

1.5K30
来自专栏数据库

替代SE16N的超强悍SE16H

文 | 大话SAP 又到了天气转冷,懒得出门,窝在家里学习新知识的季节。 也许你早就对SE11/SE16/SE16N/SQVI等T-code熟得不能再熟,不过,...

371100
来自专栏程序员同行者

Django项目中使用celery做异步任务

在写项目过程中经常会遇到一些耗时的任务, 比如:发送邮件、发送短信等等~。这些操作如果都同步执行耗时长对用户体验不友好,在这种情况下就可以把任务放在后台异步执行...

28910
来自专栏公有云大数据平台弹性 MapReduce

EMR之HBASE集群参数调优与压测

HBase 是Hadoop生态里重要一员。对HBase的调优,对节约成本,提升用户体验有重要意义。

37940
来自专栏技术博文

Memcached 及 Redis 架构分析和比较

Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存...

38230
来自专栏FreeBuf

利用Winrm.vbs绕过白名单限制执行任意代码

winrm.vbs(一个位于system32目录下的具有Windows签名的脚本文件)可以被用来调用用户定义的XSL文件,从而导致任意的、没有签名的代码执行。当...

27540

扫码关注云+社区

领取腾讯云代金券