Oracle RAC Failover 详解

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Oracle  RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。  

 

Oracle 10g RAC 的Failover 可以分为3种:

1. Client-Side Connect time Failover

2. TAF

3. Service-Side TAF

 

注意事项: 不能在listener.ora 文件中设置GLOBAL_NAME, 因为这个参数会禁用Connect-time Failover 和 Transparent Application Failover.

 

一.Client-Side Connect Time Failover

Client-Side Connect Time Failover的含义:如果用户端tnsname 中配置了多个地址,用户发起连接请求时,会先尝试连接地址表中的第一个地址,如果这个连接尝试失败,则继续尝试使用第二个地址,直至连接成功或者遍历了所有的地址。

这 种Failover的特点: 只在建立连接那一时刻起作用,也就是说,这种Failover方式只在发起连接时才会去感知节点故障,如果节点没有反应,则 自动尝试地址列表中的下一个地址。一旦连接建立之后,节点出现故障都不会做处理,从客户端的表现就是会话断开了,用户程序必须重新建立连接。

启用这种Failover的方法就是在客户端的tnsnames.ora中添加FAILOVER=ON 条目,这个参数默认就是ON,所以即使不添加这个条目,客户端也会获得这种Failover能力。

 

示例:

RAC =

  (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

     (LOAD_BALANCE=YES)

      (

 CONNECT_DATA=

     (SERVER=DEDICATED)

 (SERVICE_NAME=RAC)

      )

    )

注:rac1-vip,rac2-vip要添加到hosts 文件中,不然可能解析不了。

 

二. TAF(Transparent Application Failover)

 

 

这块的配置,参考:

10g & 11g Configuration of TAF(Transparent Application Failover) and Load Balancing [ID 453293.1]

现 在的大部分流行的应用系统(如:weblogic, Jboss),都是启动时就建立若干到数据库的长连接,在应用程序整个生命周期内重用这些连接。 而 Client-Side Connet Time Failover的工作方式是它对应用程序的可用性没有太大帮助。 

所 以从Oracle 8.1.5 版本只有引入了新的Failover 机制—TAF。 所谓TAF,就是连接建立以后,应用系统运行过程中,如果某个实例 发生故障,连接到这个实例上的用户会被自动迁移到其他的健康实例上。对于应用程序而言,这个迁移过程是透明的,不需要用户的介入,当然,这种透明要是有引 导的,因为用户的未提交事务会回滚。 相对与Client-Side Connect Time Failover的用户程序中断,抛出连接错误,用户必 须重启应用程序,TAF 这种方式在提高HA上有了很大的进步。

TAF 的配置也很简单,只需要在客户端的tnsnames.ora中添加FAILOVER_MODE配置项。这个条目有4个子项目需要定义。

1. METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值。 

       BASIC: 是指在感知到节点故障时才创建到其他实例的连接。

       PRECONNECT: 是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。

两种方法比较: BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源,两者就是是用时间换资源和用资源换时间的区别。

2. TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session 和select.

这2种方式对于未提交的事务都会自动回滚,区别在于对select 语句的处理,对于select,用户正在执行的select语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。

假 设用户正在节点1上执行查询,整个结果集共有100条记录,现在已从节点1上返回10条记录,这时节点1宕机,用户连接被转移到节点2上,如果是 session模式,则需要重新执行查询语句;如果是select方式,会从节点2上继续返回剩下的90天记录,而已经从节点1返回的10条记录不会重复 返回给用户,对于用户而言,感受不到这种切换。

显然为了实现select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。

3. DELAY 和 RETRIES: 这2个参数分别代表重试间隔时间和重试次数。

示例:

RAC =

  (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

      (LOAD_BALANCE=YES)

      (

 CONNECT_DATA=

     (SERVER=DEDICATED)

 (SERVICE_NAME=RAC)

 (

    FAILOVER_MODE=

(TYPE=session)

(METHOD=basic)

(RETRIES=180)

(DELAY=5)

 )

      )

    )

转载于:https://my.oschina.net/u/2249726/blog/417546

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超级详细的Spring Boot 注解总结

日常编程中我相信大家肯定都用过spring,也用过spring的注解,哪怕面试的时候也经常会被问到一些spring和spring boot注解的作用和含义等,那么这篇就带大家来看看超级详细的Spring Boot 注解总结!搞起!我们先来看看本篇会讲到的注解…

Android下 布局加边框 指定背景色 半透明

文章转自&#xff1a;http://www.cnblogs.com/bavariama/archive/2013/09/25/3338375.html 背景设置为自定义的shape文件&#xff1a; <!-- <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/a…

inputstream示例_Java InputStream available()方法与示例

