CentOSとCisco Catalystでチーミングによるリンク冗長化(Static LAG)
CentOSとCisco Catalystでチーミング(Static LAG)によるリンク冗長化設定を検証してみました。
チーミングを構成することで、リンク障害時の可用性を向上させることができます。
なお、今回構成するStatic LAG(Link Aggregation Group)方式は、各ノードが独自にリンク経路を分散させるのが特徴のシンプルな方式です。経路断の検知はリンクダウンでしか行えないので、リンクの途中経路にメディアコンバータなど別機器が存在する場合は、別途LACP方式を検討すべきでしょう。
Contents
前提条件
前提条件は以下の通りです。
- LAG方式は、Staticを使用する
- CentOSの作業はroot権限を持つユーザで行う
- Cisco Catalystの作業は特権ユーザで行う
- ソフトウェアバージョン
- サーバ: CentOS 8.0
- スイッチ: IOS 12.2(55)SE12
システムの構成図は以下のとおりです。
CentOS側の設定
パッケージのインストール
チーミングに関するパッケージをインストールしていない場合、以下のコマンドでインストールします。
# yum -y install teamd NetworkManager-team
既存コネクションの削除
OSインストール時に接続されているNICによっては、デフォルトでNetworkManagerのコネクションが作成されている場合があります。その場合、一旦既存のコネクションを削除します。
以下は、enp0s3
とenp0s8
のインターフェースを削除する場合のコマンド例です。
まずは、既存コネクションを確認します。
$ nmcli con
NAME UUID TYPE DEVICE
enp0s3 ac136f2a-71be-43c8-932a-bfa625f1c83c ethernet enp0s3
enp0s8 855824b2-0223-4102-25aa-2352ec7420ee ethernet enp0s3
既存コネクションをそれぞれ削除します。
# nmcli con del enp0s3
# nmcli con del enp0s8
チーミングインターフェース用コネクションの作成
以下のコマンドを実行し、チーミングインターフェースteam0
のコネクションを作成します。
コネクション名は、con-name
の箇所で指定します。
負荷分散方式は、team.runner
の箇所で指定します。今回はStatic LAGを構成するのでloadbalance
を指定します。
### チーミングインターフェースの作成
# nmcli con add type team con-name team0 ifname team0 team.runner loadbalance
# nmcli con mod team0 team.link-watchers "name=ethtool"
# IPアドレスの設定
# nmcli con mod team0 ipv4.method manual ipv4.address "192.168.100.100/24"
### デフォルトゲートウェイの設定
# nmcli con mod team0 ipv4.gateway "192.168.100.254"
### DNSの設定
# nmcli con mod team0 +ipv4.dns "8.8.8.8"
# nmcli con mod team0 +ipv4.dns "8.8.4.4"
### IPv6の無効化
# nmcli con mod team0 ipv6.method ignore
# nmcli con mod team0 ipv4.may-fail no
物理インターフェースの割り当て
作成したチーミングインターフェースteam0
に、物理インターフェースを割り当てます。
# nmcli con add type ethernet slave-type team con-name team0-enp0s3 ifname enp0s3 master team0
# nmcli con add type ethernet slave-type team con-name team0-enp0s8 ifname enp0s8 master team0
設定有効化
作成したチーミングインターフェースteam0
の設定を有効化します。
# nmcli con up team0
team0
に割り当てた物理インターフェースとteam0
について、state
欄がUP
状態となっていることを確認します。
# ip a
(略)
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
link/ether 18:66:da:38:xx:xx brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
link/ether 18:66:da:38:xx:xx brd ff:ff:ff:ff:ff:ff
4: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 18:66:da:38:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute team0
valid_lft forever preferred_lft forever
inet6 fe80::3695:dbff:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
Catalyst側の設定
Config投入
特権モードから以下のコマンドを実行し、Gi0/19
とGi0/20
でLAGを組みます。
2行目では、経路分散方式を、デフォルトのsrc-mac
(送信元MACアドレス)からsrc-dst-ip
(送信元/宛先IPアドレス)に変更しています。
3行目から6行目では、Port-channel 1
インターフェースをポートVLAN(VLAN100)のswitchインターフェースとして定義します。
7行目から11行目では、GigabitEthernet0/19
インターフェースとGigabitEthernet0/20
インターフェースに対して、Port-channel 1
に所属させる設定と、ポートをリンクアップ状態にする設定をまとめて指定しています。
# configure terminal
(config)# port-channel load-balance src-dst-ip
(config)# interface Port-channel 1
(config-if)# switchport mode access
(config-if)# switchport access vlan 100
(config-if)# exit
(config)# interface range GigabitEthernet0/19, GigabitEthernet0/20
(config-if-range)# description ### Port-channel1 ###
(config-if-range)# channel-group 1 mode on
(config-if-range)# no shutdown
(config-if-range)# end
# write memory
Building configuration...
[OK]
設定結果の確認
以下のコマンドの実行し、LAGの状態を確認します。LAGインターフェースのPo1
がSU
と表示されていれば、該当インターフェースは通信できる状態になっています。また、Po1
に割り当てた物理インターフェースGi0/19
とGi0/20
のP
は、それぞれLAGインターフェースに割り当てられている状態であることを示します。
#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 f - failed to allocate aggregator
M - not in use, minimum links not met
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 1
Number of aggregators: 1
Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------------------------
1 Po1(SU) - Gi0/19(P) Gi0/20(P)