1. 程式人生 > >細說oracle 11g rac 的ip地址

細說oracle 11g rac 的ip地址

oracle11g開始,設定了SCAN ip,除此之外還有public ip,virtual ip,private ip,容易讓人犯暈。

下面逐一解釋:

public ip:

    類似與單例項的oracle資料庫ip,主要用於管理\訪問。

virtual ip(vip):

   oracle在rac架構中專用,這個vip用於實現故障轉移,當一個節點發生故障時,其vip會“浮動”到另外一個正常的節點,也即該正常節點對應著兩個vip了。

SCAN:

    Single Client Access Name,單一客戶訪問名稱,意思是客戶端(如jdbc,pl/sql等)訪問資料庫時的公共域名,由於rac是多節點的,客戶端要訪問資料庫,通過scan機制,只需要提供一個訪問名稱,oracle rac會自動為客戶端分配一個節點,這對客戶端來說是透明的。

private ip:私有ip,oracle 內部用於節點間通訊的ip,不對外開放。

public ip:

       必須是專用ip,必須在安裝oracle rac前配置好,能與網路連通。public ip,vip,scan ip必須在同一個網路網段內。

vip:

      必須是專用ip,必須安裝oracle rac前配置好,能與網路連通,public ip,vip,scan ip必須在同一個網路網段內。該ip及域名雖然配置,但必須保持不能使用(不能被訪問,如ping)。

scan :

      建議通過dns配置三個專用ip,在安裝前必須配置好,當有請求者時,由dns隨機分配。暫不使用。scan ip需要給出唯一的名字,也即三個ip對應一個域名。名字只能是字元和'-'。oracle不推薦通過hosts檔案來配置,那樣只能得到一個scan ip。

     scan也是一個虛擬ip名,類似與虛擬ip名,但不同的是,虛擬ip是一個節點一個ip地址一個域名,scan是針對整個cluster的,一個域名對應著多個節點,多個ip地址。

private ip:

       必須是專用ip,必須在安裝前配置好,必須在一個專用私有網路中,只能被另外的rac節點解析,不能被其它網路解析。從11.2.0.2開始,oracle可以自動使用至多4塊私有網絡卡,以實現內部節點的負載均衡及冗餘。

GNS:Grid Naming Service。

以下是網上的資料

在Oracle RAC環境下,每個節點都會有多個IP地址,分別為Public/Private/Vip,這三個IP到底有啥區別呢?分別用在那些場合呢?來看看老外的回答。
1. private IP address is used only for internal clustering processing (Cache Fusion)
私有IP用於心跳同步,這個對於使用者層面,可以直接忽略,簡單理解,這個Ip用來保證兩臺伺服器同步資料用的私網IP。


2. virtual IP 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機。
 
例如:

  1. 下面的例子就是使用的VIP

  2. infodb8=
  3.   (DESCRIPTION=
  4.     (ADDRESS=(PROTOCOL=TCP)(HOST=138.*.1.81)(PORT=1521))
  5.     (ADDRESS=(PROTOCOL=TCP)(HOST=138.*.1.82)(PORT=1521))
  6.     (LOAD_BALANCE=yes)
  7.     (FAILOVER=ON)
  8.     (CONNECT_DATA=
  9.       (SERVER=DEDICATED)
  10.       (SERVICE_NAME=infodb)
  11.       (FAILOVER_MODE=
  12.         (TYPE=SELECT)
  13.         (METHOD=BASIC)
  14.         (RETRIES=30)
  15.         (DELAY=5)
  16.       )
  17.       ))
  1. 下面的例子就是使用的Public IP,指定連線1機,注意紅色字型infodb1進一步限制連線的例項。
  2. INFODB83=
  3.   (DESCRIPTION=
  4.     (ADDRESS_LIST=
  5.       (ADDRESS=(PROTOCOL=TCP)(HOST=138.*.1.83)(PORT=1521))
  6.     )
  7.     (CONNECT_DATA=
  8.       (SERVICE_NAME=infodb)
  9.       (INSTANCE_NAME=infodb1)
  10.     )
  11.     (HS=OK)
  12.   )

