FreeBSD でインターフェイスの冗長化 (ボンディング / チーミング / リンクアグリゲーション)

FreeBSD

FreeBSD でもインターフェイスの冗長化 (ボンディング / チーミング / リンクアグリゲーション) が可能です.
Active / Standby や LACP など,Linux と同等の冗長構成をとる事ができます.

今回はインターフェイスの冗長化について解説していきます.

冗長化 / リンクアグリゲーション の説明と構成

インターフェイスの冗長化 (ボンディング / チーミング / リンクアグリゲーション) について説明します.

インターフェイスが1つの場合,そのケーブルもしくはネットワークスイッチのポート,NIC が故障するとネットワークの断が発生し,サービス影響が生じます.
冗長化ができれば,アクティブなインターフェイスを通じてサービスを継続できます.

冗長化にはいくつかの方式があり,FreeBSD で構成可能な方式は次のとおりになります.

failover モード

failover モードは,2つのインターフェイスをアクティブ・スタンバイとして,通常はアクティブインターフェイスのみで送受信を行うモードです.
対向のネットワークスイッチに特別な設定は不要です.帯域は1つのインターフェイスが上限となります.

帯域の向上は不要で冗長だけできれば十分.もしくはスイッチで Etherchannel (Portchannel) が構成できない場合にこのモードを利用する形になります.

failover モードの設定

failover モードを設定する方法について2種類解説します.

コマンドラインでの構成

コマンドラインで構成するには次のとおり行います.インターフェイスは2つ,em0 と em1 を用いた場合で説明します.

ifconfig lagg0 create
ifconfig em0 up
ifconfig em1 up
ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto failover laggport em0 laggport em1

ifconfig lagg0 create」でリンクアグリゲーション用のインターフェイスを作成します.インターフェイス名は「laggX」である必要がありますので注意してください.

ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto failover laggport em0 laggport em1」でリンクアグリゲーションのモードをフェイルオーバーにし,メンバーポートとして em0 と em1 を追加しています.

先に指定したポートが Active ポートとして利用されます.

永続的に利用する場合

/etc/rc.conf に以下のように設定を行います.

cloned_interfaces="lagg0"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="inet 192.168.241.220 netmask 255.255.255.0 laggproto failover laggport em0 laggport em1"

cloned_interfaces=lagg0」が「ifconfig lagg0 create」に該当します.ここも「laggX」である必要があります.

動作確認

上記の設定で構成した場合の通常時はこのような状態になります.em0 が「MASTER,ACTIVE」と記載されているとおり,プライマリーポートとなり通常はこのインターフェイスが利用されます.

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto failover lagghash l2,l3,l4
        laggport: em0 flags=5<MASTER,ACTIVE>
        laggport: em1 flags=0<>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

em0 をダウンさせた場合は次のようになります.「ACTIVE」が em1 に移動したことが確認でき,通信は切断されずにフェイルオーバーが行われます.
(正確には少しのロスは発生していますが,SSH セッションが切断される程のロスではありません)

# ifconfig em0 down
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto failover lagghash l2,l3,l4
        laggport: em0 flags=1<MASTER>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

em0 を再度 up させると次のようになります.em0 に「ACTIVE」がフェイルバックしてきます.

# ifconfig em0 up
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto failover lagghash l2,l3,l4
        laggport: em0 flags=5<MASTER,ACTIVE>
        laggport: em1 flags=0<>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以上,failover モードの解説です.

loadbalance モード

loadbalance モードは対向スイッチが例えば Cisco 機器で FEC(FastEtherChannel) や GEC (GigabitEtherChannel) などのポートチャネル技術を備えている機器で利用可能な,アクティブ・アクティブな送受信が行えるモードです.

LACP が設定はできないけど,PortChannel は構成可能.という場合はこちらを利用します.
LACP が利用可能な場合は後述する LACP モードがお薦めです.

loadbalance モードの設定

loadbalance モードを設定する方法について2種類解説します.

コマンドラインでの構成

コマンドラインで構成するには次のとおり行います.インターフェイスは2つ,em0 と em1 を用いた場合で説明します.

ifconfig lagg0 create
ifconfig em0 up
ifconfig em1 up
ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto loadbalance laggport em0 laggport em1

ifconfig lagg0 create」でリンクアグリゲーション用のインターフェイスを作成します.インターフェイス名は「laggX」である必要がありますので注意してください.

ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto loadbalance laggport em0 laggport em1」でリンクアグリゲーションのモードをフェイルオーバーにし,メンバーポートとして em0 と em1 を追加しています.

永続的に利用する場合

/etc/rc.conf に以下のように設定を行います.

cloned_interfaces="lagg0"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="inet 192.168.241.220 netmask 255.255.255.0 laggproto loadbalance laggport em0 laggport em1"
スイッチ側の設定

