はじめに
Ubuntu でネットワークボンディングを試してみたメモ
前提
ボンディングとチーミングがあり、以下の認識。
- シンプルな冗長化や負荷分散 → ボンディング (bonding) 推奨
- 動的で柔軟な管理や高度な制御 → チーミング (teaming) 推奨
ここでは、ボンディングを行います。
ボンディングにも種類があり、以下の認識。
モード | 名称 | 対向スイッチの設定 |
---|---|---|
balance-rr | ラウンドロビン方式 (モード0) | 必要 |
active-backup | アクティブ・バックアップ (モード1) | 不要 |
balance-xor | XORバランス (モード2) | 必要 |
802.3ad | LACP (モード4、推奨) | 必要 |
balance-tlb | トランスミッションロードバランシング (モード5) | 不要 |
balance-alb | アダプティブロードバランシング (モード6) | 不要 |
ここでは、balance-albによるボンディングを行います。
また、障害の検知方法に種類があり、以下の認識。
- MII (Media Independent Interface) モニタリング → シンプルで物理リンクの状態を直接監視
- ARP (Address Resolution Protocol) モニタリング → スイッチ障害やルーティングの問題も検知可能
ここでは、MIIモニタリングを行います。
MII (Media Independent Interface) モニタリングは、物理リンクの状態(リンクアップ/ダウン)をカーネルレベルで直接監視します。インターフェースのリンク状態をポーリング(定期的にチェック)します。
設定方法
netplanによる設定を行います。
- ネットワークデバイスは、
ens18
、ens19
- 設定するIPアドレスは
192.168.1.100
、GWは192.168.1.1
、DNSは8.8.8.8, 1.1.1.1
/etc/netplan/50-cloud-init.yaml
を以下に修正します。
network:
version: 2
renderer: networkd
ethernets:
ens18:
dhcp4: no
ens19:
dhcp4: no
bonds:
bond0:
interfaces:
- ens18
- ens19
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
parameters:
mode: balance-alb
mii-monitor-interval: 100
- mode: balance-alb: モード6(アダプティブロードバランシング)
- mii-monitor-interval: リンク状態の監視間隔(100ミリ秒)
設定を反映します。
$ sudo netplan apply
確認方法
$ ip a show bond0
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global bond0
valid_lft forever preferred_lft forever
$
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v6.8.0-51-generic
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: ens18
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: ens18
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: **:**:**:**:**:**
Slave queue ID: 0
Slave Interface: ens19
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: **:**:**:**:**:**
Slave queue ID: 0
VMなどで設定を行うと、リンク速度が検出されず、以下のエラーがジャーナルに出力される。
Jan 12 09:57:48 hoge kernel: bond0: (slave ens18): failed to get link speed/duplex
この場合、ethtoolでリンク速度を固定で与えてやると出力されなくなる。
$ sudo ethtool -s ens18 speed 1000 duplex full autoneg off
$ sudo ethtool -s ens19 speed 1000 duplex full autoneg off
障害を起こしてみる
片側の切断
ens19
を切断してみる
Jan 12 10:00:01 hoge systemd-networkd[3949]: ens19: Lost carrier
Jan 12 10:00:01 hoge kernel: bond0: (slave ens19): link status definitely down, disabling slave
Jan 12 10:00:01 hoge kernel: bond0: (slave ens18): making interface the new active one
Jan 12 10:00:01 hoge kernel: virtio_net virtio1 ens18: entered promiscuous mode
Jan 12 10:00:11 hoge kernel: virtio_net virtio1 ens18: left promiscuous mode
ens19
を再接続してみる
Jan 12 10:01:47 hoge systemd-networkd[3949]: ens19: Gained carrier
Jan 12 10:01:47 hoge kernel: bond0: (slave ens19): link status definitely up, 1000 Mbps full duplex
ens18
を切断してみる
Jan 12 10:02:51 hoge systemd-networkd[3949]: ens18: Lost carrier
Jan 12 10:02:51 hoge kernel: bond0: (slave ens18): link status definitely down, disabling slave
Jan 12 10:02:51 hoge kernel: bond0: (slave ens19): making interface the new active one
Jan 12 10:02:51 hoge kernel: virtio_net virtio3 ens19: entered promiscuous mode
Jan 12 10:03:02 hoge kernel: virtio_net virtio3 ens19: left promiscuous mode
ens18
を再接続してみる
Jan 12 10:03:30 hoge systemd-networkd[3949]: ens18: Gained carrier
Jan 12 10:03:31 hoge kernel: bond0: (slave ens18): link status definitely up, 1000 Mbps full duplex
両側の切断
ens18
と ens19
の両方を切断してみる
Jan 12 10:06:26 hoge systemd-networkd[3949]: ens19: Lost carrier
Jan 12 10:06:26 hoge kernel: bond0: (slave ens19): link status definitely down, disabling slave
Jan 12 10:06:26 hoge kernel: bond0: now running without any active interface!
Jan 12 10:06:26 hoge systemd-networkd[3949]: bond0: Lost carrier
Jan 12 10:06:26 hoge systemd-timesyncd[527]: No network connectivity, watching for changes.
ens18
と ens19
の両方を再接続してみる
Jan 12 10:06:49 hoge systemd-networkd[3949]: ens18: Gained carrier
Jan 12 10:06:49 hoge kernel: bond0: (slave ens18): link status definitely up, 1000 Mbps full duplex
Jan 12 10:06:49 hoge kernel: bond0: (slave ens18): making interface the new active one
Jan 12 10:06:49 hoge kernel: virtio_net virtio1 ens18: entered promiscuous mode
Jan 12 10:06:49 hoge kernel: bond0: active interface up!
Jan 12 10:06:49 hoge systemd-networkd[3949]: bond0: Gained carrier
Jan 12 10:06:52 hoge systemd-networkd[3949]: ens19: Gained carrier
Jan 12 10:06:52 hoge kernel: bond0: (slave ens19): link status definitely up, 1000 Mbps full duplex
Jan 12 10:06:59 hoge kernel: virtio_net virtio1 ens18: left promiscuous mode
さいごに
かんたんでしたね