站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

VMware MPIO

前言

本文的 MPIO (MultiPath I/O) 指的是 iSCSI MPIO,在談 MPIO 以前個人有個疑問就是以存取 iSCSI 來說 LACP 跟 MPIO 有什麼差別呢? 您可以參考 [ Johnny - 來談談 vSphere 的 iSCSI Multipathing 配置] 便可了解差異點在哪裡。

LACP (Link Aggregation Control Protocol )

在交換器上啟用 LACP 功能配合 ESXi NIC Teaming 設定僅能達成 iSCSI 多重路徑的 故障切換 需求 (但無法達成負載平衡需求),主要是因為 ESXi NIC Teaming 的方式為使用 IP Hash 來進行負載平衡作業,所以當 iSCSI Target 只有一個 IP 位址時 (One TCP Connection) 那麼便只會產生 1 個 Hash 值 (除非 Active 實體網卡斷線才會走不同路徑),因此 iSCSI Initiator 與 iSCSI Target 之間將會永遠只走同一條路徑無法達到多重路徑同時存取的需求,所以無法達成負載平衡需求。而 LACP 設計適合用於特定的環境中使用例如當 Outbound 的目標是多個 IP 位址的環境便能透過 IP Hash 雜湊出不同 Hash 值並存取不同路徑進而顯現出它的效益 (例如存取 NFS Server),總之就是 (NAS / NFS) 這種屬於 File Level 就適用 LACP 來處理。

MPIO (MultiPath Input / Output)

MPIO 在一開始的設計上就是針對 SAN (IP-SAN、FC-SAN) 故障切換及負載平衡 進行設計,因此 iSCSI Initiator 會使用多個 Session 並透過多個實體網路卡做到故障切換及負載平衡方式來登入 iSCSI Target 進行存取,總之就是 (SAN) 這種屬於 Block Level 就適用 MPIO 來處理。

關於 FC-SAN、IP-SAN 的詳細設定資訊可以參考 VMware 官方文件:

FC-SAN

IP-SAN

實作環境

安裝及設定

本次設定內容為如下,而內建的網卡及外接網卡都使用其中 1 Port 來設定 NIC Teaming 及 MPIO,這樣做的好處可以避免因為網卡損壞造成通訊中斷的情況發生。

LACP 及 NIC Teaming 設定

有關於 D-Link DGS-3100 設定 LACP 及 ESXi 4.1 設定 NIC Teaming 可參考本站中另一篇文章 VMware Networking 內有詳細描述,下列僅簡述之

D-Link DGS-3100 Switch LACP 設定

設定時要注意若該 Port 已經被包在 VLAN 中則必須要先將那些 Port 從 VLAN 中移除,否則要將 Port 加入 LACP Group 時會出現錯誤訊息 (It is not allowed to configure member ports which belong to VLANs) 說要加入的 Port 已經是 VLAN 的 Member Port 而加入失敗。

 #create link_aggregation group_id 1 type lacp                    //建立 LACP Group ID 1
 #config link_aggregation group_id 1 ports 1-2 state enable       //Port 1、2 加入此 LACP Group 中 (會自行產生 ch1 介面)
 #config vlan VM add untagged ch1                                 //將 ch1 加入 VLAN (VM) 中
 #sh vlan                                                         //確認要加入 LACP Group 的 Port 1、2 是否有在 VLAN (VM) 中

ESXi Host NIC Teaming 設定

設定 ESXi NIC Teaming 您可能會發現雖然設定 NIC Teaming 功能至 vSwitch 但可能仍然無法作用 (或者發生怪異現象),原因是因為無法套用設定至 ESXi Host 的 Management Network PortGroup ,所以請再次設定 NIC Teaming 功能至 Management Network PortGroup 上,詳細操作及設定說明可參考 [VMware KB-1022751: NIC teaming using EtherChannel leads to intermittent network connectivity in ESXi]

  1. 開啟【vSphere Client】
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 【Properties】 >> 【vSwitch】 >> 【Edit】
      1. 【NIC Teaming】 >> 選擇 【Route based on ip hash】 並確認網卡 【vmnic2、vmnic4】 都在 Active Adapters 中即可按下【OK】進行套用
    2. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 【Properties】 >> 【Management Network】 >> 【Edit】
      1. 【NIC Teaming】 >> 選擇 【Route based on ip hash】 並確認網卡 【vmnic2、vmnic4】 都在 Active Adapters 中即可按下【OK】進行套用

