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

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

3、執(zhí)行taf_load.sh(./taf_load.sh 1000 >> taf_load.log)
查看log對比兩個實力的連接負(fù)載情況
- [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
 
















 
 
 




 
 
 
 