原文链接

[WK-T]ORACLE 10G 配置故障转移(Failover)​blog.itpub.net

文章参考:《大话 Oracle RAC 集群 高可用性 备份与恢复》 张晓明 编著

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能力。

示例:

在客户端的tnsnames.ora 配置如下:

批注:SERVER = DEDICATED 表示专用服务器模式设置,数据库将为每一个客户机连接分配专用资源。当预期客户机连接总数较小,或客户机向数据库发出的请求持续时间较长,使用该模式;SERVER = SHARED 表示共享服务器模式,多个客户端连接共享一个数据库分配的资源池,当大量用户需要同时连接数据库并且有效地利用系统资源时,使用此模式。

客户端连接测试:

1)会优先从节点rac1连接数据库

2)如果节点rac1出现故障,客户端的会话就会断开,不会自动连接到其他正常节点,需要重启会话建立连接

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is running on node rac1

[oracle@rac1 ~]$ srvctl stop instance -d orcl -i orcl1

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is not running on node rac1

3)当rac1实例恢复正常之后,新的会话还会优先通过该节点连接数据库

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is not running on node rac1

[oracle@rac1 ~]$ srvctl start instance -d orcl -i orcl1

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is running on node rac1

二. TAF(Transparent Application Failover)

客户端连接故障切换最大的问题是,建立连接后如果节点发生故障,是不能做到故障转移的,这样数据库的可用性就会大打折扣,所以oracle又提供了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.

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

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

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

3.DELAY和RETRIES 这两个参数代表重试间隔时间和重试次数。

示例:

在客户端的tnsnames.ora 配置如下:

客户端连接测试:

1)因为节点rac1是正常的,所以会从该节点连接到数据库

2)关闭节点rac1,当前会话会自动切换到正常节点连接数据库

补充:查看用户连接的TAF配置,如下

批注:查询结果中如果是NONE,说明这个连接没有使用TAF;如果和客户端tnsnames.ora配置中的相同,说明使用了TAF。
三.Service-Side TAF
Service-Side TAF,服务器透明故障转移可以看作是TAF的一个变种。首先Service-Side TAF也是TAF,所有TAF的特点它都具有;其次,这种TAF是在服务器
上配置的,而不像TAF在客户端配置的。
Client-Side TAF 配置过程需要修改客户端的tnsnames.ora文件,如果有很多客户端使用这个数据库,那么每次微小的参数调整都要把所有客户端的
tnsnames.ora都调整一遍,既低效又易出错。而Service-Side TAF通过结合Service,在数据库里保存FAIL-MODE的配置,把所有的TAF配置保存在数据字典
中,从而省去了客户端的配置工作。
从配置参数而言,Service-Side TAF和TAF相比多了一个Instance Role 的概念。所谓实例Instance Role就是当多个Instance参与一个Service时,可以配置优化
使用哪一个Instance为用户提供服务。用户共享两种可选角色。
PREFERRED:首选实例,会优先选择拥有这个角色的实例提供服务。
AVAILABLE:后备实例,用户连接会优先选择PREFERRED的Instance,当PREFERRED的Instance不可用时,才会转到AVAILABLE的Instance上。
要使用Service-Side TAF必须配置Service。Service 可以在创建数据库时创建,也可以在数据库创建之后修改;既可以通过配置向导也可以通过命令方式进行
配置。
下面分别演示采用DBCA和手工两种方式配置Service的过程。
方式一:使用DBCA配置Service
1)oracle用户下运行DBCA出现欢迎界面

2)在已有的RAC数据库上创建新的Service,此处选择"Service Management"

3)选择要配置Service的数据库

4)添加Service名字以及定义实例角色

5)查看配置的Service是否创建成功
[oracle@rac1 ~]$ crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora.HHPEN1.db application 0/1 0/1 OFFLINE OFFLINE
ora.orcl.db application 0/1 0/1 ONLINE ONLINE rac2
ora....l1.inst application 0/5 0/0 ONLINE ONLINE rac1
ora....l2.inst application 0/5 0/0 ONLINE ONLINE rac2
ora...._TAF.cs application 0/0 0/1 ONLINE ONLINE rac1
ora....cl1.srv application 0/0 0/0 ONLINE ONLINE rac1
ora....SM1.asm application 0/5 0/0 ONLINE ONLINE rac1
ora....C1.lsnr application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.gsd application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.ons application 0/3 0/0 ONLINE ONLINE rac1
ora.rac1.vip application 0/0 0/0 ONLINE ONLINE rac1
ora....SM2.asm application 0/5 0/0 ONLINE ONLINE rac2
ora....C2.lsnr application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.gsd application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.ons application 0/3 0/0 ONLINE ONLINE rac2
ora.rac2.vip application 0/0 0/0 ONLINE ONLINE rac2
SQL> show parameter service;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
service_names string orcl, orcl_TAF6)如果客户端想要通过service方式连接数据库,需要在TNS条目中使用service_name方式引用数据库。
7)修改Service的TAF配置,需要使用dbms_service.modify_service

批注:无论使用DBCA还是srvctl命令来配置Service,都无法配置TAF的type、delay、retries这三个属性。必须使用dbms_service包来修改这些属性。
8)确认修改已经生效