掛載 NFS 資源

上述設定完成後便是著手設定掛載 NFS Server 資源

  1. 開啟【vSphere Client】
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Storage】 >> 【Add Storage】 >> 【Network File System】 >> 輸入【NFS Server IP 此例為 192.168.10.53】、【NFS 掛載點】、【DataStore 名稱】>> 【Next】 >> 【OK】

測試 NFS 傳輸

掛載 NFS Server 資源後測試對 NFS Server 資源進行存取時是否會走剛才設定的 LACP 路徑

  1. 開啟 2 個 SSH 連線工具 (例如 [PuTTY]),分別連線至 ESXi Host
  2. 首先確認 iSCSI Target 於此 ESXi Host 所掛載的路徑,使用指令【df -h】進行查看本次實作路徑為 【/vmfs/volumes/7cca51bb-b43af765-4c72-1057e9a85ab3】
  3. 切換到 iSCSI Target 路徑後執行指令將 PowerOff 的 VM test 複製為 test-1 例如【cp -a test test-1】
  4. 另一個 SSH 視窗則輸入指令 【esxtop】 >> 按下【 s 再按 2 】表示每 2 秒更新數值 >> 按下【n】顯示 ESXi Host 網卡資訊
  5. 此時便會看到如下資訊,vmkk0 再進行路徑傳輸 (vmnic2、vmnic4)
   PORT-ID              USED-BY  TEAM-PNIC DNAME              PKTTX/s  MbTX/s    PKTRX/s  MbRX/s %DRPTX %DRPRX
  16777217           Management        n/a vSwitch0              0.00    0.00       0.00    0.00   0.00   0.00
  16777218               vmnic2          - vSwitch0           2174.03   28.25       4.93    0.00   0.00   0.00
  16777219                 vmk0     all(2) vSwitch0           2174.52   28.25    4478.73   31.51   0.00   0.00
  16777220               vmnic4          - vSwitch0              0.49    0.00    4567.98   31.56   0.00   0.00
  33554433           Management        n/a vSwitch1              0.00    0.00       0.00    0.00   0.00   0.00
  33554434               vmnic3          - vSwitch1              0.00    0.00       6.41    0.00   0.00   0.00
  33554435                 vmk1     vmnic3 vSwitch1              0.00    0.00       3.45    0.00   0.00   0.00
  33554436                 vmk2     vmnic5 vSwitch1              0.00    0.00       3.45    0.00   0.00   0.00
  33554437               vmnic5          - vSwitch1              0.00    0.00       6.41    0.00   0.00   0.00

MPIO 設定

本次實作中設定 ESXi 4.1 Host MPIO 的相關環境說明如下:

建立 MPIO 專用 VMkernel Port

首先建立二個屆時專門用來存取 iSCSI Target 的 VMkernel Port

  1. 開啟【vSphere Client】
  2. 新增 VMkernel Port iSCSI-MPIO-1 (vmk1) 於 vSwitch 1
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 【Add Networking】 >> 【VMkernel】 >> 【Next】 >> 選擇【vmnic3、vmnic5】 >> 輸入 VMkernel Port 名稱【iSCSI-MPIO-1】 >> 輸入 VMkernel Port IP 位址【192.168.10.51】
  3. 新增 VMkernel Port iSCSI-MPIO-2 (vmk2) 於 vSwitch 1
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 【Add Networking】 >> 【VMkernel】 >> 【Next】 >> 選擇【Use vSwitch 1】 >> 輸入 VMkernel Port 名稱【iSCSI-MPIO-2】 >> 輸入 VMkernel Port IP 位址【192.168.10.52】

建立 MPIO 專用 VMkernel Port

