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

利用 FreeNAS 打造儲存設備 (8) - LACP (頻寬合併)

OpenFoundry

本文刊載於 [OpenFoundry 電子報第 188 期 - 利用 FreeNAS 打造儲存設備 (8) ─ 網路設定篇之頻寬合併] 於 2012 年 1 月 17 日出刊,您可至 [OpenFoundry 電子報總覽] 輸入您的 E-Mail 即可訂閱。

前言

本文將實作如何建立 lagg 虛擬網路介面並採用 LACP 方式,以達到 FreeNAS 主機啟用網路卡頻寬合併功能 [Link Aggregation],也就是 IEEE 802.3ad (Link Aggregation Control Protocol,LACP),同時也將設定 FreeNAS 主機網路卡啟用 [Jumbo Frame] 功能,以便屆時 FreeNAS 主機進行大檔案傳輸時 (例如 影音檔) 除了能減少主機運算負載之外更加快傳輸時間,並且於相關功能設定完畢後進行成員網卡故障及 Jumbo Frame 大封包測試。

實作環境

GUI 設定 Lagg 頻寬合併及 Jumbo Frame 功能

[Lagg] 為將 FreeNAS 主機上多片實體網路卡群組起來之後所產生的一片虛擬網路卡,我們設定它來提供實體網路卡進行頻寬合併 (LACP) 的能力。

另外此次實作環境中所使用的網路卡為 Intel PRO/1000 PT Dual Port Server Adapter,根據 [Intel 文件] 內容中可知正確的 MTU Size 設定值應設定為 「9216」 bytes,這個數值稍後會設定至 Lagg 網路介面中,所以請您務必確定安裝於 FreeNAS 主機上網路卡的正確 MTU 數值以免後續影響功能運作。

  1. 僅將 FreeNAS 主機其中一片網路卡接上網路線 (只插 em0),區域網路中已有架設 DHCP 伺服器,主機由 em0 網路卡取得區網 IP 位址 10.10.25.45。
  2. 開啟瀏覽器後於網址列輸入 FreeNAS 主機暫時的 IP 位址「http://10.10.25.45」,此時將自動登入 FreeNAS GUI 圖形介面 (不需輸入管理帳號及密碼)。
  3. 切換至「Network > Link Aggregations > Create Link Aggregation 」,選擇及輸入相關資訊:
    1. Lagg protocol: 顯示 Lagg 故障轉移功能支援的六種模式,請選擇「LACP」類型。
    2. Physical NICs in the LAGG: 顯示於開機流程中偵測到的網路卡清單,請選擇要加入 Lagg 功能的實體網路卡編號,選擇「em0、em1」後按下「OK」鍵。
  4. 切換至「View All Link Aggregations」項目後按下「lagg0」項目的「Edit Interface」鈕,輸入 IP 位址資訊:
    1. Interface Name: 請輸入此網路卡的別名(此為必填欄位不可忽略!!),此例採用預設值「lagg0」即可。
    2. IPv4 Address: 請輸入此網路卡上的固定 IP 位址,此例輸入「10.10.25.110」。
    3. IPv4 Netmask: 請於下拉選單中選擇適合的網路遮罩值,此例選擇「/24 (255.255.255.0)」。
    4. Options: 請輸入適合此網路卡的 MTU 數值,此例輸入「mtu 9216」。
    5. OK: 當上述設定確認無誤按下 「OK」 鍵確定套用設定值。
    6. 切換到 FreeNAS Console,輸入「10」 進入 「Reboot」 選項,將主機重新啟動並且將連接於 em1 網路卡的線材插上。

建立 Lagg 虛擬網路介面及選取成員網卡 em0、em1 準備編輯 Lagg 虛擬網路介面內容 設定固定 IP 位址至 Lagg 網路介面 檢查網路設定是否存入 Lagg 網路介面中

交換器設定頻寬合併及 Jumbo Frame 功能

此次測試環境中採用的網路交換器為 D-Link DGS-3100-24,其中 FreeNAS 主機上的 em0 網卡接於 Port 16 而 em1 網卡則接於 Port 17,請輸入如下指令將 Port 16、17 進行合併 (以配合 FreeNAS LACP設定),設定完成後可使用指令「show link_aggregation」確認運作狀態。

 DGS3100# create link_aggregation group_id 1 type lacp
 DGS3100# config link_aggregation group_id 1 ports 1:(16-17) state enable
 DGS3100# show link_aggregation
  Group ID       : 1
  Member Port    : 1:(16-17)
  Active Port    : 1:(16-17)
  Status         : enable