以下,Cisco Catalyst 2960L の設定例です.「channgel-group 1 mode on」が FEC/GEC の設定となります.

interface GigabitEthernet0/15
 description ### To_vg10_em1
 switchport mode access
 spanning-tree portfast edge
 channel-group 1 mode on

interface GigabitEthernet0/16
 description ### To_vg10_em0
 switchport mode access
 spanning-tree portfast edge
 channel-group 1 mode on

interface Port-channel1
 description ### To_vg10
 switchport mode access
 spanning-tree portfast edge
動作確認

上記の設定で構成した場合の通常時はこのような状態になります.em0 と em1 の両方が「ACTIVE」と記載されています.

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto loadbalance lagghash l2,l3,l4
        laggport: em0 flags=4<ACTIVE>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

スイッチ上は次のように見えます.

c2960#show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 2
Number of aggregators:           2

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)          -        Gi0/15(P)   Gi0/16(P)

em0 をダウンさせた場合は次のようになります.「ACTIVE」が em1 のみになります.通信は切断されずに継続されます.

# ifconfig em0 down
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto loadbalance lagghash l2,l3,l4
        laggport: em0 flags=0<>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

em0 を再度 up させると次のようになります.em0 と em1 が再度「ACTIVE」になります.

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto loadbalance lagghash l2,l3,l4
        laggport: em0 flags=4<ACTIVE>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以上,loadbalance モードの解説です.

LACP モード

LACP モードは対向スイッチが LACP (Link Aggregation Control Protocol) をのポートチャネル技術を備えている機器で利用可能な,アクティブ・アクティブな送受信が行えるモードです.

loadbalance モードは Cisco の EtherChannel 専用なのに対して,こちらは IEEE 802.3ad という規格化されているものですので様々なネットワーク機器で対応しています.

また,Cisco も結構昔から LACP もサポートしており,FEC/GEC をサポートしなくなってきている製品も存在していますので,通常はこちらのモードを利用するケースが多いと思います.

LACP モードの設定

LACP モードを設定する方法について2種類解説します.

コマンドラインでの構成

コマンドラインで構成するには次のとおり行います.インターフェイスは2つ,em0 と em1 を用いた場合で説明します.

ifconfig lagg0 create
ifconfig em0 up
ifconfig em1 up
ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto lacp laggport em0 laggport em1

ifconfig lagg0 create」でリンクアグリゲーション用のインターフェイスを作成します.インターフェイス名は「laggX」である必要がありますので注意してください.

ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto lacp laggport em0 laggport em1」でリンクアグリゲーションのモードをフェイルオーバーにし,メンバーポートとして em0 と em1 を追加しています.

永続的に利用する場合

/etc/rc.conf に以下のように設定を行います.

cloned_interfaces="lagg0"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="inet 192.168.241.220 netmask 255.255.255.0 laggproto lacp laggport em0 laggport em1"
スイッチ側の設定

以下,Cisco Catalyst 2960L の設定例です.「channgel-group 1 mode active」が LACP の設定となります.

interface GigabitEthernet0/15
 description ### To_vg10_em1
 switchport mode access
 spanning-tree portfast edge
 channel-group 1 mode active

interface GigabitEthernet0/16
 description ### To_vg10_em0
 switchport mode access
 spanning-tree portfast edge
 channel-group 1 mode active

interface Port-channel1
 description ### To_vg10
 switchport mode access
 spanning-tree portfast edge
動作確認

上記の設定で構成した場合の通常時はこのような状態になります.em0 と em1 の両方が「ACTIVE,COLLECTING,DISTRIBUTING」と記載されています.loadbalance モードと違い,LACP はネゴシエーションが行われますので,ネゴシエーションに失敗したインターフェイスは ACTIVE にはなりません.

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto lacp lagghash l2,l3,l4
        laggport: em0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

スイッチ上は次のように見えます.

c2960#show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 2
Number of aggregators:           2

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Gi0/15(P)   Gi0/16(P)

em0 をダウンさせた場合は次のようになります.「ACTIVE」が em1 のみになります.通信は切断されずに継続されます.

# ifconfig em0 down
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto lacp lagghash l2,l3,l4
        laggport: em0 flags=0<>
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

em0 を再度 up させると次のようになります.em0 と em1 が再度「ACTIVE」になります.

# ifconfig em0 up
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto lacp lagghash l2,l3,l4
        laggport: em0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以上,LACP モードの解説です.

round-robin モード

round-robin モードはちょっと特殊です.送受信を NIC をラウンドロビンで行います.スケジューラーがアクティブなインターフェイスを決定し送信インターフェイスを適宜変更していきます.受信はその際のアクティブなインターフェイスから入ってきます.
対向のスイッチではポートチャネルの構成をとる必要はありません.

