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