接著啟用交換器的 Jumbo Frame 功能,請注意!! 此款網路交換器啟用 Jumbo Frame 功能後必須要進行「存檔 save」以及「重新啟動 reboot」的動作,才能使功能套用生效。

 DGS3100# enable jumbo_frame      
  Jumbo frames will be enabled after save and restart.
 DGS3100# save
 DGS3100# reboot
  Are you sure you want to proceed with system reboot now? (Y/N)[N] Y
  This action may take a few minutes

交換器重新啟動完成後使用指令「show configuration running」,再次確認剛才的設定是否套用生效。

 DGS3100# show configuration running
  enable jumbo_frame
  create link_aggregation group_id 1 type lacp
  config link_aggregation group_id 1 ports 1:(16-17)

此時可以回頭查看 FreeNAS 主機的 Lagg0 網路介面狀態。

 [root@freenas] ~# ifconfig lagg0
  lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 9216
  options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 00:15:17:8e:eb:14
        inet 10.10.25.110 netmask 0xffffff00 broadcast 10.10.25.255
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

成員網卡故障測試

設定「頻寬合併」的好處在於平時可將成員網卡群組起來以增加整體網路傳輸流量 (使傳輸瓶頸不致於卡在網路頻寬上!!),而當有成員網卡損壞時也具備故障容錯功能 (只是整體網路傳輸流量下降而以),缺點在於必須 FreeNAS 主機與網路交換器二端,都必須支援相關協定 (如此例的 IEEE 802.3ad) 才可運作。

上述準備作業完成後,我們便可以模擬成員網卡故障的情況,請先於 FreeNAS 主機 Console 畫面進入 Shell 模式後,輸入「systat -ifstat 1」指令來即時查看網卡流量,可以確認目前二片成員網路卡 (em0、em1) 同時均有網路流量。

即時查看網卡流量

採用持續 ping Lagg 網路介面 IP 位址 (10.10.25.110) 的方式來查看 FreeNAS 主機的流量,經實測當 em0 或 em1 成員網卡故障後,並不會遺失任何 ping 封包的情況發生,下列為模擬當 em0 成員網卡故障後在 FreeNAS 主機上以及網路交換器上所看到的情況。

FreeNAS 主機 lagg0 情況

 [root@freenas] ~# ifconfig lagg0
  lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 9216    options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 00:15:17:8e:eb:14
        inet 10.10.25.110 netmask 0xffffff00 broadcast 10.10.25.255
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em0 flags=0<>

D-Link DGS-3100 情況

 DGS3100# show link_aggregation
  Group ID       : 1
  Member Port    : 1:(16-17)
  Active Port    : 1:17
  Status         : enable

Jumbo Frame 測試

最後測試能否使用 ping 指令並搭配參數來進行一般及大封包的測試,下列指令中「-c2」參數表示 ping 2 次後便停止,而「-s9216」參數則為指定 ping 封包大小以測試是否正確支援 Jumbo Frame 大封包。

Ping 小封包

 [root@freenas] ~# ping -c2 10.10.25.111
  PING 10.10.25.111 (10.10.25.111): 56 data bytes
  64 bytes from 10.10.25.111: icmp_seq=0 ttl=64 time=0.147 ms
  64 bytes from 10.10.25.111: icmp_seq=1 ttl=64 time=0.144 ms
  --- 10.10.25.111 ping statistics ---
  2 packets transmitted, 2 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 0.144/0.146/0.147/0.001 ms

Ping 大封包

 [root@freenas] ~# ping -c2 -s9216 10.10.25.111
  PING 10.10.25.111 (10.10.25.111): 9216 data bytes
  9224 bytes from 10.10.25.111: icmp_seq=0 ttl=64 time=2.147 ms
  9224 bytes from 10.10.25.111: icmp_seq=1 ttl=64 time=2.144 ms
  --- 10.10.25.111 ping statistics ---
  2 packets transmitted, 2 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 2.144/2.146/2.147/0.001 ms

補充一、Junper EX3200 交換器設定?

市面上網路交換器品牌眾多無法一一舉例,而筆者將手上能取得的另一款交換器進行測試 LACP 與 Jumbo Frame 功能,設定內容如下:

 #set chassis aggregated-devices ethernet device-count 1
 #set interfaces ae0 aggregated-ether-options lacp active
 #set interfaces ae0 unit 0 family inet address 10.10.25.112/24    
 #delete interfaces ge-0/0/16 unit 0
 #delete interfaces ge-0/0/17 unit 0
 #set interfaces ge-0/0/16 ether-options 802.3ad ae0
 #set interfaces ge-0/0/17 ether-options 802.3ad ae0
 #set interfaces ae0 mtu 9216
 #commit