方式二:使用命令配置Service
1)创建Service语法如下:
srvctl add service -d -s -r "preferred-instance-list" -a "avaiable-instance-list" -p
批注:其中TAF-policy选项可以是BASIC或PRECONNECT
2)查看配置
srvctl config service -d database-name [-s service-name] [-a]
客户端连接测试:
在ORACLE 10G中配置了Service-Side TAF之后,客户端甚至不需要tnsnames.ora文件,而是使用ORACLE 10G提供的新连接方法Easy Connect Naming
Methods。为了展示这一特性,测试之前先把客户端的tnsnames.ora文件改名存放,以保证客户端在没有TNS的情况下进行这个测试。使用Easy Connect
Naming Methods时的连接串格式如下:
username/password@[//]host[:port][/service_name]
客户端连接操作如下:

批注:该连接对应的server process的OS PID是14469,在操作系统上杀掉这个进程。
[oracle@rac1 ~]$ ps -ef|grep 14469
oracle 14469 1 0 19:47 ? 00:00:00 oracleorcl1 (LOCAL=NO)
oracle 18000 17607 0 19:50 pts/3 00:00:00 grep 14469
[oracle@rac1 ~]$ kill -9 14469当前会话查询实例名和运行状态,此时会话已断开如下:

批注:按理说应该会跳转到rac2节点上,肯定哪个地方配置错了,稍后重新再看看。
上述方法没奏效,我选择关闭节点rac1的实例,验证结果。

补充:相同环境进行测试failover
1.客户端连接并查询会话ID

2.通过session ID在服务器端操作系统中删除该会话连接

3.会话并没有断开,服务器为其分配一个新的session ID

批注:当客户端连接集群数据库时,由于某些原因session ID被异常终端,已经配置了服务器端的故障转移,该会话并不会终端,而是服务器为其分配一个
新的session ID,继续通过当前会话为用户提供对数据库的操作。如果当前会话连接的实例宕掉,会自动去寻找备用实例。

00600 ora 关闭oracle_Oracle集群高可用故障切换相关推荐

  1. golang检查tcp是否可用_宕机处理:Kubernetes集群高可用实战总结

    导语 | 在企业生产环境,Kubernetes高可用是一个必不可少的特性,其中最通用的场景就是如何在Kubernetes集群宕机一个节点的情况下保障服务依旧可用.本文对在该场景下实现集群和应用高可用过 ...

  2. Hadoop集群高可用及zookeeper+kafka组件搭建

    目录 一.Hadoop集群高可用 1.Zookeeper概述 1)Zookeeper基本概述 3)Zab协议 3)observer 4)zookeeper集群图例 2.zookeeper集群搭建 3. ...

  3. 宕机处理:Kubernetes集群高可用实战总结

    导语 | 在企业生产环境,Kubernetes高可用是一个必不可少的特性,其中最通用的场景就是如何在Kubernetes集群宕机一个节点的情况下保障服务依旧可用.本文对在该场景下实现集群和应用高可用过 ...

  4. 【kubernetes】k8s集群高可用部署安装和概念详细说明【含离线部署】,客户端连接haproxy访问高可用流程

    文章目录 说明 高可用原理 K8S多master节点架构图 测试环境说明 部署高可用 安装包准备[可选] 高可用架构说明 配置haproxy 说明[必看] 安装haproxy 编辑配置文件 配置etc ...

  5. redis进阶持久化、事务、主从复制、集群高可用

    一.redis持久化 1 Rdb方式 Rdb方式一般为redis的默认数据持久化方式.默认开启,是通过手动(save-阻塞式,bgsave-异步)或周期性方式保存redis中key/value的一种机 ...

  6. PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署

    PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...

  7. SpringCloud(第 051 篇)EurekaServer集群高可用注册中心以及简单的安全认证

    SpringCloud(第 051 篇)EurekaServer集群高可用注册中心以及简单的安全认证 - 一.大致介绍 1.前面章节分析了一下 Eureka 的源码,我们是不是在里面注意到了 Peer ...

  8. mysql-mmm 集群高可用软件介绍

    mysql-mmm 集群高可用软件介绍 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)    关于mysql主主复制配置的监 ...

  9. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!

    摘要:在华为全联接2021期间,华为云GaussDB(for openGauss)正式推出重大内核新特性--同城双集群高可用方案,提供金融级高可用服务,支持RPO=0 .RTO<60s的同城双集 ...

最新文章

  1. 【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除
  2. php cookie使用实例h5,html5实现数据存储实例代码
  3. 这个AI能帮你快速搜监控:文字定位关键画面,24小时录像10分钟处理完
  4. ECSHOP 商品分类树显示商品总数的方法
  5. 使用java程序对新浪微博的内容进行语义分析
  6. 鸿蒙系统公测版发布,鸿蒙OS2.0系统公测版什么时候发布-适配机型
  7. 一日一技:ASP.NET Core Api网关Ocelot初探
  8. Java中父类的静态变量和静态方法的继承问题
  9. 常用JavaScript函数 1 - 15 (自我总结)
  10. java file用法_Java File 类的使用方法详解(转)
  11. 引物设计软件primer_PCR-引物设计原则
  12. php各种加密特征,php 开发中加密的几种方法总结
  13. windows中使用Git工具连接GitHub(配置篇)
  14. Zygo保存zxg(Zemax File)文件(光学领域知道Zygo的一定要看)
  15. DeepFake技术--实际操作
  16. linux典型压缩包操作 tar打包、压缩与解压
  17. Web全栈工程师基本素养
  18. 《硬件接入》海康威视接入及CPU性能优化思路
  19. 谈谈5G的信道编码方法
  20. 微商新手如何选产品?史上最详细操作指南!

热门文章

  1. 复杂度O(n)倒转链表
  2. git reset, git checkout, git revert 区别 (译)
  3. PHP_正则_获取图片所有属性
  4. Hanoi(汉诺)塔问题
  5. Ubuntu 找不到libc.so.6
  6. 三大最被低估的安全技术 用户数量决定一切
  7. iphone开发之C++和Objective-C混编
  8. 微软中文网,越办越好了!
  9. kangle支不支持PHP_【转载】PHP调用kangle的API
  10. pycharm快捷键_春节快结束了回单位途中总结下pycharm快捷键