之前有網(wǎng)友在我Blog 留言說我的RAC 搭建中沒有寫SCAN 配置,這個(gè)之前應(yīng)當(dāng)是有寫過,但剛搜了1下,沒找到,正好重新整理1下,并做下實(shí)驗(yàn),實(shí)驗(yàn)就用Oracle 12c 進(jìn)行測試。
在Oracle 11g 之前,我們?nèi)ミB接RAC 集群,都是配置以下的內(nèi)容:
dave_rac=
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE = yes)
(FAILOVER=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.68)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.69)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dave)
(failover_mode=(type=select)(method=basic))
)
)
這里的68和69 是VIP 的地址,是PUBLIC 網(wǎng)卡上的虛擬IP。 那我們這里只有2個(gè)節(jié)點(diǎn),如果我們增加了RAC的集群數(shù),那末就需要修改所有的客戶真?zhèn)€配置,這個(gè)就很麻煩。
所以在Oracle 11gR2 中,引入了SCAN(Single ClientAccess Name)的特性。SCAN是1個(gè)域名,可以解析最少1個(gè)IP,最多解析3個(gè)SCAN IP,客戶端可以通過這個(gè)SCAN 名字來訪問數(shù)據(jù)庫,另外SCAN ip必須與public ip和VIP在1個(gè)子網(wǎng)。
啟用SCAN 以后,會(huì)在數(shù)據(jù)庫與客戶端之間,添加了1層虛擬的服務(wù)層,就是SCAN IP和SCAN IP Listener,在客戶端僅需要配置SCAN IP的tns信息,通過SCANIP Listener,連接后臺(tái)集群數(shù)據(jù)庫。這樣,不論集群數(shù)據(jù)庫是不是有添加或刪除節(jié)點(diǎn)的操作,均不會(huì)對客戶端產(chǎn)生影響,也就不需要修改配置。
配置SCAN有3種方法:
1. 使用/etc/hosts文件
這個(gè)是我們目前用的最多的方式,但是缺點(diǎn)只能對應(yīng)1個(gè)SCAN IP,該方法Oracle 不推薦,但是簡單,不需要單獨(dú)的DNS 服務(wù)器,使用該方法,客戶端還是需要VIP來鏈接。 Oracle 推薦使用其他的2種方法來實(shí)現(xiàn)SCAN 功能。
2. 在DNS中定義域名,只需要在DNS中配置便可實(shí)現(xiàn)SCAN 功能。
3. 通過Grid Naming Server(GNS),需要配置DNS 和DHCP才能實(shí)現(xiàn)SCAN 功能。
配置好以后,直接在客戶真?zhèn)€tnsnames里寫SCAN NAME就能夠了,以下:
RACSCAN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.gns.cndba.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dave)
)
)
以后RAC 增加刪除節(jié)點(diǎn),客戶端都不需要修改。
在啟用SCAN 特性以后,除多幾個(gè)SCAN IP 以外,還會(huì)多幾個(gè)SCAN IP Listener,每一個(gè)SCAN IP對應(yīng)1個(gè)SCAN IP Listener,為了性能斟酌,每一個(gè)SCAN IP和其對應(yīng)的SCAN IP Listener將被獨(dú)立的分配到各個(gè)節(jié)點(diǎn)上。
如果Cluster中其中某個(gè)運(yùn)行SCAN IP的節(jié)點(diǎn)出現(xiàn)異常,則其余正常的SCAN IP節(jié)點(diǎn)將自動(dòng)接收。
如果客戶端是11g R2的版本,則客戶端只需在tns中配置域名解析,便可實(shí)現(xiàn)failover,如果客戶端版本低于11g R2,則沒法通過域名解析出多個(gè)SCAN IP地址,因此如果要實(shí)現(xiàn)failover,必須在客戶真?zhèn)€tns中配置3個(gè)SCAN IP的地址進(jìn)行解析,這也是為什么Oracle強(qiáng)烈建議在使用11g R2數(shù)據(jù)庫時(shí),客戶端也最好使用11g R2的緣由。
上圖是SCAN 的工作流程圖,圖的右側(cè)是1個(gè)4個(gè)節(jié)點(diǎn)的RAC 集群,所以有4個(gè)Local Listener。 配置了3個(gè)SCAN IP和3個(gè) SCAN Listeners。這3個(gè)SCAN IP 是隨機(jī)的落在RAC節(jié)點(diǎn)上。
客戶端鏈接的時(shí)候,會(huì)隨機(jī)的連接到某1個(gè)某1個(gè)SCAN IP及起對應(yīng)的SCAN IP Listner上, SCAN IP Listener接收到連接要求時(shí),會(huì)根據(jù) LBA 算法(least loaded instance),將該客戶真?zhèn)€連接要求,轉(zhuǎn)發(fā)給對應(yīng)的Instance上的VIP Listener,從而完成了全部客戶端與服務(wù)器的連接進(jìn)程。
簡單點(diǎn)就是:
client -> scan listener -> locallistener -> local instance
SCAN VIP,即SCAN IP,是由DNS或GNS、hosts解析出來的IP地址。目前SCANVIP最多能有3個(gè),它們循環(huán)地被客戶端所要求到。
SCAN VIP數(shù)量和節(jié)點(diǎn)數(shù)沒有關(guān)系,正如上圖所示,4個(gè)節(jié)點(diǎn),3個(gè)SCAN VIP,SCAN VIP是隨機(jī)的落在哪一個(gè)節(jié)點(diǎn)上的,這個(gè)進(jìn)程也是動(dòng)態(tài)變化的。
GNS VIP同SCAN VIP, GNS VIP是提供GNS服務(wù)的IP地址,它綁定到某個(gè)節(jié)點(diǎn)的PUBLIC IP所在網(wǎng)卡上,當(dāng)節(jié)點(diǎn)出現(xiàn)故障,GNS資源會(huì)自動(dòng)切換到其他正常的節(jié)點(diǎn)繼續(xù)提供GNS解析服務(wù)。如果我們不使用GNS解析方法,那末也不會(huì)存在GNS VIP。
SCAN監(jiān)聽器,實(shí)現(xiàn)SCAN的負(fù)載均衡功能。如果RAC上有3個(gè)SCAN VIP,那末SCAN監(jiān)聽器也有3個(gè),它們各自監(jiān)聽SCAN VIP的連接要求。
SCAN監(jiān)聽器的注冊是由REMOTE_LISTENER參數(shù)控制的,任何實(shí)例都會(huì)向所有的SCAN監(jiān)聽器注冊,所以SCAN LISTENER 會(huì)包括所有實(shí)例的名稱。
這樣SCAN監(jiān)聽器可以實(shí)時(shí)了解所有實(shí)例的運(yùn)行情況的,因此能夠準(zhǔn)確地將連接重定向到空閑服務(wù)器的本地監(jiān)聽器上。
SCAN監(jiān)聽器是隨著SCAN VIP隨機(jī)分配到節(jié)點(diǎn)服務(wù)器上,如果某個(gè)節(jié)點(diǎn)產(chǎn)生故障,運(yùn)行在此節(jié)點(diǎn)上的SCANVIP會(huì)進(jìn)行漂移,這時(shí)候候SCAN監(jiān)聽器也隨著漂移到正常的節(jié)點(diǎn)上,繼續(xù)為SCAN VIP監(jiān)聽連接要求,當(dāng)PMON進(jìn)程下次動(dòng)態(tài)更新實(shí)例信息到該SCAN監(jiān)聽器以后,它又重新接受客戶真?zhèn)€連接。
Oracle 參數(shù),設(shè)置該參數(shù)以后,任何實(shí)例都會(huì)向SCAN監(jiān)聽器注冊,所以SCAN監(jiān)聽器能夠負(fù)載均衡地分發(fā)連接要求到節(jié)點(diǎn)本地監(jiān)聽器上。
由于SCAN IP有多個(gè),他們對應(yīng)的是同1個(gè)域名,因此在數(shù)據(jù)庫中,需要使用easyconnect naming method方式,需要修改sqlnet.ora的配置文件添加ezconnect,如:
NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)。
設(shè)置格式:REMOTE_LISTENER=SCAN:PORT,如REMOTE_LISTENER=rac-scan.cndba.cn:1521。
配置以后,RAC數(shù)據(jù)庫的每一個(gè)節(jié)點(diǎn)的PMON進(jìn)程,會(huì)用廣播的方式向每一個(gè)SCAN Listener進(jìn)行注冊,同時(shí)CRS的后臺(tái)進(jìn)程ONS,會(huì)收集各個(gè)節(jié)點(diǎn)的負(fù)載狀態(tài),通知SCAN Listener,以便SCAN Listener根據(jù)負(fù)載情況,將新連接分配到當(dāng)前負(fù)載最低的節(jié)點(diǎn)上。
管理理論部份,就這么多,接下來,會(huì)整理2篇Oracle 12c 環(huán)境下使用DNS和GNS 實(shí)現(xiàn)SCAN 的Blog,具體的了解下如何實(shí)現(xiàn)這類功能。
參考:
Grid Infrastructure Single ClientAccess Name (SCAN) Explained (文檔 ID 887522.1)
--------------------------------------------------------------------------------------------
版權(quán)所有,文章制止轉(zhuǎn)載,否則追究法律責(zé)任!
AboutDave:
--------------------------------------------------------------------------------------------
QQ: 251097186
Email: tianlesoftware@gmail.com
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Twitter: http://twitter.com/tianlesoftware
Facebook: http://www.facebook.com/tianlesoftware
Linkedin: http://cn.linkedin.com/in/tianlesoftware
Dave 的QQ群:
--------------------------------------------------------------------------------------------
注意:加群必須注明表空間和數(shù)據(jù)文件關(guān)系 | 不要重復(fù)加群
CNDBA_1: 62697850 (空) CNDBA_2: 62697716 (滿) CNDBA_3: 283816689
CNDBA_4: 391125754 CNDBA_5: 104207940 CNDBA_6: 62697977 CNDBA_7: 142216823(滿)