本文將實作如何建立 Lagg 虛擬網路介面,並採用 LACP 方式,讓 FreeNAS 主機啟用網路卡頻寬合併功能 (Link Aggregation),也就是 IEEE 802.3ad (Link Aggregation Control Protocol, LACP),同時也將設定 FreeNAS 主機網路卡啟用 Jumbo Frame 功能,以便在 FreeNAS 主機進行大檔案(例如影音檔)傳輸時,能減少主機運算負載並加快傳輸時間,且於相關功能設定完畢後進行成員網卡故障及 Jumbo Frame 大封包測試。
Lagg 是將 FreeNAS 主機上多片實體網路卡群組起來所產生的一片虛擬網路卡,我們設定它以提供實體網路卡進行頻寬合併 (LACP) 的能力。
另外此次實作環境中所使用的網路卡為 Intel PRO/1000 PT Dual Port Server Adapter,根據 Intel 文件的內容可知,正確的 MTU Size 設定值應設定為「9216」bytes,這個數值稍後會被設定至 Lagg 網路介面中,所以請您務必確定 FreeNAS 主機上網路卡的正確 MTU 數值,以免影響後續功能運作。
▲ 圖1:建立 Lagg 虛擬網路介面及選取成員網卡 em0、em1
▲ 圖2:準備編輯 Lagg 虛擬網路介面內容
▲ 圖3:設定固定 IP 位址至 Lagg 網路介面
▲ 圖4:檢查網路設定是否存入 Lagg 網路介面中
此次測試環境中採用的網路交換器為 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 metric 0 mtu 9216
options=19b
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
laggport: em0 flags=1c
設定「頻寬合併」的好處在於平時可將成員網卡群組起來以增加整體網路傳輸流量(使傳輸瓶頸不致於卡在網路頻寬上!),而當成員網卡損壞時也具備故障容錯功能(只是整體網路傳輸流量下降而已)缺點在於 FreeNAS 主機與網路交換器二端,都必須支援相關協定(如此例的 IEEE802.3ad)才可運作。
上述準備作業完成後,我們便可以模擬成員網卡故障的情況,請先於 FreeNAS 主機 Console 畫面進入 Shell 模式,輸入「systat -ifstat 1」指令來即時查看網卡流量,以確認目前二片成員網路卡 (em0、em1) 同時均有網路流量。
▲ 圖5:即時查看網卡流量
採用持續 ping Lagg 網路介面 IP 位址 (10.10.25.110) 的方式來查看 FreeNAS 主機的流量,經實測當 em0 或 em1 成員網卡故障後,並不會遺失任何 ping 封包。下列為模擬 em0 成員網卡故障後在 FreeNAS 主機以及網路交換器上所看到的情況。
[root@freenas] ~# ifconfig lagg0
lagg0: flags=8843 metric 0 mtu 9216
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
laggport: em0 flags=0
DGS3100# show link_aggregation
Group ID : 1
Member Port : 1:(16-17)
Active Port : 1:17
Status : enable
最後測試能否使用 ping 指令,並搭配參數進行一般及大封包的測試,下列指令中「-c2」參數表示 ping 兩次後便停止,而「-s9216」參數則為指定 ping 封包大小以測試是否正確支援 Jumbo Frame 大封包。
[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
[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
市面上網路交換器品牌眾多,無法一一舉例,筆者用手上能取得的另一款交換器測試 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
以筆者此次測試的伺服器 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 數值是否套用生效。
[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
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
[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
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 功能無法運作的可能,是網路交換器不支援 Jumbo Frame!以筆者手邊的 Cisco Catalyst 2950 為例,該交換器的 MTU 數值預設為 1500,但是最高也僅支援至 1530(詳細說明資訊請參考 Cisco – Jumbo/Giant Frame Support on Catalyst Switchs Configuration Example),所以當發生問題時請務必確定二端(FreeNAS 主機上網路卡及網路交換器)皆支援相關設定。
至此 FreeNAS 的網卡頻寬合併及 Jumbo Frame 功能已設定完成,並且順利通過成員網卡故障及 Jumbo Frame 大封包測試,在下一篇文章中將會實作如何於 FreeNAS 主機上設定靜態路由 (Static Route) 及虛擬網路 (VLAN) 功能。
Comments
在下研讀您的技術文件,受益實在 良多,也一直期待您接下來的St atic Route及VLAN功能,不知 何時能等到您的發表文件。
Angus
您的技術文件內容實在精彩,本人 真的收穫不少,而也期待您有進一 步說明iSCSI及NFS設定等 技術文件發表,或是你是否有推薦 的書籍(網路文件)可供參考...感謝!
Major
一般的網路卡(NVIDIA 內建網路卡)
MTU Size
要如何得知