RAC11g创建Service实现Failover

Oracle版本:Oracle11g R2 x86企业版(RAC)
操作系统:OEL 5.4

一般我们实现RAC节点上的故障转移,可以在客户端的tnsnames.ora文件当中,或者在服务器中配置Service实现故障转移功能;

我们可以通过srvctl命令创建Service,例子如下:

1.首先我们确保crs服务全部online
[grid@rac1 admin]$ crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2        
ora.ONE.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.THREE.dg   ora....up.type ONLINE    ONLINE    rac1        
ora.TWO.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        
ora.eons       ora.eons.type  ONLINE    ONLINE    rac1        
ora.gsd        ora.gsd.type   ONLINE    ONLINE    rac1        
ora....network ora....rk.type ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        
ora....SM1.asm application    ONLINE    ONLINE    rac1        
ora....C1.lsnr application    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    ONLINE    ONLINE    rac1        
ora.rac1.ons   application    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora....SM2.asm application    ONLINE    ONLINE    rac2        
ora....C2.lsnr application    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    ONLINE    ONLINE    rac2        
ora.rac2.ons   application    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora.racdb.db   ora....se.type ONLINE    ONLINE    rac1        
ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2 

2.利用srvctl命令创建Service,首先我们可以通过直接输入srvctl命令查看用法,之后输入命令$ srvctl add service后发现不知道怎样写参数,可以在后面加-h,参考下面红字
[grid@rac1 admin]$ srvctl 
Usage: srvctl 

[]
    commands: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
    objects: database|instance|service|nodeapps|vip|asm|diskgroup|listener|srvpool|server|scan|scan_listener|oc4j|home|filesystem|gns
For detailed help on each command and object and its options use:
  srvctl -h or
  srvctl -h
[grid@rac1 admin]$ srvctl add service -h 

3.根据以上命令补充参数值,发现报错信息,原因是需要在oracle用戶下创建该Service
[grid@rac1 admin]$ srvctl add service -d RACDB -s service1 -r RACDB1,RACDB2 -P BASIC -e SELECT -m BASIC
PRCD-1026 : Failed to create service service1 for database RACDB
PRKH-1014 : Current user grid is not the same as oracle owner oracle of oracle home /u01/app/oracle/product/11.2.0/db_1.

4.创建Service
[grid@rac1 admin]$ su - oracle
[oracle@rac1 ~]$ srvctl add service -d RACDB -s service1 -r RACDB1,RACDB2 -P BASIC -e SELECT -m BASIC

5.此时可以查看crs服务状态,发现新增了一个服务,如下红字
[grid@rac1 admin]$ crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2        
ora.ONE.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.THREE.dg   ora....up.type ONLINE    ONLINE    rac1        
ora.TWO.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        
ora.eons       ora.eons.type  ONLINE    ONLINE    rac1        
ora.gsd        ora.gsd.type   ONLINE    ONLINE    rac1        
ora....network ora....rk.type ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        
ora....SM1.asm application    ONLINE    ONLINE    rac1        
ora....C1.lsnr application    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    ONLINE    ONLINE    rac1        
ora.rac1.ons   application    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora....SM2.asm application    ONLINE    ONLINE    rac2        
ora....C2.lsnr application    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    ONLINE    ONLINE    rac2        
ora.rac2.ons   application    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora.racdb.db   ora....se.type ONLINE    ONLINE    rac1        
ora....ce1.svc ora....ce.type OFFLINE   OFFLINE               
ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2

6.将其服务打开
[grid@rac1 admin]$ srvctl start service -d RACDB -s service1

