Oracle_11gR2_SCAN_IP scan ip配置詳解
在Oracle 11gR2以前,如果數(shù)據(jù)庫采用了RAC 架構(gòu),在客戶端的tnsnames 中,需要配置多個(gè)節(jié)點(diǎn)的連接信息,從而實(shí)現(xiàn)諸如負(fù)載均衡,failover 等等RAC 的特性。因此,當(dāng)數(shù)據(jù)庫RA
在Oracle 11gR2以前,如果數(shù)據(jù)庫采用了RAC 架構(gòu),在客戶端的tnsnames 中,需要配置多個(gè)節(jié)點(diǎn)的連接信息,從而實(shí)現(xiàn)諸如負(fù)載均衡,failover 等等RAC 的特性。因此,當(dāng)數(shù)據(jù)庫RAC 集群需要添加或刪除節(jié)點(diǎn)時(shí),需要及時(shí)對(duì)客戶端機(jī)器的tns 進(jìn)行更新,以免出現(xiàn)安全隱患。
在11gR2中,為了簡化該項(xiàng)配置工作,引入了SCAN (Single Client Access Name)的特性,該特性的好處在于,在數(shù)據(jù)庫與客戶端之間,添加了一層虛擬的服務(wù)層,就是所謂的scan ip以及scan ip listener,在客戶端僅需要配置scan ip的tns 信息,通過scan ip listener ,連接后臺(tái)集群數(shù)據(jù)庫。這樣,不論集群數(shù)據(jù)庫是否有添加或者刪除節(jié)點(diǎn)的操作,均不會(huì)對(duì)client 產(chǎn)生影響。
下面,具體介紹下SCAN (Single Client Access Name)的架構(gòu)以及配置。
首先,簡要的看下在11gR2中,安裝RAC 發(fā)生的巨大變化,在10g 以及11gR1的時(shí)代,安裝RAC 的步驟是先安裝CRS ,再安裝DB ,而到了11gR2的時(shí)代,crs 與asm 被集成在一起,合稱為GRID ,必須先安裝GRID 后,才能繼續(xù)安裝DB ,否則,你就跟11gR2的RAC 無緣咯,呵呵。
而被11gR2引入的SCAN ,就是包含在安裝grid 的過程中。SCAN 的定義,有兩種途徑:
1. 在DNS 中定義域名。
2. 通過oracle 提供的Grid Naming Server(GNS)實(shí)現(xiàn)DHCP 自定義。
如果通過dns 來定義,則需要在網(wǎng)絡(luò)中定義3個(gè)SCAN IP地址,指向同一個(gè)域名,這3個(gè)ip 地址必須處于同一個(gè)子網(wǎng)內(nèi),同時(shí)域名不能太長,否則您打字也麻煩不是,哈哈。另外,SCAN IP 是由oracle clusterware 管理的,因此在主機(jī)的集群軟件(如IBM HACMP,HP SERVICE GUARD)中不能將此ip 配置進(jìn)去,類似于10g 中的vip ,在grid 安裝前,此IP 是無法ping 通的。
范例:
scan-ip.dbaleading.com IN A 192.168.1.111
IN A 192.168.1.112
IN A 192.168.1.113
如果使用GNS 的方式,則必須有DHCP 服務(wù),在cluster 的配置過程中,將會(huì)自動(dòng)向DHCP 服務(wù)器申請(qǐng)3個(gè)IP 地址作為SCAN IP使用。
除了SCAN IP,在cluster 的配置過程中,SCAN IP LISTENER服務(wù)也會(huì)被建立,每個(gè)SCAN IP 對(duì)應(yīng)一個(gè)SCAN IP LISTENER ,并且,為了提升高可用性,3個(gè)SCAN IP 以及其對(duì)應(yīng)的SCAN IP LISTENER將被獨(dú)立的分配到各個(gè)節(jié)點(diǎn)上。如果cluster 中其中某個(gè)運(yùn)行scan ip的節(jié)點(diǎn)出現(xiàn)異常,則其余兩個(gè)正常的scan ip節(jié)點(diǎn)將自動(dòng)接管。注意,此處有個(gè)注意點(diǎn),如果客戶端是11gR2的版本,則客戶端只需在tns 中配置域名解析,即可實(shí)現(xiàn)failover ,如果客戶端版本低于11gR2,則無法通過域名解析出3個(gè)SCAN IP 地址,因此如果要實(shí)現(xiàn)failover ,必須在客戶端的tns 中配置3個(gè)SCAN IP的地址進(jìn)行解析,這也是為何oracle 強(qiáng)烈建議在使用11gR2數(shù)據(jù)庫時(shí),客戶端也最好使用11gR2的原因。 范例:
$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
$srvctl config scan
SCAN name: scan-ip, Network: 1/192.168.1.0/255.255.255.0/
,SCAN VIP name: scan1, IP: /scan-ip.dbaleading.com/192.168.1.111 SCAN VIP name: scan2, IP: /scan-ip.dbaleading.com/192.168.1.112 SCAN VIP name: scan3, IP: /scan-ip.dbaleading.com/192.168.1.113
上回中,介紹了11gR2中 SCAN IP的配置,以及 SCAN IP LISTENER的配置及其作用。本章中,我們來詳細(xì)了解下,SCAN IP在數(shù)據(jù)庫中的配置方法,以及如何用SCAN IP,配置oracle 所謂的自動(dòng)負(fù)載平衡(該功能的實(shí)際使用,我們將在后續(xù)的章節(jié)中詳細(xì)討論)。 騰訊微博
看了第一篇中的SCAN IP介紹,相信很多朋友都有這樣一個(gè)疑問,既然SCAN IP是跟數(shù)據(jù)庫instance 無關(guān)的,例如一個(gè)12節(jié)點(diǎn)的RAC 或者24節(jié)點(diǎn)的RAC ,都只有3個(gè)SCAN IP ,并且SCAN IP 是隨機(jī)分布在各個(gè)instance 的,那么,SCAN IP LISTENER 如何監(jiān)聽各個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫呢,同時(shí),該怎么配置哪個(gè)instance 去哪個(gè)SCAN IP LISTENER注冊(cè)呢。下面將一一解答。
首先,補(bǔ)充一個(gè)概念,在11gR2中,SCAN IP是作為一個(gè)新增IP 出現(xiàn)的,原有的CRS 中的VIP 仍然存在,從這里,就能看出一點(diǎn)端倪,在11gR2的RAC 架構(gòu)中,SCAN IP并非獨(dú)立存在的,而是和原有的 VIP 結(jié)合在一起的。那么他們是如何工作的呢,先來看下下面這個(gè)工作原理圖:

