TAF:Transparent Application Failover,透明的应用切换,即在切换的过程中,用户感知不到。可以实现会话的切换(无法实现事务的切换,即没有提交的事务会回滚),即在不断开连接的情况下,将当前会话切换到另一个实例。JDBC驱动无法使用TAF特性,因此只能断开连接并重新连接。
SCANIP+SERVICE实现负载均衡和TAF
1.配置SERVICE
以上为添加Service的语法,重点关注几个选项。
-d 给哪一个数据库添加service,有可能clusterware管理好几个数据库
-s 新建的service的名称
-r 优先选择哪一个实例,实例间用逗号隔开
-a 优先选择的实例全部不可用时使用这里面的实例。
-r 内的实例是负载均衡的,-r和-a之间是FailOver的,因此两节点的实例需要负载均衡的话,应该讲两节点实例都写入-a中
-p 一般选择basic,perconnect即在其中一个实例建立会话的时候,在另一个实例上面也新建一个连接。当第一个实例不可用时,可以实现会话的快速转移。但是,这种方法想到耗费资源、
basic,只有当实例1的不可用时,才在实例2创建会话并将会话转移过来
-y 自动FAILOVER还是手动FAILOVER
-e session的话是FAILOVER的时候不会返回剩余的SELECT结果集。SELECT不会断开会话,未提交的事务回归。select语句返回剩余的结果集、
-m 一般与-p参数相同
-w 失败重试的时间间隔
-z 失败重试几次
[oracle@rac01 ~]$ srvctl add service -d racdb -s rac -r racdb1,racdb2 -P BASIC -y AUTOMATIC -e select -m BASIC -w 3 -z 10 [oracle@rac01 ~]$ srvctl start service -d racdb -s rac [oracle@rac01 ~]$ srvctl config service -d racdb -s rac
2.配置客户端TNS
DG= (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=10.206.132.238) (PORT=1521) ) (CONNECT_DATA= (SERVER=dedicated) (SERVICE_NAME=rac) ) )
中间10.206.132.238是SCANIP,SERVICE_NAME是Service的名称
测试负载均衡:使用swingbench压测工具,创建50个连接,执行如下SQL可以看到,50个连接平均的分配到两个实例上
测试TAF:JDBC无法使用TAF特性,因此不要使用JDBC类客户端,这里直接用SQLPLUS进行测试
连接后,查询到会话在实例1上面
重启实例1所在服务器,再次查询
这时打开连接数据库的sqlplus发现并没有断开,而且依旧可以执行命令
配置本地TNS实现负载均衡和TAF
1.删除上一步创建的service
2.配置本地的TNS
MONKEY= (DESCRIPTION= (FAILOVER=on) (LOAD_BALANCE=on) (ADDRESS_LIST= (ADDRESS= (PROTOCOL=TCP) (HOST=10.206.132.237) (PORT=1521) ) (ADDRESS= (PROTOCOL=TCP) (HOST=10.206.132.238) (PORT=1521) ) ) (CONNECT_DATA= (FAILOVER_MODE= (TYPE=select) (METHOD=basic) ) (SERVER=dedicated) (SERVICE_NAME=racdb) ) )
10.206.132.236和10.206.132.238是两个VIP。连接的时候会随机选择一个IP实现负载均衡。
这种情况下,没有测出来负载均衡,但是可以实现TAF
SCANIP和SERVICE实现TAF,并分业务(不用负载均衡)
[oracle@rac01 ~]$ srvctl add service -d racdb -s rac01 -r racdb1 -a racdb2 -P basic -y automatic -e select [oracle@rac01 ~]$ srvctl add service -d racdb -s rac02 -r racdb2 -a racdb1 -P basic -y automatic -e select [oracle@rac01 ~]$ srvctl start service -d racdb [oracle@rac01 ~]$ srvctl status service -d racdb
客户端连接
sqlplus monkey/monkey@10.206.132.239:1521/rac01 sqlplus monkey/monkey@10.206.132.239:1521/rac02
可以实现业务分离和TAF
本地TNS实现TAF,并分业务(不用负载均衡)
MONKEY= (DESCRIPTION= (ADDRESS_LIST= (FAILOVER=on) (LOAD_BALANCE=off) (ADDRESS= (PROTOCOL=TCP) (HOST=10.206.132.237) (PORT=1521) ) (ADDRESS= (PROTOCOL=TCP) (HOST=10.206.132.238) (PORT=1521) ) ) (CONNECT_DATA= (FAILOVER_MODE= (TYPE=select) (METHOD=basic) (RETRIES=10) (DELAY=3) ) (SERVICE_NAME=racdb) ) )