**在启动的同时,我们可以查看全部节点的alert日志,发现会回显以下内容
Thu Jun 11 10:47:24 2015
ALTER SYSTEM SET service_names='service1' SCOPE=MEMORY SID='RACDB1';
Thu Jun 11 10:47:24 2015
ALTER SYSTEM SET service_names='service1' SCOPE=MEMORY SID='RACDB2';
[grid@rac1 admin]$ crs_stat -t 再次查看信息发现该服务已经ONLINE
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2        
ora.ONE.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.THREE.dg   ora....up.type ONLINE    ONLINE    rac1        
ora.TWO.dg     ora....up.type ONLINE    ONLINE    rac1        
ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        
ora.eons       ora.eons.type  ONLINE    ONLINE    rac1        
ora.gsd        ora.gsd.type   ONLINE    ONLINE    rac1        
ora....network ora....rk.type ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        
ora....SM1.asm application    ONLINE    ONLINE    rac1        
ora....C1.lsnr application    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    ONLINE    ONLINE    rac1        
ora.rac1.ons   application    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        
ora....SM2.asm application    ONLINE    ONLINE    rac2        
ora....C2.lsnr application    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    ONLINE    ONLINE    rac2        
ora.rac2.ons   application    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        
ora.racdb.db   ora....se.type ONLINE    ONLINE    rac1        
ora....ce1.svc ora....ce.type ONLINE    ONLINE    rac1        
ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2


7.查看该Service信息
[grid@rac1 admin]$ srvctl config service -d RACDB -s service1
Service name: service1
Service is enabled
Server pool: RACDB_service1
Cardinality: 2
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: SELECT
Failover method: BASIC
TAF failover retries: 0
TAF failover delay: 0
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: BASIC
Preferred instances: RACDB1,RACDB2
Available instances: 

8.查看监听信息,发现该Service已经注册到监听当中
[grid@rac1 admin]$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 11-JUN-2015 10:50:01


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                11-JUN-2015 10:37:34
Uptime                    0 days 0 hr. 12 min. 28 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=**)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=**)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "RACDB" has 1 instance(s).
  Instance "RACDB1", status READY, has 1 handler(s) for this service...
Service "RACDBXDB" has 1 instance(s).
  Instance "RACDB1", status READY, has 1 handler(s) for this service...
Service "service1" has 1 instance(s).
  Instance "RACDB1", status READY, has 1 handler(s) for this service...
The command completed successfully

9.接下来我们只需要在客户端上的tnsnames.ora文件中配置该TNS name信息即可,如下
[oracle@rac1 admin]$ more tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.or
a
# Generated by Oracle configuration tools.
RACDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RACDB)
    )
  )

RACDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = **)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = service1)
    )
  )

10.之后就可以通过该TNS远程随机连接到节点上
[oracle@rac1 admin]$ sqlplus sys/oracle@racdb1 as sysdba

相关参考:

05_RAC_FAILOVER特性_wolihaito的博客-CSDN博客
 

FAILOVER特性

1.failover 即节点故障后的切换,这是RAC的高可用特性之一。failover 的切换只能完成会话级别的切换。
也就是说,如果正在执行DML语句,当节点发生故障时,所有的事物都将被回滚,只有会话本身能被切换过去。如果执行的是select 查询语句,根据配置情况可以实现查询的切换。
2.通常应用服务器通过JDBC的方式连接到RAC数据库,由于JDBC不支持TAF,所以通过JDBC方式连接到RAC 的数据库会话无法切换,只能依赖应用服务器感知连接的丢失,并重新创建新的联结来弥补丢失的会话。
这对应用程序通常会带来数秒的停滞,但很快即可得到恢复。
3.从11g r2 开始,oracle 推荐使用scan 实现节点的负载均衡,使用service实现节点间的failover 。
4.failover 分为连接时FAILOVER 和 TAF (TRANSPARENT APPLICATION FAILOVER),TAF 又分为 client-side TAF 和 server-side TAF.(注意:主要以server-sid TAF 做说明。)
5.TAF(TRANSPARENT APPLICATION FAILOVER)机制:再高可用环境中,当节点失败,TAF机制确保发生失败切换,根据配置的不同重定向或者重新创建客户端到服务器的连接,根据配置恢复一个还未执行完成的select语句。
6.service是rac中的重要组件,它是实现failover的方法之一,它与scan 配合能实现RAC的负载均衡和failover两大特性。使用service能控制客户端的访问路径,减少cache fusion 对私有网络资源的消耗。
server-side TAF:

TAF 的类型分为:session failover 和 select failover
session failover :重新创建丢失的连接和会话
select failover :在处理过程中重演查询

