负载均衡和故障转换(Failover)的连接RAC方法

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)
    )
  )
原文地址:https://www.cnblogs.com/monkey6/p/13594138.html