注意点は,対向スイッチから見て mac address table がしょっちゅう変更されることです.

round-robin モードの設定

round-robinモードを設定する方法について2種類解説します.

コマンドラインでの構成

コマンドラインで構成するには次のとおり行います.インターフェイスは2つ,em0 と em1 を用いた場合で説明します.

ifconfig lagg0 create
ifconfig em0 up
ifconfig em1 up
ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto roundrobin laggport em0 laggport em1

ifconfig lagg0 create」でリンクアグリゲーション用のインターフェイスを作成します.インターフェイス名は「laggX」である必要がありますので注意してください.

ifconfig lagg0 inet 192.168.241.220 netmask 255.255.255.0 laggproto roundrobin laggport em0 laggport em1」でリンクアグリゲーションのモードをラウンドロビンにし,メンバーポートとして em0 と em1 を追加しています.

永続的に利用する場合

/etc/rc.conf に以下のように設定を行います.

cloned_interfaces="lagg0"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="inet 192.168.241.220 netmask 255.255.255.0 laggproto roundrobin laggport em0 laggport em1"
動作確認

上記の設定で構成した場合の通常時はこのような状態になります.em0 と em1 両方が「ACTIVE」と記載されているとおり,送信は両方が Active となります.

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto roundrobin lagghash l2,l3,l4
        laggport: em0 flags=4<ACTIVE>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

この状態で通信を行うと問題なく出来ている状態になりますが,ping を行うと次のように DUP が表示されます.

# ping 192.168.241.254
PING 192.168.241.254 (192.168.241.254): 56 data bytes
64 bytes from 192.168.241.254: icmp_seq=0 ttl=64 time=0.335 ms
64 bytes from 192.168.241.254: icmp_seq=0 ttl=64 time=0.430 ms (DUP!)
64 bytes from 192.168.241.254: icmp_seq=1 ttl=64 time=0.282 ms
64 bytes from 192.168.241.254: icmp_seq=1 ttl=64 time=0.347 ms (DUP!)
64 bytes from 192.168.241.254: icmp_seq=2 ttl=64 time=0.230 ms
64 bytes from 192.168.241.254: icmp_seq=2 ttl=64 time=0.283 ms (DUP!)
^C
--- 192.168.241.254 ping statistics ---
3 packets transmitted, 3 packets received, +3 duplicates, 0.0% packet loss
round-trip min/avg/max/stddev = 0.230/0.318/0.430/0.063 ms

また,スイッチの MAC アドレステーブルを見てみると次のとおり常に変更が入ります.

c2960#show mac address-table | inc 0026.55da.c6b5
   1    0026.55da.c6b5    DYNAMIC     Gi0/15
c2960#show mac address-table | inc 0026.55da.c6b5
   1    0026.55da.c6b5    DYNAMIC     Gi0/16
c2960#show mac address-table | inc 0026.55da.c6b5
   1    0026.55da.c6b5    DYNAMIC     Gi0/15
c2960#show mac address-table | inc 0026.55da.c6b5
   1    0026.55da.c6b5    DYNAMIC     Gi0/16

em0 をダウンさせた場合は次のようになります.「ACTIVE」が em1 のみになります.通信は切断されずに継続されます.

# ifconfig em0 down
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto roundrobin lagghash l2,l3,l4
        laggport: em0 flags=0<>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

この場合の ping は DUP は発生しません.(インターフェイスが1つだけなので当然ですが)

# ping 192.168.241.254
PING 192.168.241.254 (192.168.241.254): 56 data bytes
64 bytes from 192.168.241.254: icmp_seq=0 ttl=64 time=0.334 ms
64 bytes from 192.168.241.254: icmp_seq=1 ttl=64 time=0.235 ms
64 bytes from 192.168.241.254: icmp_seq=2 ttl=64 time=0.229 ms
^C
--- 192.168.241.254 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.229/0.266/0.334/0.048 ms

em0 を再度 up させると次のようになります.em0 と em1 が再度「ACTIVE」になります.

# ifconfig em0 up
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=481049b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,VLAN_HWFILTER,NOMAP>
        ether 00:26:55:da:c6:b5
        inet 192.168.241.220 netmask 0xffffff00 broadcast 192.168.241.255
        laggproto roundrobin lagghash l2,l3,l4
        laggport: em0 flags=4<ACTIVE>
        laggport: em1 flags=4<ACTIVE>
        groups: lagg
        media: Ethernet autoselect
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

以上,roundrobin モードの解説です.




seichan

ご連絡は X (twitter) の DM へお願いします.

seichanをフォローする
FreeBSD

seichanをフォローする




コメント

タイトルとURLをコピーしました