Oracle Rac 的 “HA” 和 “LB”

本文深入解析OracleRAC的高可用性(HA)和负载均衡(LB)原理,探讨Failover机制如何确保系统在节点故障时无缝切换,以及SCAN特性如何实现负载均衡和自动故障转移。此外,详细介绍了TAF(透明应用程序故障转移)的配置和测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle Rac 的 “HA” 和 “LB”

  • 释义

HA:High Availiablity 高可用
LB:Load balance 负载均衡,把负载均衡的分配到集群中的各个节点,从而提供整体的吞吐能力。

可用性是指一个系统可用时间的比率。
一般使用“平均故障间隔时间(MTTF)” 和 “平均故障修复时间(MTTR)”作为评价可用的度量标准。

公式:
可用性=MTTF/(MTTF+MTTR)
如果一个服务器连续运行6个月出现了一次故障,修复使用了20分钟,那么可用性为:
6个月/(6个月+20分钟)*100=99.92%

  • Rac(Real application cluster)

Failover(故障转移)
Rac的高可用技术基础是Failover,就是指集群中任何一个节点的故障都不会影响用户使用,可以最大程度的解决单节点的故障,接到故障节点的用户会被自动转移到健康节点,用户感知不到这种故障切换。

SCAN(single client access name)
SCAN-VIP是oracle 11gR2引入的一个非常重要的特性,通过它可以实现负载均衡的连接到数据库实例,scan提供统一的名称来访问集群,不需要像10g那种在每个访问数据库的客户端配置多个vip地址实现负载均衡。
添加和删除节点的情况下也不需要对客户端做任何配置修改,就可以实现所有节点的负载均衡。
PS:SCAN只能实现负载均衡,自动Failover,需要使用service服务。

  • 监听及TAF
    本地监听:公有IP和VIP
    SCAN监听:SCAN VIP

TAF(Transparent Application Faiover)透明应用程序故障转移
大部分的应用系统(例如Tomcat)都是启动时就建立若干到数据库的长连接,在应用程序调整生命周期内重用这些链接。未提交事务会回滚。
链接建立以后,应用系统运行过程中,如果某个实例发生故障,链接到这个实例上的用户会被自动迁移到其他的健康实例上。
JDBC不支持TAF。

分为:
client-side TAF(10g用的较多)
server-sid TAF(11g常用)

Method(用于定义何时创建到其他实例的连接)-----------
Basic(感知到节点故障时才创建其他实例的连接。在Failover时会有延迟)
Preconnect(在最初建立连接时,就同时建立到所有实例的连接,当发生故障时,立刻就切换到其他链路上,没有延迟,但是会建立多个连接,消耗更多的资源)。
所谓两种思路,用时间换资源,用资源换时间

Type(用于定义发生故障时对完成的SQL语句如何处理)----------
2中方式都对未提交的事务进行回滚。
select(用户正在执行的select语句会被转移到新的实例上,在新节点上继续返回后续结果集,已经返回的记录集抛弃)。
session(重新执行select语句)

server-sid TAF

- 添加service(需要在oracle用户下执行)
srvctl add service -d rtbrac -s rtbtaf -r rtbrac1,rtbrac2 -P BASIC -e select -m BASIC -w 5 -z 180
-r 首选实例
-a 备选实例
-p TAF策略选项(Basic,Preconnect)
-e 用于定义发生故障时对完成的SQL语句如何处理(select,session)
-w failover延迟
-z 重试次数

srvctl status service -d rtbrac
srvctl start service -d rtbrac -s rtbtaf
srvctl config service -d rtbrac -s rtbtaf
  • 测试服务端的TAF

1、使用TAF服务名/scan_ip进行连接
2、查看当前连接的实例是哪个(例如:rtbrac1)
3、查询select instance_name from v$instance
4、直接shutdown -h now rtbrac1所在的服务器
5、sqlplus端不用执行exit退出,再次执行select instance_name from v$instance,如果等会儿有返回,说明已经可以自动进行failover切换。
6、查看当前scanip在哪个节点(应该漂移到健康节点)

  • 删除serviceTAF
srvctl stop service -d rtbrac -s rtbtaf
srvctl remove service -d rtbrac -s rtbtaf
dbms_service.delete_service(service_name => 'rtbtaf');
  • 测试TAF服务端的负载均衡

shell执行脚本(taf_load.sh)

#!/bin/sh

count=0
while [ $count -lt $1 ]
do
        count=`expr $count + 1`
        sqlplus -s wyl/WYL@192.168.xxx.xxx:1521/rtbtaf @/script/test.sql
done

SQL执行脚本(test.sql)

col instance_name format a20
select instance_name from v$instance
/
exit;

执行taf_load.sh(./taf_load.sh 1000 >> /script/test.log)
查看log对比两个实力的连接负载情况
cat /script/test.log |grep “rtbrac1” |wc -l
cat /script/test.log |grep “rtbrac1” |wc -l
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值