ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 灵活实现RAC三节点的负载均衡及TAF配置(二)

灵活实现RAC三节点的负载均衡及TAF配置(二)

原创 Linux操作系统 作者:yangtingkun 时间:2009-04-19 20:42:43 0 删除 编辑

这两天配置了一个三节点的RAC环境,想起前一段时间Thomas Zhang给我出的一个题目,配置一个三节点RAC环境的复杂负载均衡以及Transparent Application Failover的服务名。现在有环境了,可以将给出验证后的结果了。

这篇文章检验给出的实现是否满足需求。

灵活实现RAC三节点的负载均衡及TAF配置(一):http://yangtingkun.itpub.net/post/468/482683

 

 

上一篇给出了一个灵活设置负载均衡以及TAF的需求,同时给出了这个需求首先的TNSNAMES配置。这篇来验证一下配置是否正确。

首先在客户端的TNSNAMES.ORA中添加配置,由于篇幅的问题,这里就不重复了,具体配置可以参考第一篇文章。

下面首先验证第一点,通过SERVICEA服务是否实现在实例1和实例2上的负载均衡,通过SERVICEB服务是否可以登陆实例3

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

可以看到在目前两个实例的负载都很小的情况下,SERVICEA以一种近似轮巡的方式分别连接到实例TESTRAC1TESTRAC2上。

SQL> CONN TEST/TEST@SERVICEB
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> CONN TEST/TEST@SERVICEB
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> CONN TEST/TEST@SERVICEB
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> CONN TEST/TEST@SERVICEB
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SERVICEB显然只能连接到实例TESTRAC3上。

下面验证第二点需求,分别验证TESTRAC1TESTRAC2实例失败的情况:

SQL> CONN TEST/TEST@SERVICEA
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

客户端通过SERVICEA连接到TESTRAC1上,下面通过SRVCTL命令关闭TESTRAC1:

bash-3.00$ srvctl status db -d testrac
实例 testrac1 正在节点 racnode1 上运行
实例 testrac2 正在节点 racnode2 上运行
实例 testrac3 正在节点 racnode3 上运行
bash-3.00$ srvctl stop inst -d testrac -i testrac1

下面检查刚才的会话是否已经迁移到TESTRAC2上:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac2
testrac3

下面启动TESTRAC1实例:

bash-3.00$ srvctl start inst -d testrac -i testrac1

检查目前数据库实例状态:

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac2
testrac1
testrac3

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

下面关闭实例TESTRAC2

bash-3.00$ srvctl stop inst -d testrac -i testrac2

检查会话的所在实例:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac1
testrac3

可以看到这个配置已经满足需求的第二点,当TESTRAC1实例异常,切换到TESTRAC2,如果TESTRAC2实例异常则切换到TESTRAC1,下面验证需求的第三点,如果实例1和实例2都发生异常的情况。

利用srvctl关闭实例1

bash-3.00$ srvctl stop inst -d testrac -i testrac1

检查会话所在实例:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac3

现在满足了负载均衡的第三点需求,当两个实例都失败时,切换到第三个实例TESTRAC3上。最后验证最后一个需求。

bash-3.00$ srvctl status db -d testrac
实例 testrac1 没有在 racnode1 节点上运行
实例 testrac2 没有在 racnode2 节点上运行
实例 testrac3 正在节点 racnode3 上运行
bash-3.00$ srvctl start inst -d testrac -i "testrac1,testrac2"

检查实例启动情况:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac3
testrac2
testrac1

下面关闭实例TESTRAC3

bash-3.00$ srvctl stop inst -d testrac -i testrac3

检查会话所在实例:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac2
testrac1

启动实例TESTRAC3

bash-3.00$ srvctl start inst -d testrac -i testrac3

重新以SERVICEB服务登陆:

SQL> CONN TEST/TEST@SERVICEB
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac3

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac3
testrac2
testrac1

使用其他客户端,多建立几个连接,连接到TESTRAC2实例,然后再次关闭TESTRAC3实例:

bash-3.00$ srvctl stop inst -d testrac -i testrac3

检查实例所在会话:

SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac1

SQL> SELECT INSTANCE_NAME FROM GV$INSTANCE;

INSTANCE_NAME
----------------
testrac1
testrac2

这个配置显然也满足了第四点需求,在实例3出现问题的时候在实例TESTRAC1和实例TESTRAC2上实现负载均衡的切换。

至此所有验证工作完成,这个TNSNAMES.ORA的配置满足所有的负载均衡和TAF的需求。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-590957/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Oracle收购SUN
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10437399