Rac负载均衡与故障转移测试
环境oracle rac 11g
客户端的负载均衡
服务端无需设置,客户端配置LOAD_BALANCE即可,ip地址列表可以是host ip,vip或者scan。
oradb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.125)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.126)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.127)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oradb)
)
)
服务端的负载均衡
remote_listener参数
1如果连接使用的地址是scan地址,那么这个参数必须设置为scan:port
直接Ezconnect即可实现负载均衡,上图200.125是其中一个scna地址
2如果连接使用的是vip,那么remote_listener必须设置为vip的地址列表。
123和124是vip。
alter system set remote_listener =’
(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.200.123)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.200.124)(PORT=1521))
))’ sid=’*’;
无需重启监听,即可看到监听的变化,两个节点的一样。
同样Ezconnect直接连接即可实现负载均衡。
注意:
如果设置了remote_listener,那么即使客户端tns里面关闭了LOAD_BALANCE,那么负载均衡同样是生效的。
客户端的故障转移(TAF)
这里的地址列表是vip
oradb_ha=
(DESCRIPTION=
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.123)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.124)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oradb)
(FAILOVER_MODE =
(TYPE=session)
(METHOD=basic)
(RETRIES=10)
(DELAY=10)
)
)
)
1测试两种方式:
1.1一种通过tns连接,一种通过单scan连接
1.2然后关掉rac01的集群
1.3.1使用vip连接的窗口:
继续查询出现短暂错误之后,再次查询会发现已经切换到了rac02
1.3.2使用单scan连接的窗口
直接查询已经失败,必须重新登录。
这里单vip连接同样失败,并且再次登录也是失败,提示没有监听。
这里得出一个结论,Ezconnect无法实现运行时故障转移。
服务端的故障转移(TAF)测试失败
添加服务:
srvctl modify service -d oradb -s oradb_ha -w 10 -z 30 -q true
启动服务:
srvctl start service -d oradb
查看rac1监听:
Rac2监听:
修改客户端tns,关闭客户端FAILOVER_MODE,并修改service_name。
这里测试三种连接方式:
使用刚才配置的tns
Ezconnect 使用vip
Ezconnect使用单scan
然后停止rac1的crs
[root@rac01 ~]# /u01/app/11.2.0/grid/bin/crsctl stop crs
查看监听服务已经转移到了rac2.
三个不同连接方式的窗口再次执行语句全部失败:
但是可以重新登录,再次登录就会登录到rac02
结论:
不管要实现负载均衡也好,故障转移也好,我觉得客户端的配置都是很关键的一点,如果只是需要负载均衡,那么服务端只要配置remote_listener即可,但是要实现故障转移,故障转移也分为两种表现形式,一种是不需要重新登录的,一种是需要重新登录的,我对服务了解不多,就从做实验来看,即使配置了服务的故障转移,当节点down后,已经登录的窗口需要重新登录才能连接oracle。