再來則是設定 VMkernel Port 以 1 對 1 的方式對應實體網路卡 (vmnic3、vmnic5)

  1. 設定 iSCSI-MPIO-1 VMkernel Port 對應 vmnic3 實體網路卡
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 選擇 【vSwitch1 的 Properties】 >> 選擇【iSCSI-MPIO-1】 >> 【Edit】 >> 切換至【NIC Teaming】頁籤 >> 勾選【Override vSwitch failover order】 >> 透過 Move UP/Down 調整為【vmnic3 (Active Adapters)、vmnic5 (Unused Adapters)】 >> 【OK】
  2. 設定 iSCSI-MPIO-2 VMkernel Port 對應 vmnic5 實體網路卡
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Networking】 >> 選擇 【vSwitch1 的 Properties】 >> 選擇【iSCSI-MPIO-2】 >> 【Edit】 >> 切換至【NIC Teaming】頁籤 >> 勾選【Override vSwitch failover order】 >> 透過 Move UP/Down 調整為【vmnic3 (Unused Adapters)、vmnic5 (Active Adapters)】 >> 【OK】

iSCSI-MPIO-1 對應 vmnic3 iSCSI-MPIO-2 對應 vmnic5

啟動 iSCSI Initiator 功能

上述設定完成後便是著手設定啟動 iSCSI Initiator

  1. 啟動 iSCSI Software Adapter (iSCSI Initiator)
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Storage Adapters】 >> 選擇 【iSCSI Software Adapter】 >> 【Properties】 >> 【Configure】 >> 【Enabled】

啟動 iSCSI Software Adapter (iSCSI Initiator)

開啟 ESXi Remote Tech Support (SSH)

開啟 ESXi Host Remote Tech Support (SSH) 登入 Management Network,詳細設定資訊可參考 [VMware KB-1017910 - Using Tech Support Mode in ESXi 4.1]

  1. 連接 ESXi Host Console
    1. 【F2】 >> 輸入【ESXi Host 管理帳號及密碼】 >> 【Troubleshooting Options】 >> 【Enable Remote Tech Support (SSH)】
  2. SSH 登入 ESXi Host,設定將 VMkernel Port (vmk1、vmk2) 加入至 iSCSI Software Adapter (vmhba33) 中
    1. 執行指令【esxcli swiscsi nic add –n vmk1 -d vmhba33】將 vmk1 加入至 vmhba33 中
    2. 執行指令【esxcli swiscsi nic add –n vmk2 -d vmhba33】將 vmk2 加入至 vmhba33 中
    3. 執行指令【esxcli swiscsi nic list –d vmhba33】查看 vmhba33 是否包含了 vmk1、vmk2 資訊

掛載 iSCSI Target 資源

最後則是掛載 iSCSI Target 資源

  1. 連接至 iSCSI Target
    1. 選擇【ESXi Host】 >> 【Configuration】 >> 【Storage Adapters】 >> 選擇 【vmhba33】 >> 【Properties】 >> 【Dynamic Discovery】 >> 【Add】 >> 輸入 iSCSI Target IP 位址【192.168.10.53】 >> 【OK】 >> ESXi Rescan

掛載 iSCSI Target 資源

  1. 再次 【Recan】 iSCSI Software Adapter (vmhba33),重新掃描完成後查看 vmhba33 中切換到【Paths】頁籤應該會看到二條路徑資訊,例如此例為【vmhba33:C0:T0:L0、vmhba33:C1:T0:L0】,而 Status 狀態中 Active (I/O) 為目前正在使用的路徑

查看 iSCSI Initiator 裝置資訊 查看 iSCSI Initiator 路徑資訊

測試 Paths 為 Fixed、MRU

在 ESXi 中 Paths 方式 故障切換 機制有二種即 Fixed、Most Recently Used,而這二種故障切換方式有什麼不同呢? 說明如下:

