CentOS Stream8でLACPを使ったリンクアグリゲーションを構成したので備忘録。
構成
以下の構成で、スイッチ(Cisco C1000)とCentOS Stream8(以降CentOSと呼ぶ)とでLACPによるネゴシエーションを使ったリンクアグリゲーション(以降LAGと呼ぶ)を実現。
CentOSのパラメーターなど
動的/静的 | 動的(LACP) |
制御フレーム(LACPDU)送信間隔 | 高速(1秒間隔) |
通したいパケットの種類 | 802.1QタグVLAN |
通したいタグVLANのID | 90 |
ボンディングインターフェースの名前 | bond0 |
vlan90インターフェースの名前 | bond0.90 |
vlan90インターフェースのIPアドレス | DHCP(自動取得) |
LACP制御フレームの送信間隔については高速だと1秒で低速だと30秒らしくて、5秒とかの微妙な値を設定できないのが少し気になる。5秒にしたい。
スイッチでLAG設定
スイッチ側で以下コンフィグを流す。
interface range GigabitEthernet1/0/21-22 channel-group 1 mode active switchport mode trunk switchport trunk allowed vlan 90 lacp rate fast no shutdown
この設定をすると、もともとスイッチ上にPort-channel1インターフェースが存在していなければ、自動的に作成される。
CentOSでLAG設定
bondingインターフェースを作成
nmcli con add type bond \ ifname bond0 \ con-name bond0 \ ipv4.method "disabled" \ ipv6.method "disabled" \ +bond.options "mode=802.3ad","lacp_rate=fast"
LAGに使用するNICを指定
nmcli con add type ethernet ifname enp3s0 master bond0 nmcli con add type ethernet ifname enp1s0 master bond0
これで、bond-slave-xxxというインターフェースが生成される。
作成したコネクションのアクティベート
nmcli con up bond0 nmcli con up bond-slave-enp1s0 nmcli con up bond-slave-enp3s0
vlan90インターフェースの作成
nmcli con add type vlan \ con-name bond0.90 \ ifname bond0.90 \ dev bond0 \ ipv4.method "auto" \ ipv6.method "disabled" \ id 90
作成したコネクションのアクティベート
nmcli con up bond0.90
CentOSで状態確認
動的に作成される/proc/net/bonding/bond0ファイルの内容を見ると、色々書いてある。
[hoge@CentOSStream8 work]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: xx:xx:xx:xx:xx:xx
Active Aggregator Info:
Aggregator ID: 2
Number of ports: 2
Actor Key: 9
Partner Key: 1
Partner Mac Address: xx:xx:xx:xx:xx:xx
Slave Interface: enp3s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: xx:xx:xx:xx:xx:xx
port key: 9
port priority: 255
port number: 2
port state: 63
details partner lacp pdu:
system priority: 32768
system mac address: xx:xx:xx:xx:xx:xx
oper key: 1
port priority: 32768
port number: 278
port state: 63
Slave Interface: enp1s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: 68:05:ca:71:cf:52
port key: 9
port priority: 255
port number: 3
port state: 63
details partner lacp pdu:
system priority: 32768
system mac address: c8:84:a1:36:82:80
oper key: 1
port priority: 32768
port number: 279
port state: 63
[hoge@CentOSStream8 work]#
スイッチで状態確認
show etherchannel detailでいろいろ見れる。
C1000#show etherchannel detail
Channel-group listing:
----------------------
Group: 1
----------
Group state = L2
Ports: 2 Maxports = 16
Port-channels: 1 Max Port-channels = 16
Protocol: LACP
Minimum Links: 0
Ports in the group:
-------------------
Port: Gi1/0/21
------------
Port state = Up Mstr Assoc In-Bndl
Channel group = 1 Mode = Active Gcchange = -
Port-channel = Po1 GC = - Pseudo port-channel = Po1
Port index = 0 Load = 0x00 Protocol = LACP
Flags: S - Device is sending Slow LACPDUs F - Device is sending fast LACPDUs.
A - Device is in active mode. P - Device is in passive mode.
Local information:
LACP port Admin Oper Port Port
Port Flags State Priority Key Key Number State
Gi1/0/21 FA bndl 32768 0x1 0x1 0x116 0x3F
Partner's information:
LACP port Admin Oper Port Port
Port Flags Priority Dev ID Age key Key Number State
Gi1/0/21 FA 255 xxxx.xxxx.xxxx 0s 0x0 0x9 0x2 0x3F
Age of the port in the current state: 0d:01h:04m:19s
Port: Gi1/0/22
------------
Port state = Up Mstr Assoc In-Bndl
Channel group = 1 Mode = Active Gcchange = -
Port-channel = Po1 GC = - Pseudo port-channel = Po1
Port index = 0 Load = 0x00 Protocol = LACP
Flags: S - Device is sending Slow LACPDUs F - Device is sending fast LACPDUs.
A - Device is in active mode. P - Device is in passive mode.
Local information:
LACP port Admin Oper Port Port
Port Flags State Priority Key Key Number State
Gi1/0/22 FA bndl 32768 0x1 0x1 0x117 0x3F
Partner's information:
LACP port Admin Oper Port Port
Port Flags Priority Dev ID Age key Key Number State
Gi1/0/22 FA 255 xxxx.xxxx.xxxx 0s 0x0 0x9 0x3 0x3F
Age of the port in the current state: 0d:00h:58m:50s
Port-channels in the group:
---------------------------
Port-channel: Po1 (Primary Aggregator)
------------
Age of the Port-channel = 0d:05h:46m:28s
Logical slot/port = 9/1 Number of ports = 2
HotStandBy port = null
Port state = Port-channel Ag-Inuse
Protocol = LACP
Port security = Disabled
Load share deferral = Disabled
Ports in the Port-channel:
Index Load Port EC state No of bits
------+------+------+------------------+-----------
0 00 Gi1/0/21 Active 0
0 00 Gi1/0/22 Active 0
Time since last port bundled: 0d:00h:58m:50s Gi1/0/22
Time since last port Un-bundled: 0d:00h:59m:54s Gi1/0/22
Group: 6
----------
Group state = L2
Ports: 3 Maxports = 16
Port-channels: 1 Max Port-channels = 16
Protocol: LACP
Minimum Links: 0
C1000#
ここまで実施すればOK。ただ検証環境では、vlanインターフェースのアクティベートからDHCPでIPアドレスを自動取得するまでに数秒かかった。無反応でも数秒は待機すると幸せになれそう。
削除
やりなおしたくなったら以下手順で、作成したインターフェースを削除する。
nmcli con del bond0.90
nmcli con del bond0
nmcli con del bond-slave-enp1s0
nmcli con del bond-slave-enp3s0
以上、LinuxでLACPを使うのもなかなかおもしろいと思った。タグVLANの使えるスイッチがある人は、LinuxでタグVLANを使って色々なネットワークに足を出してみるのも一興かと。