inputstream示例InputStream类的available()方法 (InputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of available bytes left for reading …

json前后台传值

谈到JSON,简单的说就是一种数据交换格式。近年来&#xff0c;其在服务器之间交换数据的应用越来越广&#xff0c;相比XML其格式更简单、编解码更容易、扩展性更好&#xff0c;所以深受开发人员的喜爱。 下面简单的写一下在项目中前后台json传值的一个小例子&#xff0c;供大家参…

一个ThreadLocal和面试官大战30个回合

开场杭州某商务楼里&#xff0c;正发生着一起求职者和面试官的battle。面试官&#xff1a;你先自我介绍一下。安琪拉&#xff1a;面试官你好&#xff0c;我是草丛三婊&#xff0c;最强中单&#xff08;妲己不服&#xff09;&#xff0c;草地摩托车车手&#xff0c;第21套广播体…

ASP.NET 网站项目 EF 的简单操作例子

ASP.NET 网站项目 EF 的简单操作例子&#xff1a;操作代码&#xff1a;using EFTest.Models; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using System.Web.Mvc;namespace EFTest.Controllers {public class D…

java enummap_Java EnumMap containsValue()方法与示例

java enummapEnumMap类containsValue()方法 (EnumMap Class containsValue() method) containsValue() method is available in java.util package. containsValue()方法在java.util包中可用。 containsValue() method is used to check whether the given value element (val_…

mysql主主互备架构

mysql主主互备架构企业级mysql集群具备高可用&#xff0c;可扩展性&#xff0c;易管理&#xff0c;低成本的特点。mysql主主互备就是企业中常用的一个解决方案。在这种架构中&#xff0c;虽然互为主从&#xff0c;但同一时刻只有一台mysql 可读写&#xff0c;一台mysqk只能进行…

图文并茂的聊聊Java内存模型!

在面试中&#xff0c;面试官经常喜欢问&#xff1a;『说说什么是Java内存模型(JMM)&#xff1f;』面试者内心狂喜&#xff0c;这题刚背过&#xff1a;『Java内存主要分为五大块&#xff1a;堆、方法区、虚拟机栈、本地方法栈、PC寄存器&#xff0c;balabala……』面试官会心一笑…

JS根据文本框内容匹配并高亮显示

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script type"text/javascript">function SearchCompare() {// 获取搜索字符串var searchText document.getElementById("SearchCompa…

AngularJS入门心得2——何为双向数据绑定

前言&#xff1a;谁说Test工作比较轻松&#xff0c;最近在熟悉几个case&#xff0c;差点没疯。最近又是断断续续的看我的AngularJS&#xff0c;总觉得自己还是没有入门&#xff0c;可能是自己欠前端的东西太多了&#xff0c;看不了几行代码就有几个常用函数不熟悉的。看过了大漠…

Java ClassLoader getParent()方法与示例

ClassLoader类的getParent()方法 (ClassLoader Class getParent() method) getParent() method is available in java.lang package. getParent()方法在java.lang包中可用。 getParent() method is used to return the parent class loader for delegations. getParent()方法用…

Java中那些内存泄漏的场景!

虽然Java程序员不用像C/C程序员那样时刻关注内存的使用情况&#xff0c;JVM会帮我们处理好这些&#xff0c;但并不是说有了GC就可以高枕无忧&#xff0c;内存泄露相关的问题一般在测试的时候很难发现&#xff0c;一旦上线流量起来可能马上就是一个诡异的线上故障。内存泄露定义…

@html.ActionLink的几种参数格式

http://blog.csdn.net/jingmeifeng/article/details/7792151 一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字&#xff0c;第二个参数是对应的控制器的方法&#xff0c;默认控制器为当前页面的控制器&#xff0c;如…

Java ClassLoader findClass()方法与示例

ClassLoader类findClass()方法 (ClassLoader Class findClass() method) findClass() method is available in java.lang package. findClass()方法在java.lang包中可用。 findClass() method is used to find the class with the given binary class name. findClass()方法用于…

ThreadLocal内存溢出代码演示和原因分析!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;前言ThreadLocal 翻译成中文是线程本地变量的意思&#xff0c;也就是说它是线程中的私有变量&#xff0c;每个线程只能操作自…

C,C++宏中#与##的讲解

文中__FILE__与示例1可以参见《使用ANSI C and Microsoft C中常用的预定义宏》宏中的#的功能是将其后面的宏参数进行字符串化操作&#xff08;Stringizing operator&#xff09;&#xff0c;简单说就是在它引用的宏变量的左右各加上一个双引号。 如定义好#define STRING(x) #x之…

int?id与id??1 的意思

http://blog.csdn.net/jingmeifeng/article/details/24710143 int? id 表示id是可以为null的整型 跟Nullable<int> id 是一样的 id ?? 1等于 idnull?1:id;

彻夜怒肝!Spring Boot+Sentinel+Nacos高并发已撸完,快要裂开了!

很多人说程序员是最容易实现财富自由的职业&#xff0c;也确实&#xff0c;比如字节 28 岁的程序员郭宇不正是从普通开发一步步做起的吗&#xff1f;回归行业现状&#xff0c;当开发能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。最近我也一直在思考这个…

java中get接口示例_Java LocalDateTime类| 带示例的get()方法

java中get接口示例LocalDateTime类的get()方法 (LocalDateTime Class get() method) get() method is available in java.time package. get()方法在java.time包中可用。 get() method is used to get the value for the given field from this date-time object. get()方法用于…