2011年1月3日 星期一

Solaris10 - IP Network Multipathing (IPMP)

什麼是IPMP ?  IPMP簡單講是防止網路被無預警斷線, 具有備援功能, 並且提供增加throughput 功能, 我們假如網路連線突然中斷發生, 而另一個網路介面又有被設定好當備援使用時 ,系統會自動 fail over至另一網路介面, 進而逹成不中斷存取服務。 Solaris系統中支援 IPMP Probe-basedLink-based二種。

IPMP有以下特點:
l   排除單點故障 (意思是不因某一介面故障而導致服務停擺)
ü   網路介面卡故障
ü   網路連接故障
l   Fail over 切換時大約10秒內完成, 定義在/etc/default/mpathd檔案內
l   可經由 /etc/default/mpathd 檔案調整其參數值
l   可同時設定IPV4IPV6 網路介面
l   備援的網路介面, 只能當fail over切換時使用, 不能再被拿來當成外部傳輸用途

實作 IPMP
圖示
Probe-based IPMP 設定
我們首先假設一台主機有2張網路介面卡, 分別為elxl0elxl1並分別指定其IP位址, 以作為資料連線使用, 192.168.1.10192.168.1.20, 除了這二個IP位址要連線外, IPMP還要另外指定介面的測試位址,因為系統內有支in.mpathd Daemon程序會使用測試位址去監控個別介面狀態, 測試位址被拿來使用當作介面偵測故障及介面的回復 , 故測試位址不能被其它應用程式拿來作為連線通訊使用。

網路介面卡   IP Address      Test Address
elxl0                        192.168.1.10    192.168.1.11
elxl1                        192.168.1.20    192.168.1.21

步驟1 查看目前網路狀態
首先在對系統網路設定改變前, 要先知道目前系統網路介面狀態, 方便以後我們如要restore 時的要復原的資訊, 
bash-3.2# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
elxl0: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 2
        inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255
        ether 0:10:5a:84:0:b2
elxl1: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 3
        inet 192.168.1.20 netmask ffffff00 broadcast 192.168.1.255
        ether 0:10:5a:84:5:b2

步驟2 定義IP 位址
將資料連線的IP位址及Test位址都加入至 /etc/inet/hosts檔案中
編輯 /etc/inet/hosts檔案
127.0.0.1 localhost
192.168.1.10 sys10 loghost
192.168.1.20 sys11
192.168.1.11 sys10-test-elxl0 # Test address for elxl0
192.168.1.21 sys11-test-elxl1 # Test address for elxl1
最後存檔即可

步驟3設定網路介面
Multipath是根據在 /etc/hostname.elxl0/etc/hostname.elxl1 網路介面上的資訊, 所以我們先從elxl0網路介面設定
編輯  /etc/hostname.elxl0檔案
#vi /etc/hostname.elxl0
內容如下
sys10 netmask + broadcast + group mpgrp up \
addif sys10-test-elxl0 deprecated netmask + broadcast + -failover up
最後存檔即可

Table 1-1 介面設定項目

sys10
代表該張介面為 sys10名稱
netmask +
"+"號表示系統會去搜尋並根據 /etc/netmask設定, 自動產生相應遮罩
broadcast +
"+"號表示系統會經由目前IP 位址及netmask 值自動產生相應的broadcast
group mpgrp
指定IPMP群組名稱 mpgrp-one
up
標示該介面為up狀態
addif sys10-test-elxl0
自動產生另一邏輯介面並且自動根據 /etc/inet/hosts檔案指派IP位址

deprecated
標示位址為 deprecated address.表示該介面位址測試位址
-failover
標示位址為 non-failover address.該位址不做failover


編輯  /etc/hostname.elxl1檔案, 方法與編輯 elxl0介面同
#vi /etc/hostname.elxl1
內容如下
# cat /etc/hostname.elxl1
sys11 netmask + broadcast + group mpgrp up \
addif sys11-test-elxl1 deprecated netmask + broadcast + -failover up
最後存檔即可

步驟4 重新開機
# init 6

