Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移...本文描述基于Oracle 10g rac,客户端TAF方式的故障转移并给出示例。 ...RAC failover 测试(连接时故障转移) Oracle RAC failover 测试(Server TAF方式) 1、TAF描述 #下面关于TAF来自Oracle 的官方描述 ID...453293.1 Transparent Application Failover (TAF) is a feature of the Oracle Call Interface (OCI) driver...#通过在客户端的tnsnames.ora中配置FAILOVER_MODE项实现TAF 2、服务器端、客户端的环境 #服务器端环境,host信息 oracle@bo2dbp:~> cat /etc
Oracle RAC中,除了基于客户端的TAF方式之外,还有基于服务器端的TAF方式,可以把服务端的TAF方式看作是客户端TAF方式的一个升级版吧。...服务器端的TAF,当然是需要在服务器端进行配置了,这个是通过Service来完成的。本文主要描述Oracle 10g rac 下通过service方式配置服务器端的TAF。 ...测试(连接时故障转移) Oracle RAC failover 测试(TAF方式) 有关Services的创建请参考 Services in Oracle Database 10g 再说...start service -d GOBO4 -s TAF oracle@bo2dbp:~> ....:~> srvctl config service -d GOBO4 -a TAF PREF: GOBO4A AVAIL: GOBO4B TAF: basic oracle@bo2dbp:~>
比如我们选择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来配置更多的属性...------------------------------------------------------- 1 SYS$BACKGROUND 2 SYS$USERS 3 racdb_taf
集群上新建服务server_taf: [oracle@jyrac1 ~]$ srvctl add service -d jyzhao -s server_taf -r "jyzhao1,jyzhao2"...server_taf for database jyzhao PRKH-1014 : Current user "grid" is not the oracle owner user "oracle"...of oracle home "/opt/app/oracle/product/11.2.0/dbhome_1" 2.启动server_taf服务 eg: srvctl start service -...d rac -s server_taf 启动server_taf服务 [oracle@jyrac1 ~]$ srvctl start service -d jyzhao -s server_taf 3....system/oracle@192.168.56.160/server_taf [grid@jyrac1 ~]$ sqlplus system/oracle@192.168.56.160/server_taf
作者:温昂展 导语:海量服务之道其一,有损服务; TAF特性其一,容错; Less is more 上一节简单提到了客户端在选取Invoker节点时,会对Invoker列表执行死活检查,屏蔽掉一定时间内异常的节点...下面对TAF容错机制做具体探讨。 一、容错性 从概率学的角度,随着分布式系统规模不断扩大,即使是小概率的系统错误依然不可忽略不计,容错设计必不可少。...三、TAF实现 分析清楚问题,再考虑如何实现就比较简单了,TAF的实现同样是从以上两个角度做考虑的。
导语:对于服务端来说,异步处理相比同步处理在性能上可能会有成倍的提高,本篇就对taf的异步处理进行一个简单的分析。描述客户端进行异步调用之后,taf的都进行了哪些的处理。...本文主要是项目在架构升级异步的时候,时不时出现死锁现象,因此想了解一下异步处理的时候线程执行逻辑是什么,最后看完了,发现和 taf 无关。...通过定义 jce 协议,taf 自带工具是可以自动生成相应的异步调用的接口实现。...; taf_invoke_async(taf::JCENORMAL,"doRequest", _os.getByteBuffer(), context, _mStatus, callback);...} 在该方法中,通过调用父类 ServantProxy 的 taf_invoke_async 方法进入异步处理。
♣ 问题 在Oracle中,如何在RAC服务器端配置TAF? ♣ 答案 RAC的本质是提供负载均衡(Load Balancing)和故障切换(Failover),如下图所示: ?...Oracle实现的方式主要有TAF(Transparent Application Failover,透明应用故障切换)和FCF(Fast Connection Failover,快速连接故障切换)。...TAF是针对使用OCI(Oracle Call Interface)连接的特性,而FCF是针对使用非OCI连接的特性,例如jdbc thin client连接。...为了实现SEELCT方式,Oracle必须为每个会话保存更多的内容,包括游标、用户上下文等,这是用资源换时间的方案。 ② METHOD:指定TAF的方法,选项有BASIC和PRECONNECT。...l -e选项指定TAF的类型。 l -w选项指定每次切换的时间间隔。 l -z选项指定切换的次数。 需要注意的是,执行该命令时需要以Oracle用户来添加。
1 TAF 简介 TAF(Total Application Framework)框架整体划分为五层结构,运营、平台、通信框架、公共库、协议层。...1.1框架比较 目前主要基于taf和基于appPlatform框架的后台开发,因此对两个框架有浅显的了解和学习。...两个框架都是RPC通信,taf框架是基于epoll的多线程非阻塞RPC框架,而appPlatform是基于多进程,主要应用于电商形式的后台框架。...1)调用parseConfig(),解析TAF服务模板内容配置,包括client和server的locator,超时,log,心跳等。...服务端每台机器需要安装node,node不断上报心跳等信息到taf主控,并通过patch实现主控控制服务节点。
初始化负载均衡策略 TAF服务多节点部署,发起服务请求时应该选择哪个服务节点最为合理呢?...); long syncTimeout = url.getParameter(Constants.TAF_CLIENT_SYNCTIMEOUT, Constants.default_sync_timeout...); boolean udpMode = url.getParameter(Constants.TAF_CLIENT_UDPMODE, false); if (this.selectorManager...Throwable e) { throw new ProxyException(servantProxyConfig.getSimpleObjectName(), "Fail to create taf...目前TAF-Java还没有实现这种方式,设想以后可以从这个方面多学习思考,对比分析一下。 感谢阅读,有错误之处还请不吝赐教。
2.创建触发器 自动在主库启动hbha服务 3.在primary库上设置service的TAF功能 4.修改程序 中的 url,实现服务的自动切换 二:解释几个概念 1.TAF(Transparent...在重新连接过程中,之前的活动事务将会被回滚,但在“具体条件”下TAF可以保证SELECT语句不被终止。...TAF的特性: 1:TAF是ORACLE客户端提供的一项特性,使用TAF,对客户端的环境有一定的要求,比如Java的JDBC驱动、Oracle客户端的版本等(8i开始支持TAF); 2:大致上TAF可以分为...2种,连接时的TAF和会话建立后TAF; 3:TAF本身与是否RAC环境无关,但一般都用在RAC环境,最小程度的减少最应用的影响,单实例环境下也可以使用TAF,这样使用PL/SQL developer连接数据库...; 6:oracle TAF特性和scan ip failover的区别是,scan ip连接的话如果scan ip所在的节点故障, 那么该连接就断开了,如果程序中没有自动重连机制,或者程序连接池中的timeout
none:不会发生failover(禁用TAF) TAF仅支持使用OCI方式连接到数据库的会话,不支持使用JDBC方式连接到数据库的会话。...创建Service资源 [root@linuxmi01 ~]# su - Oracle [oracle@linuxmi01 ~]$ srvctl add service -d linuxmi -s zt...策略 -e:TAF类型 -z:在failover之前重新尝试连接的次数 -w:在failover之前两次尝试连接的时间间隔 -y:是否自动启动 查询Service资源属性 [oracle@linuxmi01...启动Service资源 [oracle@linuxmi01 ~] srvctl start service -d linuxmi -s zt[oracle@linuxmi01 ~] srvctl status...[root@linuxmi01 ~]# su - oracle [oracle@linuxmi01 ~]$ sqlplus / as sysdba SQL> col username for a20 SQL
结合TAF的设计理念和架构做思考,负载均衡器其实可以放到主控侧来实现,但是我认为由于负载均衡策略的复杂性,单是对调度决策数据分析已经非常繁重,因此负载均衡通常还是单独引入一个接入层(统一接入网关)来实现...而TAF的实现,我们把重点放在客户端。 二、TAF实现 根据前面对Client调用的分析可知,客户端会采用选定的负载均衡策略选择一个Invoker,对请求进行路由分发。...invoker.getUrl().getParameter(Constants.TAF_CLIENT_WEIGHT, 0) : config.getDefaultConHashVirtualNodes(...} } weightToInvoker = weightToInvokerTmp; } return result; } 目前TAF...本系列暂时告一段落,以后有时间再继续补充 再次感谢实习以来Leader和导师的指导,感谢TAF学习上terry浩哥、kahn哥、菠菜哥、jeff哥等小伙伴的热情帮助
此系列文章选用Java语言进行描述,先对TAF部署开发环境、相关概念和整体架构做介绍,后面分taf-server、taf-client两部分展开,相关文档不多,主要从代码上进行理解。...注意:代码仓库需要添加一个用户svn_taf 的读权限;当然也可以采用其他的编译方式,如申请编译机和开发机,可km上查找并理解区分一下taf 测试机,编译机,开发机。.../app.service/bin 日志目录:logpath=/user/local/app/taf/app_log 数据目录:datapath=/user/local/app/taf/app.service...-必修课(一):整体架构理解 TAF-必修课(二):Reactor多线程模型 TAF-必修课(三):Server启动全过程 TAF-必修课(四):过载保护 TAF-必修课(五):Client端调用 TAF...-必修课(六):容错 TAF-必修课(七):负载均衡 当然,TAF相关的内容远不止这些,比如这里暂时没有具体探讨的还有:协议、IDC分组、Set部署、就近接入、日志相关、消息染色、配置中心、运营监控服务等
修改之前的service实例:orcl3 [oracle@rac1 admin]$ srvctl modify service -d orcl -s orcl_taf -n -i orcl1,orcl2...,orcl3 [oracle@rac1 admin]$ srvctl config service -d orcl Service name: orcl_taf Service is enabled Server...: [oracle@rac1 admin]$ srvctl start service -d orcl -s orcl_taf -i orcl3 [oracle@rac1 admin]$ srvctl...status service -d orcl Service orcl_taf is running on instance(s) orcl1,orcl3 #没启用,这里顺便启动下 [oracle@...rac1 admin]$ srvctl start service -d orcl -s orcl_taf -i orcl2 [oracle@rac1 admin]$ srvctl status service
--的信息,删除节点3: [oracle@rac1 ~]$ srvctl stop service -d orcl -s orcl_taf -i orcl3 [oracle@rac1 ~]$ srvctl...status service -d orcl Service orcl_taf is running on instance(s) orcl1,orcl2 [oracle@rac1 ~]$ srvctl...modify service -d orcl -s orcl_taf -n -i orcl1,orcl2 -f [oracle@rac1 ~]$ srvctl status service -d orcl...Service orcl_taf is running on instance(s) orcl1,orcl2 [oracle@rac1 ~]$ srvctl config service -d orcl...Service name: orcl_taf Service is enabled Server pool: orcl_orcl_taf Cardinality: 2 Disconnect: true
二、Java NIO + Reactor多线程 下面回归正题,TAF的网络线程采用了JDK原生NIO实现Reactor模型,此时服务端一个IO线程可以同时处理客户端请求,如果放到Unix的IO模型去理解...线程模型 现在终于到了正题,理解了上面的问题,再来看TAF的线程模型就很容易理解了,其设计思路基本如上,并无二异。...TAF中核心代码如下: /** * SelectorManager 管理多个Reactor */ public synchronized void start() { if (this.started...(Throwable e) { crashed = true; e.printStackTrace(); } } 当然从类图中也可以看出,具体实现上TAF...致谢,在TAF的学习上要感谢实习中leader毛哥和导师jack的指导,让我少走了不少弯路,特别是思考问题的方式上,受到了极大的启发; 还有组里像terry浩哥,kahn哥、jeff哥,菠菜、loki
其实就是对请求量的控制问题 二、 过载保护 依据之前介绍的TAF线程模型进行的分析,首先一个新的请求到达服务端先是建立一个连接,接着直到该连接被释放,期间发生的读写请求都会占用线程池的资源。...三、TAF实现 1. 限定最大连接数 上一节已经分析过,TAF通过SessionManagerImpl管理器对连接进行管理,因此我们可以考虑在这个管理器上面做文章。...简单的过载保护就相当于只要定义一个拒绝策略,当其缓存队列放不下的就根据该策略对新来的请求进行处理,在TAF的实现上默认采用了直接丢弃(DiscardPolicy)的策略。...在具体实现上,TAF的负载均衡主要是放在客户端TAF-Client实现的,之后再展开探讨。 2....在TAF监控的实现上,确实也是这么做的。除了对请求流量和相关的业务指标做上报监控,系统资源监控,JVM监控必不可少。 感谢阅读,有错误之处还请不吝赐教。
服务器端连接负载均衡(Load Balance) Oracle RAC 负载均衡测试(结合服务器端与客户端) Oracle RAC failover 测试(TAF方式) Oracle RAC...failover 测试(Server TAF方式) 1、Oracle failover的几种方式 Oracle failover也叫故障转移,从Oracle 10g开始,分为3种方式: a....TAF 透明故障转移,此方式同样基于客户端完成,需要配置客户端tnsnames.ora,连接故障发生时,无须重新连接 c....Service-Side TAF 服务器端透明故障转移,通过配置service来实现,客户端无须任何配置。...且FAILOVER_TYPE,FAILOVER_METHOD,FAILED_OVER几个至没有发生任何变化 #因为这几个参数主要是针对TAF。
作者:温昂展 一、程序入口 要说清楚后面的一些TAF实现需要完整地考虑整个框架体系,因此本节先对TAF服务端的整个启动过程进行解析,同时探讨一些相关问题。...不得不说TAF框架的代码质量还是挺高的,业界良心!...光看程序逻辑就比较清晰,如下代码,上来直接找到startUp包下,Main程序,就是这么的简单直白,与优雅,这就是taf服务启动的入口: package com.qq.cloud.taf.server.startup...二、启动过程 TAF服务的整个启动流程可概括如下,下面分点叙述。 [1504579037296_4491_1504579037576.png] 三....${service}.config.conf,该文件包括了TAF服务端配置、各个obj服务配置以及客户端连接器的配置。
Service "dg_taf_lhr" has 1 instance(s)....我们在Windows客户端配置tns如下,包含了TAF透明故障转移: dg_taf = (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST...(DELAY = 5) ) ) ) 使用客户端连接: C:\Users\lhrxxt>sqlplus system/lhr@dg_taf...processor_group_name string service_names string dg_taf_lhr...SYSTEM@dg_taf> 可见,当前连接到的是LHR11GDG库。
领取专属 10元无门槛券
手把手带您无忧上云