负载均衡和故障转换(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) ) )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现