下列測試執行指定 Paths 方式為 Fixed、MRU (Preferred 為 vmhba33:C0:T0:L0 也就是 vmnic3 及 VMkernel Port vmk1) 測試步驟為

  1. 開啟 2 個 SSH 連線工具 (例如 [PuTTY]),分別連線至 ESXi Host
  2. 首先確認 iSCSI Target 於此 ESXi Host 所掛載的路徑,使用指令【df -h】進行查看本次實作路徑為 【/vmfs/volumes/1cca82bb-b68af405-4c72-0017e9a28aa7】
  3. 切換到 iSCSI Target 路徑後執行指令將 PowerOff 的 VM test 複製為 test-1 例如【cp -a test test-1】
  4. 另一個 SSH 視窗則輸入指令 【esxtop】 >> 按下【 s 再按 2 】表示每 2 秒更新數值 (預設值為 5 秒更新) >> 按下【n】顯示 ESXi Host 網卡資訊
  5. 此時便會看到如下資訊,只有一條路徑 vmk1 再進行路徑傳輸 (vmnic3)
   PORT-ID              USED-BY  TEAM-PNIC DNAME              PKTTX/s  MbTX/s    PKTRX/s  MbRX/s %DRPTX %DRPRX
  16777217           Management        n/a vSwitch0              0.00    0.00       0.00    0.00   0.00   0.00
  16777218               vmnic2          - vSwitch0              1.97    0.01      13.81    0.01   0.00   0.00
  16777219                 vmk0     all(2) vSwitch0              1.97    0.01       6.91    0.00   0.00   0.00
  16777220               vmnic4          - vSwitch0              0.49    0.00      12.98    0.56   0.00   0.00
  33554433           Management        n/a vSwitch1              0.00    0.00       0.00    0.00   0.00   0.00
  33554434               vmnic3          - vSwitch1           2106.69   44.91    5136.96   21.79   0.00   0.00
  33554435                 vmk1     vmnic3 vSwitch1           2106.69   44.91    5017.56   21.73   0.00   0.00
  33554436                 vmk2     vmnic5 vSwitch1              0.00    0.00       3.95    0.00   0.00   0.00
  33554437               vmnic5          - vSwitch1              0.00    0.00      11.35    0.01   0.00   0.00

Fixed Path Selection

測試 Paths 為 Round Robin

在 ESXi 中 Paths 方式 負載平衡 機制為輪詢的方式也就是 Round Robin,下列測試執行指定 Paths 方式為 Round Robin 會看到 Status 中二條路徑都為 Active (I/O)

  1. 開啟 2 個 SSH 連線工具 (例如 [PuTTY]),分別連線至 ESXi Host
  2. 首先確認 iSCSI Target 於此 ESXi Host 所掛載的路徑,使用指令【df -h】進行查看本次實作路徑為 【/vmfs/volumes/1cca82bb-b68af405-4c72-0017e9a28aa7】
  3. 切換到 iSCSI Target 路徑後執行指令將 PowerOff 的 VM test 複製為 test-1 例如【cp -a test test-1】
  4. 另一個 SSH 視窗則輸入指令 【esxtop】 >> 按下【 s 再按 2 】表示每 2 秒更新數值 >> 按下【n】顯示 ESXi Host 網卡資訊
  5. 此時便會看到如下資訊,有二條路徑同時間再進行路徑傳輸 (vmnic3、vmnic5)
   PORT-ID              USED-BY  TEAM-PNIC DNAME              PKTTX/s  MbTX/s    PKTRX/s  MbRX/s %DRPTX %DRPRX
  16777217           Management        n/a vSwitch0              0.00    0.00       0.00    0.00   0.00   0.00
  16777218               vmnic2          - vSwitch0              1.97    0.01      13.81    0.01   0.00   0.00
  16777219                 vmk0     all(2) vSwitch0              1.97    0.01       6.91    0.00   0.00   0.00
  16777220               vmnic4          - vSwitch0              0.49    0.00      12.98    0.56   0.00   0.00
  33554433           Management        n/a vSwitch1              0.00    0.00       0.00    0.00   0.00   0.00
  33554434               vmnic3          - vSwitch1           1149.03   22.96    2823.03   12.84   0.00   0.00
  33554435                 vmk1     vmnic3 vSwitch1           1149.03   22.96    2720.99   12.79   0.00   0.00
  33554436                 vmk2     vmnic5 vSwitch1           1116.00   25.84    2810.71   11.97   0.00   0.00
  33554437               vmnic5          - vSwitch1           1116.00   25.84    2900.91   12.02   0.00   0.00

Round Robin Path Selection

參考

[VMware KB 2038869 - Considerations for using software iSCSI port binding in ESX/ESXi]

[ Johnny - 來談談 vSphere 的 iSCSI Multipathing 配置]

[Johnny - 補充 - 關於 ESX level iSCSI Multipathing]

[ How to configure iSCSI Port Binding on vSphere 4]