Oracle RAC中每個節點都有一個虛擬IP,簡稱VIP,與公網IP在同一個網段。

 沒有VIP時,Oracle客戶端是靠“TCP/IP協議棧超時”來判斷伺服器故障。而TCP/IP協議棧是作為OS Kernel的一部分來實現,不同的OS有不同的閥值,使用者獲悉資料庫異常的時間完全取決於OS Kernel的實現,雖然有些OS允許修改這個閥值,但是會對其它程式產生未知影響。因此,oracle RAC引入了VIP,從而避開對TCP協議棧超時的依賴。

VIP和IP最主要的不同之處在於:VIP是浮動的,而IP是固定的。在所有節點都正常執行時,每個節點的VIP會被分配到public NIC上;在linux下ifconfig檢視,public網絡卡上是2個IP地址;如果一個節點宕機,這個節點的VIP會被轉移到還在執行的節點上。也就是倖存的節點的public NIC這個網絡卡上,會有3個IP地址。

當一個節點宕機,這個節點真實IP就連線不上了,但是這個節點的虛擬IP是可以連線的,他會自動把客戶端的連線請求轉接給存活的節點。
在tnsname.ora檔案裡,指定Address列表,客戶端會隨機選擇一個節點來連線資料庫,而不是順序選擇的。
   
VIP特點:
1 VIP是在clusterware安裝最後階段,通過指令碼VIPCA建立的;
2 VIP作為一個Nodeapps型別的CRS Resource註冊到OCR中,並由CRS維護狀態;
3 VIP會繫結到節點的public 網絡卡上;那麼public網絡卡就有兩個地址了;
4 當某個節點發生故障時,CRS會把故障節點的VIP轉移到其他節點上;
5 每個節點的Listener會同時在public網絡卡的public IP和VIP兩個地址上監聽;
6 客戶端的tnsname.ora一般會配置指向節點的VIP;

從上面第6條可以引出一個問題。如果增加一個節點,那麼客戶端的tnsname.ora需要加入新增節點的VIP。那麼想象一下:多個客戶端,增加多個節點,那麼維護起來特別麻煩。因此到了Oracle11gR2,引入了一個scan的概念。

 scan,single client access name。簡單客戶端連線名,這是一個唯一的名稱,在整個公司網路內部唯一,並且在DNS中可以解析為三個ip地址,客戶端連線的時候只需要知道這個名稱,並連線即可,每個SCAN VIP對應一個scan listener,cluster內部的service在每個scan listener上都有註冊,scan listener接受客戶端的請求,並foward到不同的Local listener中去,還是由local 的listener提供服務給客戶端。  

注意:scan不一定要resolve到三個ip,一個也夠了。只不過為了防止scan單點故障而推薦3個。
VIP 原理和特點

Oracle 的TAF 就是建立在VIP 技術之上的。 IP 和VIP 區別在與: IP 是利用TCP層超時, VIP 利用的是應用層的立即響應。VIP 它是浮動的IP。 當一個節點出現問題時會自動的轉到另一個節點上。

假設有一個2個節點的RAC,正常執行時每個節點上都有一個VIP。 VIP1 和VIP2. 當節點2發生故障,比如異常關係。 RAC 會做如下操作:

1). CRS 在檢測到rac2節點異常後,會觸發Clusterware 重構,最後把rac2節點剔除叢集,由節點1組成新的叢集。

2). RAC的Failover 機制會把節點2的VIP轉移到節點1上,這時節點1的PUBLIC 網絡卡上就有3個IP 地址: VIP1,VIP2, PUBLIC IP1.

3). 使用者對VIP2的連線請求會被IP層路由轉到節點1

4). 因為在節點1上有VIP2的地址,所有資料包會順利通過路由層,網路層,傳輸層。

5). 但是,節點1上只監聽VIP1和public IP1的兩個IP地址。並沒有監聽VIP2,故應用層沒有對應的程式接收這個資料包,這個錯誤立即被捕獲。

6). 客戶段能夠立即接收到這個錯誤,然後客戶段會重新發起向VIP1的連線請求。

 VIP 特點:

1). VIP 是通過VIPCA指令碼建立的

2). VIP 作為Nodeapps型別的CRS Resource 註冊到OCR中,並由CRS 維護狀態。

3). VIP 會繫結到節點的public 網絡卡上,故public 網絡卡有2個地址。

4). 當某個節點發生故障時,CRS 會把故障節點的VIP 轉移到其他節點上。

5). 每個節點的Listener 會同時監聽public 網絡卡上的 public ip 和VIP

6). 客戶端的tnsnames.Ora 一般會配置指向節點的VIP.