scan IP 學習

靜以致遠√團團發表於2015-03-30

   在Oracle 11gR2以前,如果資料庫採用了RAC架構,在客戶端的tnsnames中,需要配置多個節點的連線資訊,從而實現諸如負載均衡,failover等等RAC的特性。因此,當資料庫RAC叢集需要新增或刪除節點時,需要及時對客戶端機器的tns進行更新,以免出現安全隱患。

    在11gR2中,為了簡化該項配置工作,引入了SCAN(Single Client Access Name)的特性,該特性的好處在於,在資料庫與客戶端之間,新增了一層虛擬的服務層,就是所謂的scan ip以及scan ip listener,在客戶端僅需要配置scan ip的tns資訊,透過scan ip listener,連線後臺叢集資料庫。這樣,不論叢集資料庫是否有新增或者刪除節點的操作,均不會對client產生影響。

    下面,具體介紹下SCAN(Single Client Access Name)的架構以及配置。

    首先,簡要的看下在11gR2中,安裝RAC發生的巨大變化,在10g以及11gR1的時代,安裝RAC的步驟是先安裝CRS,再安裝DB,而到了11gR2的時代,crs與asm被整合在一起,合稱為GRID,必須先安裝GRID後,才能繼續安裝DB,否則,你就跟11gR2的RAC無緣咯,呵呵。
    而被11gR2引入的SCAN,就是包含在安裝grid的過程中。SCAN的定義,有兩種途徑:
    1. 在DNS中定義域名。
    2. 透過oracle提供的Grid Naming Server(GNS)實現DHCP自定義。
    如果透過dns來定義,則需要在網路中定義3個SCAN IP地址,指向同一個域名,這3個ip地址必須處於同一個子網內,同時域名不能太長,否則您打字也麻煩不是,哈哈。另外,SCAN IP是由oracle clusterware管理的,因此在主機的叢集軟體(如IBM HACMP,HP SERVICE GUARD)中不能將此ip配置進去,類似於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服務,在cluster的配置過程中,將會自動向DHCP伺服器申請3個IP地址作為SCAN IP使用。

    除了SCAN IP,在cluster的配置過程中,SCAN IP LISTENER服務也會被建立,每個SCAN IP對應一個SCAN IP LISTENER,並且,為了提升高可用性,3個SCAN IP以及其對應的SCAN IP LISTENER將被獨立的分配到各個節點上。如果cluster中其中某個執行scan ip的節點出現異常,則其餘兩個正常的scan ip節點將自動接管。注意,此處有個注意點,如果客戶端是11gR2的版本,則客戶端只需在tns中配置域名解析,即可實現failover,如果客戶端版本低於11gR2,則無法透過域名解析出3個SCAN IP地址,因此如果要實現failover,必須在客戶端的tns中配置3個SCAN IP的地址進行解析,這也是為何oracle強烈建議在使用11gR2資料庫時,客戶端也最好使用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的配置及其作用。本章中,我們來詳細瞭解下,SCAN IP在資料庫中的配置方法,以及如何用SCAN IP,配置oracle所謂的自動負載平衡(該功能的實際使用,我們將在後續的章節中詳細討論)。
    
    看了第一篇中的SCAN IP介紹,相信很多朋友都有這樣一個疑問,既然SCAN IP是跟資料庫instance無關的,例如一個12節點的RAC或者24節點的RAC,都只有3個SCAN IP,並且SCAN IP是隨機分佈在各個instance的,那麼,SCAN IP LISTENER如何監聽各個節點的資料庫呢,同時,該怎麼配置哪個instance去哪個SCAN IP LISTENER註冊呢。下面將一一解答。
    
    首先,補充一個概念,在11gR2中,SCAN IP是作為一個新增IP出現的,原有的CRS中的VIP仍然存在,從這裡,就能看出一點端倪,在11gR2的RAC架構中,SCAN IP並非獨立存在的,而是和原有的 VIP結合在一起的。那麼他們是如何工作的呢,先來看下下面這個工作原理圖:
    

    從這個原理圖,可以看出,scan ip其實是oracle在客戶端與資料庫之間,新加的一個連線層,當有客戶端訪問時,連線到 SCAN IP LISTENER, 而SCAN IP LISTENER接收到連線請求時,會根據 LBA 演算法(所謂LBA演算法,就是least loaded instance),將該客戶端的連線請求,轉發給對應的instance上的VIP LISTENER,從而完成了整個客戶端與伺服器的連線過程。簡化如下:
    client -> scan listener -> local listener -> local instance 

    瞭解了這個過程以後,對SCAN IP的整體架構,就全部清楚了。剩下的,我們再來講一些技術細節。
    SCAN IP 和 SCAN LISTENER是獨立於RAC的各個節點的,而每個節點的 VIP , VIP LISTENER是跟instance繫結的,每個節點的VIP LISTENER,會監聽自己所屬節點的instance。

    因此,在資料庫中,我們需要設定remote_listener引數,這個引數設定很有講究,因為scan ip有3個,scan listener也有三個,但是他們對應的是同一個域名,因此,在資料庫中,我們需要使用easy connect naming method方式,就是在sqlnet.ora的配置檔案中,必須有NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)存在。

    另外,配置remote_listener的方式也有講究,以前的版本中,我們通常是在tnsnames.ora中寫好remote_listener的地址以及埠,但是對於scan listener,不能這麼做,必須按照標準格式,設定成REMOTE_LISTENER=SCAN:PORT的形式,以我的測試系統為例,就是 REMOTE_LISTENER=scan-ip.dbaleading.com:1521,而不需要在tnsnames.ora中進行額外設定。

    經過以上設定後,RAC資料庫的每個節點的PMON程式,會用廣播的方式向每個SCAN LISTENER進行註冊,同時CRS的後臺程式ONS,會採集各個節點的負載狀況,通知scan listener,以便scan listener根據負載情況,將新連線分配到當前負載最低的節點上。
    
    以上,就是11gR2 RAC中,新增的SCAN IP以及SCAN LISTENER的全部內容了,在下面一章中,我們將針對該新特性,開展一些擴充性的思考以及討論。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29320885/viewspace-1478556/,如需轉載,請註明出處,否則將追究法律責任。

相關文章