FAILOVER_MODE 包含的参数:
BACKUP :指定用于创建佩芬联结的本地服务名,当使用preconnect预创建连接时应该指明这个参数值。
DELAY :延迟尝试连接的时间,单位为秒,如果指定了retries,delay 默认值是1
METHOD :TAF的配置包含如下两种failover 切换方法:
1.preconnect:创建到切换实例的预连接,提供了快速FAILOVER的能力(没有时间延迟,但是建立多个冗余连接会消耗更多的资源)
2.basic :再发生failover 的时候才创建连接(会有时间延迟)

RETRIES:failover 发生之后尝试连接的次数。如果指明了delay参数,那么retries 默认值是5
TYPE :TAF的配置包含如下三种failover 的类型:
1.session:如果用户连接丢失,新的绘画将自动被创建。这种类型的failover不能尝试恢复select 操作
2.select :如果用户连接丢失,新创建的会话将继续之间失败之后的select 操作。
3.none :这是默认值,不具备failover功能。这个能被明确的指明用于防止failover的发生。

配置:
srvctl add service -d rac -s ractest2 -r rac2 -a rac1 -m BASIC -P BASIC -y automatic -e SELECT -z 10
srvctl add service -d rac -s ractest1 -r rac1 -a rac2 -m BASIC -P BASIC -y automatic -e SELECT -z 10

-e: 表示type参数
-m:表示method参数
-w:表示delay参数
-z:表示retries参数
-d:数据库名称
-r:首选节点列表
-a:备选节点列表
-P{BASIC|NONE|PRECONNECT}TAF:策略,对应failover_method属性
-y{AUTOMATIC|MANUAL}:是否自动启动

—启动:
srvctl start service -d rac -s ractest1
srvctl start service -d rac -s ractest2

–停止:
srvctl stop service -d rac -s ractest1
srvctl stop service -d rac -s ractest2

–移除:
srvctl remove service -d rac -s ractest1
srvctl remove service -d rac -s ractest2

–查看service的属性值:
srvctl config service -d rac -s rac1 -v

–验证是否具备FAILOVER能力
sql>SELECT T.MACHINE,
T.FAILOVER_TYPE,
T.FAILOVER_METHOD,
T.FAILED_OVER,
COUNT(1)
FROM V$SESSION T
GROUP BY T.MACHINE, T.FAILOVER_TYPE, T.FAILOVER_METHOD, T.FAILED_OVER

–故障恢复后切回
srvctl relocate service -d rac -s ractest2 -i rac1 -t rac2
————————————————
版权声明:本文为CSDN博主「wolihaito」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wolihaito/article/details/104741908

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装Oracle 11g RAC(Real Application Clusters)在VM上需要一些步骤和准备工作。以下是一个简单的步骤指南: 1. 首先,确保你已经安装了VMware虚拟机软件,并创建了两个虚拟机用于Oracle RAC集群。 2. 在每个虚拟机上安装操作系统,可以选择Oracle支持的操作系统版本,如Oracle Linux或Red Hat Enterprise Linux。 3. 配置网络设置,确保两个虚拟机可以相互通信。可以使用VMware的网络配置工具来设置虚拟机的网络连接。 4. 安装Oracle Grid Infrastructure(GI)软件。GI是Oracle RAC的基础,它提供了集群管理和共享存储等功能。按照Oracle官方文档的指导进行安装和配置。 5. 创建共享存储。Oracle RAC需要共享存储来实现数据的共享和高可用性。你可以使用VMware提供的共享存储选项,如NFS或iSCSI。 6. 安装Oracle Database软件。在每个节点上安装Oracle Database软件,并按照Oracle官方文档的指导进行配置。 7. 创建数据库实例。使用Oracle Database软件创建数据库实例,并配置实例参数和监听器等。 8. 配置集群。使用Oracle Clusterware工具来配置集群资源,如VIP地址、监听器和服务等。 9. 测试集群。验证Oracle RAC集群的功能和性能,确保数据库实例可以在不同节点之间切换和访问。 以上是一个简要的步骤指南,安装Oracle 11g RAC还涉及到很多细节和配置选项,建议参考Oracle官方文档或相关的教程进行详细的安装和配置。如果你有具体的问题或需要更详细的指导,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值