步驟5 檢查其網路狀態
當我們重新開機後, 現在來檢視剛才設定好的網路狀態, 如下所示
bash-3.2# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
elxl0: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 2
        inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255
        groupname mpgrp
        ether 0:10:5a:84:0:b2
elxl0:1: flags=209140843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,ROUTER,IPv4,NOFAILOVER,CoS> mtu 1500 index 2
        inet 192.168.1.11 netmask ffffff00 broadcast 192.168.1.255
elxl1: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 3
        inet 192.168.1.20 netmask ffffff00 broadcast 192.168.1.255
        groupname mpgrp
        ether 0:10:5a:84:5:b2
elxl1:1: flags=209140843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,ROUTER,IPv4,NOFAILOVER,CoS> mtu 1500 index 3
        inet 192.168.1.21 netmask ffffff00 broadcast 192.168.1.255
果然剛才所設定的網路介面都有起來

elxl0:1: flags=209140843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,ROUTER,IPv4,NOFAILOVER,CoS> mtu 1500 index 2
        inet 192.168.1.11 netmask ffffff00 broadcast 192.168.1.255
該行表示
l   該邏輯介面為elxl0:1 , index 號碼為2elxl0實體介面同樣
l   該邏輯介面的MAC 位址不會出現, 因該該邏輯介面和實體介面使用相同的M        AC
l   Flags DEPRECATED NOFAILOVER 指定該介面為測試位址且不做failover
The RUNNING flag is also monitored by the in.mpathd daemon to
ensure that communications are functioning as expected.
l   Flags RUNNING 表示該介面目前被in.mpathd daemon所監控, 以確定該網路介面功能是正常

步驟6測試IPMP功能
在測試部份我們可以用2種方式測試, 一種是將實際網路介面拔掉, 一種是用命令方式測試,
Ø   實體連接測試
首先我們先從另一台Client login至這台sys10主機, 並將網路介面elxl0網路線拔掉並觀察其連線狀況, 看是否會斷線, 建議在sys10主機上觀察messages, 可下指令即時觀察,  tail –f /var/adm/messages , 最後再接回網路線,查看其回復狀態

Ø   命令方式測試
使用if_mpadm 指令讓某一網路介面中斷或回復
如下所示
# if_mpadm -d elxl0  ß停用elxl0介面
訊息產生如下
Jan  6 01:33:50 sys10 in.mpathd[154]: [ID 832587 daemon.error] Successfully failed over from NIC elxl0 to NIC elxl1

bash-3.2# ifconfig –a   ß查看目前網路狀態
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
elxl0: flags=289100842<BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,NOFAILOVER,OFFLINE,CoS> mtu 0 index 2
        inet 0.0.0.0 netmask 0
        groupname mpgrp
        ether 0:10:5a:84:0:b2
elxl0:1: flags=289140842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,ROUTER,IPv4,NOFAILOVER,OFFLINE,CoS> mtu 1500 index 2
        inet 192.168.1.11 netmask ffffff00 broadcast 192.168.1.255
elxl1: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 3
        inet 192.168.1.20 netmask ffffff00 broadcast 192.168.1.255
        groupname mpgrp
        ether 0:10:5a:84:5:b2
elxl1:1: flags=209140843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,ROUTER,IPv4,NOFAILOVER,CoS> mtu 1500 index 3
        inet 192.168.1.21 netmask ffffff00 broadcast 192.168.1.255
elxl1:2: flags=201100843<UP,BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4,CoS> mtu 1500 index 3
        inet 192.168.1.10 netmask ffffff00 broadcast 192.168.1.255

已自動切換到elxl1:2介面

# if_mpadm -r elxl0  ß回復elxl0介面
訊息產生如下
Jan  6 01:38:33 sys10 in.mpathd[154]: [ID 620804 daemon.error] Successfully failed back to NIC elxl0
# ifconfig –a    ß查看目前網路狀態
又自動切換到原elxl0介面了!!

上述所設定的是針對重新開機時, 會保留其IPMP設定值, 屬於永久性,接下來範例我們將說明在不重開機情形下, 如何暫時性設定其IPMP, 做法和寫入/etc/hostname.xxn檔案做法類似, 如下所示

沒有留言:

張貼留言