從這個(gè)原理圖,可以看出,scan ip其實(shí)是ora cle 在客戶端與數(shù)據(jù)庫之間,新加的一個(gè)連接層,當(dāng)有客戶端訪問時(shí),連接到 SCAN IP LISTENER, 而SCAN IP LISTENER接收到連接請(qǐng)求時(shí),會(huì)根據(jù) LBA 算法(所謂LBA 算法,就是least loaded instance),
,將該客戶端的連接請(qǐng)求,轉(zhuǎn)發(fā)給對(duì)應(yīng)的instance 上的VIP LISTENER,從而完成了整個(gè)客戶端與服務(wù)器的連接過程。簡化如下:
client -> scan listener -> local listener -> local instance
了解了這個(gè)過程以后,對(duì)SCAN IP 的整體架構(gòu),就全部清楚了。剩下的,我們?cè)賮碇v一些技術(shù)細(xì)節(jié)。
SCAN IP 和 SCAN LISTENER是獨(dú)立于RAC 的各個(gè)節(jié)點(diǎn)的,而每個(gè)節(jié)點(diǎn)的 VIP , VIP LISTENER 是跟instance 綁定的,每個(gè)節(jié)點(diǎn)的VIP LISTENER ,會(huì)監(jiān)聽自己所屬節(jié)點(diǎn)的instance 。
因此,在數(shù)據(jù)庫中,我們需要設(shè)置remote_listener參數(shù),這個(gè)參數(shù)設(shè)置很有講究,因?yàn)閟can ip有3個(gè),scan listener也有三個(gè),但是他們對(duì)應(yīng)的是同一個(gè)域名,因此,在數(shù)據(jù)庫中,我們需要使用easy connect naming method方式,就是在sqlnet.ora 的配置文件中,必須有NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)存在。
另外,配置remote_listener的方式也有講究,以前的版本中,我們通常是在tnsnames.ora 中寫好remote_listener的地址以及端口,但是對(duì)于scan listener ,不能這么做,必須按照標(biāo)準(zhǔn)格式,設(shè)置成REMOTE_LISTENER=SCAN:PORT的形式,以我的測試系統(tǒng)為例,就是 REMOTE_LISTENER=scan-ip.dbaleading.com:1521,而不需要在tnsnames.ora 中進(jìn)行額外設(shè)置。
經(jīng)過以上設(shè)置后,RAC 數(shù)據(jù)庫的每個(gè)節(jié)點(diǎn)的PMON 進(jìn)程,會(huì)用廣播的方式向每個(gè)SCAN LISTENER 進(jìn)行注冊(cè),同時(shí)CRS 的后臺(tái)進(jìn)程ONS ,會(huì)采集各個(gè)節(jié)點(diǎn)的負(fù)載狀況,通知scan listener ,以便scan listener根據(jù)負(fù)載情況,將新連接分配到當(dāng)前負(fù)載最低的節(jié)點(diǎn)上。
以上,就是11gR2 RAC中,新增的SCAN IP 以及 SCAN LISTENER的全部內(nèi)容了,在下面一章中,我們將針對(duì)該新特性,開展一些拓展性的思考以及討論。