本文將實作如何建立 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) 功能。