Oracle RAC環境下vip/public/private IP的區別

哎呀我的天吶發表於2014-11-05

在Oracle RAC環境下,每個節點都會有多個IP地址,分別為Public/Private/Vip,這三個IP到底有啥區別呢?分別用在那些場合呢?來看看老外的回答。
1. private IP address is used only for internal clustering processing (Cache Fusion)
私有IP用於心跳同步,這個對於使用者層面,可以直接忽略,簡單理解,這個Ip用來保證兩臺伺服器同步資料用的私網IP。
2. VIP is used by database applications to enable fail over when one cluster node fails
虛擬IP用於客戶端應用,以支援失效轉移,通俗說就是一臺掛了,另一臺自動接管,客戶端沒有任何感覺。 這也是為什麼要使用RAC的原因之一,另一個原因,我認為是負載均衡。
3. public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.
公有IP一般用於管理員,用來確保可以操作到正確的機器,我更願意叫他真實IP。

通過上述解釋,不難理解作為一個DBA,在配置tnsnames.ora時, 有些場合是要使用的vip,而有些場合又必須使用public IP。 例如,當你在定位一個資料庫的死鎖時,使用public ip,可以確保連到你想處理的機器,相反此時使用虛擬ip時,會出現不確定性,因為伺服器預設是開啟負載均衡的,也就是有可能你想連A機,系統卻給你分配了B機。
  
例如: 下面的例子就是使用的VIP

點選( 此處 )摺疊或開啟

  1. proddb =

  2.    ( DESCRIPTION =

  3.      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 81 ) ( PORT = 1521 ) )

  4.      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 82 ) ( PORT = 1521 ) )

  5.      ( LOAD_BALANCE = yes )

  6.      ( FAILOVER = ON )

  7.      ( CONNECT_DATA =

  8.        ( SERVER = DEDICATED )

  9.        ( SERVICE_NAME = proddb )

  10.        ( FAILOVER_MODE =

  11.          ( TYPE = SELECT )

  12.          ( METHOD = BASIC )

  13.          ( RETRIES = 30 )

  14.          ( DELAY = 5 )

  15.        )

  16.      )

  17. )

下面的例子就是使用的Public IP,指定連線1機,注意紅色字型infodb1進一步限制連線的例項。

點選( 此處 )摺疊或開啟

  1. proddb1 =

  2. ( DESCRIPTION =

  3.      ( ADDRESS_LIST =

  4.        ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 83 ) ( PORT = 1521 ) )

  5.      )

  6.      ( CONNECT_DATA =

  7.        ( SERVICE_NAME = infodb )

  8.        ( INSTANCE_NAME = infodb1 )

  9.      )

  10.      ( HS = OK )

  11. )

在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.linuxidc.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的原因。
    範例:
 

點選( 此處 )摺疊或開啟

  1. $srvctl config scan_listener

  2.      SCAN Listener LISTENER_SCAN1 exists . Port : TCP : 1521

  3.      SCAN Listener LISTENER_SCAN2 exists . Port : TCP : 1521

  4.      SCAN Listener LISTENER_SCAN3 exists . Port : TCP : 1521


點選( 此處 )摺疊或開啟

  1. $srvctl config scan

  2.     SCAN name : scan - ip , Network : 1 / 192 . 168 . 1 . / 255 . 255 . 255 . /

  3.     SCAN VIP name : scan1 , IP : / scan - ip . linuxidc . com / 192 . 168 . 1 . 111

  4.     SCAN VIP name : scan2 , IP : / scan - ip . linuxidc . com / 192 . 168 . 1 . 112

  5.     SCAN VIP name : scan3 , IP : / scan - ip . linuxidc . 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結合在一起的。那麼他們是如何工作的呢,先來看下下面這個工作原理圖:


這裡的Listener指的是vip,scan不是趴在vip上,而是當客戶端請求的時候,scan_ip看哪個伺服器閒置,此時就分配給哪個vip。

點選( 此處 )摺疊或開啟

  1. [ grid @ node1 admin ] $ crs_stat - t

  2. Name                  Type             Target    State   Host

  3. ------------------------------------------------------------

  4. ora . . . . ROUP . dg     ora . . . . up . type      ONLINE ONLINE node1

  5. ora . . . . ER . lsnr     ora . . . . er . type      ONLINE ONLINE node1

  6. ora . . . . N1 . lsnr     ora . . . . er . type      ONLINE ONLINE node1

  7. ora . . . . VOTE . dg     ora . . . . up . type      ONLINE ONLINE node1

  8. ora . . . . VERY . dg     ora . . . . up . type      ONLINE ONLINE node1

  9. ora . asm            ora . asm . type         ONLINE ONLINE node1

  10. ora . eons                 ora . eons . type        ONLINE ONLINE node1

  11. ora . gsd            ora . gsd . type         ONLINE ONLINE node1

  12. ora . . . . network     ora . . . . rk . type       ONLINE ONLINE node1

  13. ora . . . . SM1 . asm     application         ONLINE ONLINE node1

  14. ora . . . . E1 . lsnr     application         ONLINE ONLINE node1

  15. ora . node1 . gsd      application         ONLINE ONLINE node1

  16. ora . node1 . ons      application         ONLINE ONLINE node1

  17. ora . node1 . vip      ora . . . . t1 . type       ONLINE ONLINE node1

  18. ora . . . . SM2 . asm     application         ONLINE ONLINE node2

  19. ora . . . . E2 . lsnr     application         ONLINE ONLINE node2

  20. ora . node2 . gsd      application         ONLINE ONLINE node2

  21. ora . node2 . ons      application         ONLINE ONLINE node2

  22. ora . node2 . vip       ora . . . . t1 . type       ONLINE ONLINE node2

  23. ora . oc4j                ora . oc4j . type        ONLINE ONLINE node2

  24. ora . ons            ora . ons . type         ONLINE ONLINE node1

  25. ora . prod . db        ora . . . . se . type       ONLINE ONLINE node1

  26. ora . . . . ry . acfs     ora . . . . fs . type       ONLINE ONLINE node1

  27. ora . scan1 . vip       ora . . . . ip . type       ONLINE ONLINE node1

此時scan_ip在node1上,當node1例項關閉,就會出現在2節點上了。
關閉prod1例項。

點選( 此處 )摺疊或開啟

  1. SQL > shutdown immediate ;

  2. Database closed .

  3. Database dismounted .

  4. ORACLE instance shut down .




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

    client -> scan listener -> local listener(vip)  -> 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.linuxidc.com:1521,而不需要在tnsnames.ora中進行額外設定。

    經過以上設定後,RAC資料庫的每個節點的PMON程式,會用廣播的方式向每個SCAN LISTENER進行註冊,同時CRS的後臺程式ONS,會採集各個節點的負載狀況,通知scan listener,以便scan listener根據負載情況,將新連線分配到當前負載最低的節點上。
    

點選( 此處 )摺疊或開啟

  1. SQL > show parameter listener


  2. NAME                 TYPE      VALUE

  3. ------------------------------------ ----------- ------------------------------

  4. listener_networks    string

  5. local_listener       string     ( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = node1 - vip ) ( PORT = 1521 ) ) ) )

  6. remote_listener      string     rac_scan : 1521

我當前兩個節點的remote_listener都是rac_scan:1521當用要DNS配置時,不同節點就可以設定成不通的remote_listener

    以上,就是11gR2 RAC中,新增的SCAN IP 以及 SCAN LISTENER的全部內容了。

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

相關文章