設定完成後查看 LACP 設定是否生效。

 root> show lacp interfaces ae0
  Aggregated interface: ae0
    LACP state:       Role   Exp   Def  Dist  Col  Syn  Aggr  Timeout  Activity
      ge-0/0/16      Actor    No    No   Yes  Yes  Yes   Yes     Fast    Active
      ge-0/0/16    Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
      ge-0/0/17      Actor    No    No   Yes  Yes  Yes   Yes     Fast    Active
      ge-0/0/17    Partner    No    No   Yes  Yes  Yes   Yes     Slow    Active
    LACP protocol:        Receive State  Transmit State          Mux State
      ge-0/0/16                 Current   Slow periodic Collecting distributing
      ge-0/0/17                 Current   Slow periodic Collecting distributing

此款 Switch 支援 ping 指令以及指定大封包 size,因此可以直接由交換器端直接 ping FreeNAS 主機也是可行的。

 root> ping count 2 size 9216 10.10.25.110
  PING 10.10.25.110 (10.10.25.110): 9216 data bytes
  9224 bytes from 10.10.25.110: icmp_seq=0 ttl=64 time=3.220 ms
  9224 bytes from 10.10.25.110: icmp_seq=1 ttl=64 time=1.626 ms
  --- 10.10.25.112 ping statistics ---
  2 packets transmitted, 2 packets received, 0% packet loss
  round-trip min/avg/max/stddev = 1.626/2.423/3.220/0.797 ms

補充二、Jumbo Frame 功能無法運作?

以筆者此次測試的伺服器 IBM x3250 為例,其內建的 Broadcom 網卡 (FreeNAS 網卡代號 bge) 便無法設定 MTU 數值超過「1500」,原因為此版本 FreeNAS 所採用的作業系統為 FreeBSD 8.2,剛好此版本中對於此網路卡的驅動有部份問題所導致 (MTU 數值可往下調整卻無法上調),詳細說明請參考 [FreeBSD - kern/155192: bge1 mtu problem]

那麼該如何判斷安裝於 FreeNAS 主機上的網路卡能否支援 Jumbo Frame? 簡單的判斷方式為進入 FreeNAS Console 使用指令手動指定網卡 MTU 數值,如果得到的回應訊息為「Invalid argument」便表示該網卡不支援 Jumbo Frame 功能,或者是您設定的 MTU 數值錯誤例如 該網路卡 MTU 支援為 9014 而您卻設定為 9216 超出支援範圍,而若輸入後直接得到「提示符號 #」則表示有支援,接著可以使用 ifconfig 指令配合網卡即可確認 MTU 數值是否套用生效。

手動設定 bge0 網卡 MTU 為 9000 失敗!!

 [root@freenas] ~# ifconfig bge0 mtu 9000       //指定 MTU為 9000
  ifconfig: ioctl (set mtu): Invalid argument   //設定失敗
 [root@freenas] ~# ifconfig bge0                //目前 MTU 仍為 1500
  bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
        ether 00:1a:64:6e:0e:69
        inet 10.10.25.45 netmask 0xffffff00 broadcast 10.10.25.255
        media: Ethernet autoselect (100baseTX <full-duplex,flowcontrol,rxpause,txpause>)
        status: active

手動設定 bge0 網卡 MTU 為 1200 成功!!

 [root@freenas] ~# ifconfig bge0 mtu 1200   //指定 MTU 為 1200
 [root@freenas] ~# ifconfig bge0             //目前 MTU 為 1200
  bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1200
        options=8009b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LINKSTATE>
        ether 00:1a:64:6e:0e:69
        inet 10.10.25.45 netmask 0xffffff00 broadcast 10.10.25.255
        media: Ethernet autoselect (100baseTX <full-duplex,flowcontrol,rxpause,txpause>)
        status: active

另外也有可能網路交換器不支援 Jumbo Frame 所導致!! 以筆者手邊的 Cisco Catalyst 2950 為例該交換器的 MTU 數值預設為 1500,但是最高也僅支援至 「1530」 而以 (詳細說明資訊請參考 [Cisco – Jumbo/Giant Frame Support on Catalyst Switchs Configuration Example]),所以當發生問題時請務必確定二端 (FreeNAS 主機上網路卡及網路交換器) 皆支援相關設定。

結語

至此 FreeNAS 的網卡 頻寬合併 及 Jumbo Frame 功能已設定完成,並且順利通過成員網卡故障及Jumbo Frame 大封包測試,在下一篇文章中將會實作如何設定靜態路由 (Static Route) 及虛擬網路 (VLAN) 功能於 FreeNAS 主機上。

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