Oracle_11gR2_SCAN_IP scan ip配置詳解
Oracle_11gR2_SCAN_IP scan ip配置詳解在Oracle 11gR2以前,如果數(shù)據(jù)庫(kù)采用了RAC 架構(gòu),在客戶端的tnsnames 中,需要配置多個(gè)節(jié)點(diǎn)的連接信息,從而實(shí)現(xiàn)諸如負(fù)
Oracle_11gR2_SCAN_IP scan ip配置詳解
在Oracle 11gR2以前,如果數(shù)據(jù)庫(kù)采用了RAC 架構(gòu),在客戶端的tnsnames 中,需要配置多個(gè)節(jié)點(diǎn)的連接信息,從而實(shí)現(xiàn)諸如負(fù)載均衡,failover 等等RAC 的特性。因此,當(dāng)數(shù)據(jù)庫(kù)RAC 集群需要添加或刪除節(jié)點(diǎn)時(shí),需要及時(shí)對(duì)客戶端機(jī)器的tns 進(jìn)行更新,以免出現(xiàn)安全隱患。
在11gR2中,為了簡(jiǎn)化該項(xiàng)配置工作,引入了SCAN (Single Client Access Name )的特性,該特性的好處在于,在數(shù)據(jù)庫(kù)與客戶端之間,添加了一層虛擬的服務(wù)層,就是所謂的scan ip 以及scan ip listener ,在客戶端僅需要配置scan ip 的tns 信息,通過(guò)scan ip listener ,連接后臺(tái)集群數(shù)據(jù)庫(kù)。這樣,不論集群數(shù)據(jù)庫(kù)是否有添加或者刪除節(jié)點(diǎn)的操作,均不會(huì)對(duì)client 產(chǎn)生影響。
下面,具體介紹下SCAN (Single Client Access Name)的架構(gòu)以及配置。
首先,簡(jiǎn)要的看下在11gR2中,安裝RAC 發(fā)生的巨大變化,在10g 以及11gR1的時(shí)代,安裝RAC 的步驟是先安裝CRS ,再安裝DB ,而到了11gR2的時(shí)代,crs 與asm 被集成在一起,合稱為GRID ,必須先安裝GRID 后,才能繼續(xù)安裝DB ,否則,你就跟11gR2的RAC 無(wú)緣咯 。
而被11gR2引入的SCAN ,就是包含在安裝grid 的過(guò)程中。SCAN 的定義,有兩種途徑:
1. 在DNS 中定義域名。
2. 通過(guò)oracle 提供的Grid Naming Server(GNS)實(shí)現(xiàn)DHCP 自定義。
如果通過(guò)dns 來(lái)定義,則需要在網(wǎng)絡(luò)中定義3個(gè)SCAN IP地址,指向同一個(gè)域名,這3個(gè)ip 地址必須處于同一個(gè)子網(wǎng)內(nèi),同時(shí)域名不能太長(zhǎng),否則您打字也麻煩不是,哈哈。另外,SCAN IP 是由oracle clusterware 管理的,因此在主機(jī)的集群軟件(如IBM HACMP,HP SERVICE GUARD )中不能將此ip 配置進(jìn)去,類似于10g 中的vip ,在grid 安裝前,此IP 是無(wú)法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 的配置過(guò)程中,將會(huì)自動(dòng)向DHCP 服務(wù)器申請(qǐng)3個(gè)IP 地址作為SCAN IP使用。
除了SCAN IP ,在cluster 的配置過(guò)程中,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,則無(wú)法通過(guò)域名解析出3個(gè)SCAN IP 地址,因此如果要實(shí)現(xiàn)failover ,必須在客戶端的tns 中配置3個(gè)SCAN IP的地址進(jìn)行解析,這也是為何oracle 強(qiáng)烈建議在使用11gR2數(shù)據(jù)庫(kù)時(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
SCAN IP 在數(shù)據(jù)庫(kù)中的配置方法,以及如何用SCAN IP

,配置oracle 所謂的自動(dòng)負(fù)載平衡。
既然SCAN IP是跟數(shù)據(jù)庫(kù)instance 無(wú)關(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)聽(tīng)各個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)呢,同時(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é)合在一起的。那么他們是如何工作的呢,先來(lái)看下下面這個(gè)工作原理圖:
scan ip其實(shí)是oracle 在客戶端與數(shù)據(jù)庫(kù)之間,新加的一個(gè)連接層,當(dāng)有客戶端訪問(wèn)時(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ù)器的連接過(guò)程。
簡(jiǎn)化如下:
client -> scan listener -> local listener -> local instance
了解了這個(gè)過(guò)程以后,對(duì)SCAN IP 的整體架構(gòu),就全部清楚了。剩下的,我們?cè)賮?lái)講一些技術(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)聽(tīng)自己所屬節(jié)點(diǎn)的instance 。
因此,在數(shù)據(jù)庫(kù)中,我們需要設(shè)置remote_listener參數(shù),這個(gè)參數(shù)設(shè)置很有講究,因?yàn)閟can ip有3個(gè),scan listener也有三個(gè),但是他們對(duì)應(yīng)的是同一個(gè)域名,因此,在數(shù)據(jù)庫(kù)中,我們需要使用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的形式,以我的測(cè)試系統(tǒng)為例,就是 REMOTE_LISTENER=scan-ip.dbaleading.com:1521,而不需要在tnsnames.ora 中進(jìn)行額外設(shè)置。
經(jīng)過(guò)以上設(shè)置后,RAC 數(shù)據(jù)庫(kù)的每個(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)上。