Failover测试

Oracle RAC是一个集群数据库,可以实现负载均衡和故障无缝切换。这些技术实现的基础就是failover(故障转移)

Oracle 10g RACfailover可以细分成3种,分别是:

Client-Side Connect time Failover;

TAF;

Service-Side TAF.

Client-Side Connect time FailoverTAF是基于客户端连接的负载均衡,Service-Side TAF是基于服务器端的负载均衡。

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

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

TAF,就是连接建立以后、应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他的健康实例上。

Service-Side TAF也是TAF,所有TAF的特点它都具有;其次,这种TAF是在服务器上配置,而不像TAF是在客户端配置的。

1、   测试方法

(1)、一个两节点的RAC,两个节点分别是rac1rac2;

(2)、客户端的tnsnames.ora配置两个条目,分别使用两种failover;

(3)、客户端利用这两个tnsnames条目,打开两个窗口,建立两个连接,做一些操作;

(4)、在服务器上,用kill命令杀掉两个连接对应的Server Process来模拟节点故障(也可以重启的方式)

(5)、经过一个短暂时间后,使用TAF的连接会自动转移到其他实例上,用户可以继续在这个窗口中执行语句;

(6)、而使用Client-Side Connect Time Failover的连接不会自动转移,用户必须重新连接.

首先,先建立两个用户,并授予相关权限

 

RHEL5安装Oracle10gRAC on VMware Server1.0之十_Oracle

 

2、   测试步骤

(1)、编辑客户端tnsnames.ora文件,在其中添加两个条目,分别使用两种failover机制,JH对应Client-Side,而YS对应TAF

使用Client-Side Connect Time FailoverTNS配置如下:

JH =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.1.116)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.1.117)(PORT = 1521))

    (LOAD_BALANCE = yes)

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = rac)

    )

  )

使用TAFTNS配置如下,其中红色部分是TAF内容:

YS =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.1.116)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.1.117)(PORT = 1521))

    (LOAD_BALANCE = yes)

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = rac)

      (FAILOVER_MODE=

        (TYPE = session)

        (METHOD = basic)

        (RETRIES = 180)

        (DELAY = 5)

       )

    )

  )

(2)、开启两个窗口,分别使用两个TNS进行连接。

第一个窗口,使用Client-Side Connect Time FailoverTNS

Sqlplus ac/ac.green@jh

RHEL5安装Oracle10gRAC on VMware Server1.0之十_Oracle_02

第二个窗口,使用TAFTNS

Sqlplus green/ac.green@ys

RHEL5安装Oracle10gRAC on VMware Server1.0之十_Oracle_03

(3)、连接成功后,在两个窗口中执行语句。

在第一个窗口中,查看用户连接到的实例:

RHEL5安装Oracle10gRAC on VMware Server1.0之十_数据库_04

查看连接的TAF配置

RHEL5安装Oracle10gRAC on VMware Server1.0之十_数据库_05

查询结果中AC的用户两个都是NONE,说明这个连接没有使用TAF

Green帐户则使用了TAF

在第二个窗口中,查看GREEN连接到的实例

RHEL5安装Oracle10gRAC on VMware Server1.0之十_安装_06

(4)、因为两个用户都连接到rac1这个实例上,所以重启节点rac1.

(5)、返回到两个窗口,再执行SQL语句,两个连接都抛出错误。

RHEL5安装Oracle10gRAC on VMware Server1.0之十_安装_07

(6)、稍等一会,再次执行语句

第一个窗口显示

RHEL5安装Oracle10gRAC on VMware Server1.0之十_Oracle_08

使用Client-Side Connect Time Failover的窗口,仍然报出错误,说明用户连接没有被failover.

第二个窗口显示

RHEL5安装Oracle10gRAC on VMware Server1.0之十_数据库_09

使用TAF窗口,用户查询正常,说明用户连接已经被failover.

如果这步实验是用kill进程的方法,用户是不会被迁移到rac2实例上的。