[ How to configure NIC teaming in VMware vSphere KB1004088]

[ iSCSI Port Binding fails with error: Add NIC failed in IMA]

[ How to unbind physical network cards from the iSCSI VMKernel]

[ 建立高效率、高可靠的iSCSI網路:: | 技術專題 | iThome online]

Me FAQ

Q.MPIO 設定後變成 3 條 Path?

Error Message:

因為之前有使用 Management Network 去連接 iSCSI Target,後來當設定好 MPIO 之後總共變成 3 條路徑又無法移除?

Ans:

問題出在之前有使用 Management Network 去連接 iSCSI Target 所以 vmk0 已經 Binding 在 vmhba33 上面,建立先 unbind 在重新建立 MPIO 即可詳細資訊可以參考 [VMware KB-1030674 - How to unbind physical network cards from the iSCSI VMKernel]

Q.出現 Lost access to volume due to connectivity issues. Recovery attempt is in progress and outcome will be reported shortly. 訊息?

Error Message:

最近發生儲存於 FreeNAS 所架設的 iSCSI Target 內的 VM (Guest OS) 運作會卡卡的,也就是有時順暢有時會卡住,過了幾秒後又變順了,查看了一下 VMware ESXi Host 上的 Event 顯示如下訊息 (頻率很高,每隔幾分鐘就發生一次,發生時就是 VM 運作卡卡的時候)

 Lost access to volume 4cca81bb-b68af408-4c72-0007e9a58aa4 (iSCSI-Target) due to connectivity issues. 
 Recovery attempt is in progress and outcome will be reported shortly.
 Successfully restored access to volume 4cca81bb-b68af408-4c72-0007e9a58aa4 (iSCSI-Target) following connectivity issues.

同一時間再 FreeNAS 上也會看到如下錯誤訊息

 istgt[1851]: istgt_iscsi.c:4899:worker: ***ERROR*** 
 iscsi_execute() failed on iqn.2007-09.jp.ne.peach.istgt:disk0,t,0x0001(iqn.1998-01.com.vmware:vm2-63bd9cf4,i,0x00023d000002)
 istgt[1851]: istgt_iscsi.c:4384:istgt_iscsi_execute: ***ERROR*** iscsi_op_scsi() failed
 istgt[1851]: istgt_iscsi.c:3182:istgt_iscsi_op_scsi: ***ERROR*** iscsi_write_pdu() failed

Ans:

依 VMware ESXi Host 的訊息找到官網的 [VMware KB-1009557: Host Connectivity Degraded] 但並無法解決問題,並且先前設定了 Multipath 後運作到目前也過了半年了一直都順暢無誤,直到上週才開始突然發生 VM 運作卡卡的 (可能有誰動到設定吧?),在網路上找了快一天都沒找到答案後來依如下方式處理後目前又恢復正常了:

  1. 先將 VMware ESXi Host 的 Path Selection 方式由 Round Robin (Multipath) 改成 Fixed (Single Path) 方式,並測試是否運作正常。
  2. 確定 Fixed 運作正常後過幾分鐘又將 Path Selection 方式由 Fixed 改回 Round Robin 方式。

結果經過上述的 Path 切換後目前 VMware ESXi Host 及 FreeNAS 都不會出現上述的錯誤訊息,且 VM 也恢復之前般運作順暢 (不會運作到一半卡卡的)。

後來又發生同樣的狀況,結果再次尋找的結果是可能因為 Loading 過重所導致,詳細請參考 [The FreeBSD Forums - (Solved) iSCSI istgt errors],簡單來說可以適當調整一下 FreeNAS 上的 istgt 設定值 QueueDepth 改成 64,當然如果你的 IOPS 實在太低的話,這樣子的微調並無法解決問題!!

Q.ESXi 5 啟用 Software iSCSI 後開機很慢?

Error Message:

若您在 ESXi 5 啟用 Software iSCSI 功能後,開機卻很慢有可能是因為 ESXi 無法連接 iSCSI Target,並且因為 ESXi 會嘗試連接 9 次,因此會造成開機很慢的問題。

Ans:

詳細內容可以參考 [VMware KB-2007108 - ESXi 5.x boot delays when configured for Software iSCSI],簡單說可以使用指令,或安裝更新即可解決此問題。

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com