11gR2 集群(CRS/GRID)新功能——SCAN(Single Client Access Name)
在介紹SCAN之前,先簡(jiǎn)單的回顧一下oracle關(guān)于IP地址的使用,在9i RAC時(shí),oracle沒(méi)有自己的clusterware,主要依靠第三方的集群軟件(如IBM HACMP等等),客戶端主要是通過(guò)public IP來(lái)訪問(wèn)數(shù)據(jù)庫(kù)(如果第三方集群軟件提供服動(dòng)IP的話,也可以通過(guò)這個(gè)服動(dòng)IP來(lái)訪問(wèn)數(shù)據(jù)庫(kù)),當(dāng)某一個(gè)節(jié)點(diǎn)已經(jīng)出現(xiàn)故障無(wú)法對(duì)外提供服務(wù)時(shí),如果客戶端繼續(xù)請(qǐng)求連接這個(gè)節(jié)點(diǎn)的public IP,那么連接請(qǐng)求會(huì)長(zhǎng)時(shí)間沒(méi)有返回,最后要等到TCP-IP timeout (TCP-IP超時(shí)時(shí)間一般為10分鐘,不同OS這個(gè)值不同)才會(huì)返回一個(gè)超時(shí)信息,這對(duì)于實(shí)時(shí)性要求較高的應(yīng)用來(lái)說(shuō)是致命的問(wèn)題,很多DBA都經(jīng)歷過(guò)這樣的問(wèn)題,從技術(shù)層面上來(lái)說(shuō),這是一個(gè)網(wǎng)絡(luò)層的問(wèn)題,任何應(yīng)用都要等待網(wǎng)絡(luò)層返回超時(shí)信息。為了解決這個(gè)問(wèn)題,從oracle 10g
RAC開始,引入了一個(gè)新的功能叫VIP,這個(gè)功能類似于第三方集群軟件的浮動(dòng)IP,簡(jiǎn)單的說(shuō)就是當(dāng)public 網(wǎng)卡或者節(jié)點(diǎn)出現(xiàn)問(wèn)題,VIP可以快速的failover到另外的節(jié)點(diǎn),如果客戶端的連接請(qǐng)求被分配到這個(gè)VIP時(shí),客戶端連接請(qǐng)求馬上就會(huì)遇到錯(cuò)誤,因此會(huì)快速的跳過(guò)這個(gè)‘有問(wèn)題的’VIP,而重新分配另一個(gè)VIP(這個(gè)功能是客戶端連接時(shí)的failover),最終連接到數(shù)據(jù)庫(kù),這些對(duì)于應(yīng)用來(lái)說(shuō)是透明的,基本感覺(jué)不到連接的延時(shí)。
SCAN簡(jiǎn)介
-------------------
從11gR2 Grid Infrastructure (CRS/clusterware)開始,引入了一個(gè)新功能叫SCAN (Single Client Access Name),SCAN是一個(gè)域名,可以解析至少1個(gè)IP,最多解析3個(gè)SCAN IP,客戶端可以通過(guò)這個(gè)SCAN 名字來(lái)訪問(wèn)數(shù)據(jù)庫(kù),SCAN的好處就是當(dāng)集群中新增加了節(jié)點(diǎn)或者刪除了節(jié)點(diǎn),不需要額外維護(hù)客戶端。在11gR2上,客戶端仍然可以繼續(xù)使用原有的 VIP,但是oracle推薦使用SCAN。
SCAN ip必須與public ip和VIP在一個(gè)子網(wǎng),同時(shí)oracle推薦使用DNS或者GNS(11gR2
新功能)來(lái)解析SCAN,如果沒(méi)有使用DNS或者GNS的話,可以使用hosts文件,但是這個(gè)辦法不是oracle推薦的,因?yàn)檫@個(gè)方法只能定義一個(gè) SCAN IP。
GRID集群中有2類資源是與SCAN有關(guān)的,一類是SCAN IP,另一類是SCAN Listener,SCAN IP和SCAN Listener是成對(duì)出現(xiàn)的,也就是說(shuō)如果有3個(gè)SCAN IP,就會(huì)同時(shí)有3個(gè)SCAN Listene。SCAN IP就是DNS解析的IP地址,SCAN Listener的作用是接受客戶端的連接請(qǐng)求。查看SCAN IP信息和SCAN Listener信息的方法在下文介紹。
數(shù)據(jù)庫(kù)的初始化參數(shù)remote_listener默認(rèn)被設(shè)置為SCAN Listener,目的是為了讓SCAN Listener可以監(jiān)聽所有的實(shí)例,記錄所有實(shí)例的壓力,以便于按照負(fù)載均衡的方式來(lái)轉(zhuǎn)發(fā)客戶端的請(qǐng)求。
客戶端如何通過(guò)SCAN訪問(wèn)數(shù)據(jù)庫(kù)
------------------------------------------------------
客戶端發(fā)出連接數(shù)據(jù)庫(kù)的請(qǐng)求,DNS將SCAN解析出對(duì)應(yīng)的3個(gè)SCAN IP并返回給客戶端,
客戶端隨機(jī)的選擇其中一個(gè)SCAN IP地址,然后客戶端通過(guò)這個(gè)SCAN IP訪問(wèn)對(duì)應(yīng)的節(jié)點(diǎn),當(dāng)對(duì)應(yīng)節(jié)點(diǎn)的SCAN Listener接受到請(qǐng)求后,SCAN Listener會(huì)選擇壓力最小的數(shù)據(jù)庫(kù)實(shí)例,然后壓力最小的數(shù)據(jù)庫(kù)實(shí)例對(duì)應(yīng)的local listener的地址將會(huì)返回給客戶端,最終這個(gè)local listener為客戶端請(qǐng)求建立與數(shù)據(jù)庫(kù)的連接。
客戶端tnsnames.ora的配置
-------------------------------------------
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
) )
客戶端的連接方式:
$ sqlplsu <username>/<password>@RAC
EZconnet的連接仍然適用于SCAN
$ sqlplus <username>/<password>@rac-cluster-scan:1521/rac
常用命令
-----------------------
1. 查看SCAN配置信息
$ srvctl config scan
SCAN name: rac-cluster-scan, Network:
1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP:
/rac-cluster-scan/192.168.1.12
SCAN VIP name: scan2, IP:
/rac-cluster-scan/192.168.1.13
SCAN VIP name: scan3, IP:
/rac-cluster-scan/192.168.1.14
2. 查看SCAN Listener配置信息
$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
3. 查看SCAN的狀態(tài)
$ srvctl status scan
4. 查看SCAN listener的狀態(tài)
$ srvctl status scan_listener
