詳解Oracle RAC 的“HA”和“LB”及如何用腳本測試負載均衡
概述
今天主要介紹一下ORACLE RAC的“HA”和“LB”概念,以及分享一個腳本測試一下RAC是否兩個節點有平均負載到。
1、相關概念
- HA:High Availiablity 高可用
- LB:Load balance 負載均衡,把負載均衡的分配到集群中的各個節點,從而提供整體的吞吐能力。
可用性是指一個系統可用時間的比率。
一般使用“平均故障間隔時間(MTTF)” 和 “平均故障修復時間(MTTR)”作為評價可用的度量標準。
公式:
可用性=MTTF/(MTTF+MTTR)
如果一個服務器連續運行6個月出現了一次故障,修復使用了20分鐘,那么可用性為:
6個月/(6個月+20分鐘)*100=99.92%
2、Rac(Real application cluster)

2.1、Failover(故障轉移)
Rac的高可用技術基礎是Failover,就是指集群中任何一個節點的故障都不會影響用戶使用,可以***程度的解決單節點的故障,接到故障節點的用戶會被自動轉移到健康節點,用戶感知不到這種故障切換。
2.2、SCAN(single client access name)
SCAN-VIP是oracle 11gR2引入的一個非常重要的特性,通過它可以實現負載均衡的連接到數據庫實例,scan提供統一的名稱來訪問集群,不需要像10g那種在每個訪問數據庫的客戶端配置多個vip地址實現負載均衡。
添加和刪除節點的情況下也不需要對客戶端做任何配置修改,就可以實現所有節點的負載均衡。
PS:SCAN只能實現負載均衡,自動Failover,需要使用service服務。
3、監聽及TAF
3.1、監聽
本地監聽:公有IP和VIPSCAN監聽:SCAN VIP
3.2、TAF(Transparent Application Faiover)透明應用程序故障轉移
大部分的應用系統(例如Tomcat)都是啟動時就建立若干到數據庫的長連接,在應用程序調整生命周期內重用這些鏈接。未提交事務會回滾。
鏈接建立以后,應用系統運行過程中,如果某個實例發生故障,鏈接到這個實例上的用戶會被自動遷移到其他的健康實例上。
JDBC不支持TAF。
分為:
- client-side TAF(10g用的較多)
- server-sid TAF(11g常用)
4、測試服務端的TAF
- 使用TAF服務名/scan_ip進行連接
- 查看當前連接的實例是哪個(例如:rtbrac1)
- 查詢select instance_name from v$instance
- 直接shutdown -h now rtbrac1所在的服務器
- sqlplus端不用執行exit退出,再次執行select instance_name from v$instance,如果等會兒有返回,說明已經可以自動進行failover切換。
- 查看當前scanip在哪個節點(應該漂移到健康節點)
5、腳本測試TAF服務端的負載均衡
1.shell執行腳本(taf_load.sh)
- #!/bin/sh
- count=0
- while [ $count -lt $1 ]
- do
- count=`expr $count + 1`
- sqlplus -s glogowner/Q5$gEGy4@172.16.10.30:1521/otmdb @/home/oracle/scripts/test.sql
- done
2.SQL執行腳本(test.sql)
- col instance_name format a20
- select instance_name from v$instance
- /
- exit;

3、執行taf_load.sh(./taf_load.sh 1000 >> taf_load.log)
查看log對比兩個實力的連接負載情況
- [oracle@RFDB1 scripts]$ ./taf_load.sh 1000 >> taf_load.log
- [oracle@RFDB1 scripts]$ cat taf_load.log |grep "RFDB1" |wc -l
- 634
- [oracle@RFDB1 scripts]$ cat taf_load.log |grep "RFDB2" |wc -l
- 366
