Cumulus Linux MLAG と vsphere vds の LACP 接続検証 2016.01.07
検証の目的 Cumulus Linux でリンクアグリゲーションを構成する場合 その形成方法として LACP を使用する 比較的簡易な仕様のスタティックリンクアグリゲーションや その他のプロトコル ( たとえば Cisco 社の PAgP 等 ) は 現在のバージョンでは使用できない そのため 主要な製品のリンクアグリゲーションとの相互接続性をあらかじめ確認しておく
検証機材 ここでは 対向機器として Quanta サーバーにインストールした vsphere を使用して LACP で Cumulus Linux の MLAG に接続する検証を行う 2 x ベアメタルスイッチ : QuantaMesh T1048-LB9-BMS-F(PowerPC) 1 2 x ネットワーク OS: Cumulus Linux 2.5.4 2 1 1000Base-T ポートを使用 2 検証時点の最新にアップデート済み /etc/apt/sources.list deb http://repo.cumulusnetworks.com CumulusLinux-2.5 main addons updates deb http://repo.cumulusnetworks.com CumulusLinux-2.5 security-updates 2 x サーバーコンピューター : STRATOS S210-X12RS(x86) 3 2 x 拡張 NIC: HHHL 1Gb RJ45 4 port Intel i350-t4 Intel-I350 PCI-E X 4 Gen 2 I350T4G1P20 2 x ハイパーバイザー : vsphere ESXi 6.0 Enterprise Plus 1 x 仮想化管理サーバー : vcenter Server 6.0 Standard 3 拡張 NIC を使用 1 x マネジメントスイッチ : QuantaMesh T1048-LY4B-F(PowerPC) 1 x ネットワーク OS: QuantaOS 1.4.06.03
検証方法 Cumulus Linux で LACP の MLAG を構成する vsphere の分散スイッチで LACP を構成する Cumulus Linux の MLAG ピアリンク MLAG ポート MLAG バックアップリンク および vsphere の分散スイッチの LAG ポートがリンクアップしていること および MLAG トポロジーが形成されていることを確認する 一方の vsphere 上の仮想マシンから他方の vsphere 上の仮想マシンに Ping が通ることを確認する MLAG ポート 1 のリンク ( 送信元側 ) を切断し Ping の実行結果の統計情報を確認する MLAG ポート 1 のリンク ( 送信元側 ) を復旧し Ping の実行結果の統計情報を確認する MLAG ポート 2 のリンク ( 宛先側 ) を切断し Ping の実行結果の統計情報を確認する MLAG ポート 2 のリンク ( 宛先側 ) を復旧し Ping の実行結果の統計情報を確認する MLAG スイッチ 1 を停止し Ping の実行結果の統計情報を確認する MLAG スイッチ 1 を起動し Ping の実行結果の統計情報を確認する MLAG ピアリンクを切断 ( 全断 ) し Ping の実行結果の統計情報を確認する MLAG セカンダリースイッチの MLAG ポートがシャットダウンされることを確認する MLAG ピアリンクを復旧し Ping の実行結果の統計情報を確認する
ネットワーク構成 VM1:172.16.0.1/24 VLAN1092 VLAN3030 VLAN3030 / VLAN4094 MLAG Peer-link MLAG Backup-link MLAG Port LAG Port vnic3 ESX1 vnic5 0/7 Mgmt SW 0/9 VM1 Ping VM2 swp2 swp4 eth0 Cumulus1 MLAG Primary swp47 swp48 LACP(MLAG ID1) swp47 LACP swp48 swp2 Cumulus2 MLAG Secondary swp4 eth0 dvportgroup1 lag0 dvswitch1: vmk3 lag1 dvportgroup1 lag2 dvswitch1: vmk3 lag3 LACP(MLAG ID2) vnic3 vnic5 vnic3 vnic5 ESX2 br3030 vnic3 vnic5 bond1.4094 bond1.3030 bond1 bond2 bond3 VM2:172.16.0.10/24(Flow1) 172.16.0.20/24(Flow2) swp47 swp48 swp2 swp4
Cumulus1 CUMULUS LINUX の設定 (1) $sudo vi /etc/network/interfaces!-- 物理インターフェースの設定 auto eth0 iface eth0 address 10.12.92.141/24 gateway 10.12.92.254 auto swp2 iface swp2 auto swp4 iface swp4 auto swp47 iface swp47 auto swp48 iface swp48!-- ブリッジインターフェースの設定 auto br3030 iface br3030 bridge-ports bond1.3030 bond2 bond3!-- ボンディングインターフェースの設定 auto bond1 iface bond1 bond-slaves swp47 swp48 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4!-- MLAG ピアリンクの設定 auto bond1.4094 iface bond1.4094 address 169.254.255.253/30 clagd-enable yes clagd-priority 4096 clagd-peer-ip 169.254.255.254 clagd-backup-ip 10.12.92.142 clagd-sys-mac 44:38:39:ff:00:00!-- MLAG ポートの設定 auto bond2 iface bond2 bond-slaves swp2 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4 clag-id 1 auto bond3 iface bond3 bond-slaves swp4 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4 clag-id 2
Cumulus2 CUMULUS LINUX の設定 (2) $sudo vi /etc/network/interfaces!-- 物理インターフェースの設定 auto eth0 iface eth0 address 10.12.92.142/24 gateway 10.12.92.254 auto swp2 iface swp2 auto swp4 iface swp4 auto swp47 iface swp47 auto swp48 iface swp48!-- ブリッジインターフェースの設定 auto br3030 iface br3030 bridge-ports bond1.3030 bond2 bond3!-- ボンディングインターフェースの設定 auto bond1 iface bond1 bond-slaves swp47 swp48 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4!-- MLAG ピアリンクの設定 auto bond1.4094 iface bond1.4094 address 169.254.255.254/30 clagd-enable yes clagd-priority 9192 clagd-peer-ip 169.254.255.253 clagd-backup-ip 10.12.92.141 clagd-sys-mac 44:38:39:ff:00:00!-- MLAG ポートの設定 auto bond2 iface bond2 bond-slaves swp2 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4 clag-id 1 auto bond3 iface bond3 bond-slaves swp4 bond-mode 802.3ad bond-miimon 100 bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4 clag-id 2
CUMULUS LINUX の設定の解説 bridge-ports bond1.3030 bond2 bond3 bond-slaves swp47 swp48 bond-mode 802.3ad ブリッジに bond1.3030 bond2 bond3 インターフェースを接続する swp47 と swp48 をボンディングする リンクアグリゲーションに LACP を使用する bond-miimon 100 リンク状態の確認間隔を設定する ( ミリ秒 ) bond-use-carrier 1 bond-lacp-rate 1 bond-min-links 1 bond-xmit-hash-policy layer3+4 clagd-priority 4096 clagd-peer-ip 169.254.255.254 clagd-backup-ip 10.12.92.142 clagd-sys-mac 44:38:39:ff:00:00 リンクの検出方法を設定する LACP パケットの送信間隔を設定する (0 の場合は 1 秒の Fast モード 1 の場合は 30 秒の Slow モード ) リンクアグリゲーションがリンクアップするために必要な最小アクティブポート数を設定する リンクアグリゲーションのロードバランスアルゴリズムを L3/4 ヘッダーのハッシュ値に設定する MLAG スイッチのプライオリティを設定する ( プライオリティの小さいスイッチが MLAG プライマリースイッチとしてコントロールプレーンの制御権を得る ) 対向 MLAG スイッチのピアリンクインターフェースの IP アドレスを設定する 対向 MLAG スイッチのバックアップリンクインターフェースの IP アドレスを設定する ( ポート番号の既定値は UDP5342) MLAG スイッチのシステム MAC アドレスを設定する (LACP と STP で使用される )( 対向 MLAG スイッチと同じ値 ) clag-id 1 MLAG ID を設定する (MLAG ポート毎に一意でなければならない )
VSPHERE の設定 (1) 1 リンク集約グループの名前 lag 2 リンク集約グループのポート数 4 3 リンク集約グループのモード 有効 Active LACP 4 リンク集約グループのロードバランシングモード ソースとターゲットIPアドレスおよびTCP/UDPポート
VSPHERE の設定 (2) 1 分散スイッチのバージョン 6.0.0 2 分散スイッチの名前 dvswitch1 3 分散スイッチの接続タイプ VMkernel 4 分散スイッチのアップリンク lag0, lag1, lag2, lag3 5 分散ポートグループの名前 dvportgroup1 6 VMkernel(ESX1) のIPアドレス 10.0.0.188 7 VMkernel(ESX1) のサブネットマスク 255.255.255.192 8 VMkernel(ESX2) のIPアドレス 10.0.0.189 9 VMkernel(ESX2) のサブネットマスク 255.255.255.192 10 リンク集約グループ lag0のアップリンク ESX1 - vmnic3 11 リンク集約グループ lag1のアップリンク ESX1 - vmnic5 12 リンク集約グループ lag2のアップリンク ESX2 - vmnic3 13 リンク集約グループ lag3のアップリンク ESX2 - vmnic5
正常系試験 ( リンク ) Cumulus1 cumulus@cumulus1$ clagctl The peer is alive Our Priority, ID, and Role: 4096 2c:60:0c:xx:xx:xx primary Peer Priority, ID, and Role: 9192 2c:60:0c:yy:yy:yy secondary Peer Interface and IP: bond1.4094 169.254.255.254 Backup IP: 10.12.92.142 (active) System MAC: 44:38:39:ff:00:00 CLAG Interfaces Our Interface Peer Interface CLAG Id Conflicts Proto-Down Reason ---------------- ---------------- ------- -------------------- ----------------- bond2 bond2 1 - - bond3 bond3 2 - - cumulus@cumulus1$ Cumulus2 cumulus@cumulus2$ clagctl The peer is alive Peer Priority, ID, and Role: 4096 2c:60:0c:xx:xx:xx primary Our Priority, ID, and Role: 9192 2c:60:0c:yy:yy:yy secondary Peer Interface and IP: bond1.4094 169.254.255.253 Backup IP: 10.12.92.141 (active) System MAC: 44:38:39:ff:00:00 CLAG Interfaces Our Interface Peer Interface CLAG Id Conflicts Proto-Down Reason ---------------- ---------------- ------- -------------------- ----------------- bond2 bond2 1 - - bond3 bond3 2 - - cumulus@cumulus2$ 結果 : MLAG バックアップリンクを含む MLAG トポロジーは正常に形成されている
正常系試験 (PING) Flow1 $ping c 10 i 0.2 s 1392 172.16.0.10 PING 172.16.0.10 (172.16.0.10) 1392(1420) bytes of data. 1400 bytes from 172.16.0.10: icmp_seq=1 ttl=64 time=0.472 ms 1400 bytes from 172.16.0.10: icmp_seq=2 ttl=64 time=0.531 ms 1400 bytes from 172.16.0.10: icmp_seq=3 ttl=64 time=0.520 ms 1400 bytes from 172.16.0.10: icmp_seq=4 ttl=64 time=0.552 ms 1400 bytes from 172.16.0.10: icmp_seq=5 ttl=64 time=0.601 ms 1400 bytes from 172.16.0.10: icmp_seq=6 ttl=64 time=0.594 ms 1400 bytes from 172.16.0.10: icmp_seq=7 ttl=64 time=0.666 ms 1400 bytes from 172.16.0.10: icmp_seq=8 ttl=64 time=0.531 ms 1400 bytes from 172.16.0.10: icmp_seq=9 ttl=64 time=0.534 ms 1400 bytes from 172.16.0.10: icmp_seq=10 ttl=64 time=0.605 ms --- 172.16.0.10 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1799ms rtt min/avg/max/mdev = 0.472/0.560/0.666/0.058 ms Flow2 $ping c 10 i 0.2 s 1392 172.16.0.20 PING 172.16.0.20 (172.16.0.20) 1392(1420) bytes of data. 1400 bytes from 172.16.0.20: icmp_seq=1 ttl=64 time=0.556 ms 1400 bytes from 172.16.0.20: icmp_seq=2 ttl=64 time=0.589 ms 1400 bytes from 172.16.0.20: icmp_seq=3 ttl=64 time=0.559 ms 1400 bytes from 172.16.0.20: icmp_seq=4 ttl=64 time=0.543 ms 1400 bytes from 172.16.0.20: icmp_seq=5 ttl=64 time=0.554 ms 1400 bytes from 172.16.0.20: icmp_seq=6 ttl=64 time=0.655 ms 1400 bytes from 172.16.0.20: icmp_seq=7 ttl=64 time=0.538 ms 1400 bytes from 172.16.0.20: icmp_seq=8 ttl=64 time=0.581 ms 1400 bytes from 172.16.0.20: icmp_seq=9 ttl=64 time=0.451 ms 1400 bytes from 172.16.0.20: icmp_seq=10 ttl=64 time=0.540 ms --- 172.16.0.20 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1799ms rtt min/avg/max/mdev = 0.451/0.556/0.655/0.054 ms 結果 : 仮想マシン間には IP 接続性がある
異常系試験 (PING)(1) Flow1 $ping i 0.2 s 1392 172.16.0.10 PING 172.16.0.10 (172.16.0.10) 1392(1420) bytes of data. 1400 bytes from 172.16.0.10: icmp_seq=1 ttl=64 time=0.472 ms 1400 bytes from 172.16.0.10: icmp_seq=2 ttl=64 time=0.531 ms 1400 bytes from 172.16.0.10: icmp_seq=3 ttl=64 time=0.520 ms... Flow2 $ping i 0.2 s 1392 172.16.0.20 PING 172.16.0.20 (172.16.0.20) 1392(1420) bytes of data. 1400 bytes from 172.16.0.20: icmp_seq=1 ttl=64 time=0.556 ms 1400 bytes from 172.16.0.20: icmp_seq=2 ttl=64 time=0.589 ms 1400 bytes from 172.16.0.20: icmp_seq=3 ttl=64 time=0.559 ms...
異常系試験 (PING)(2) MLAG リンク 1 障害 MLAG リンク 2 障害スイッチ筐体障害ピアリンク障害 Ping データサイズ : 1392 byte Ping 実行間隔 : 200msec 通信断時間 (Flow1/2 共通 ) 備考 MLAGリンク1 障害 MLAGリンク1 復旧 MLAGリンク2 障害 MLAGリンク2 復旧スイッチ筐体障害スイッチ筐体復旧ピアリンク障害 ( 全断 ) ピアリンク復旧 2 秒未満 1 秒未満 2 秒未満 1 秒未満 2 秒未満 3 秒未満なしなし 結果 : 障害または復旧時のサービスへの影響は小さいといえる
異常系試験 ( リンク )(1) Cumulus1 cumulus@cumulus1$ clagctl The peer is not alive Our Priority, ID, and Role: 4096 2c:60:0c:xx:xx:xx primary Peer Interface and IP: bond1.4094 169.254.255.254 Backup IP: 10.12.92.142 (active) System MAC: 44:38:39:ff:00:00 CLAG Interfaces Our Interface Peer Interface CLAG Id Conflicts Proto-Down Reason ---------------- ---------------- ------- -------------------- ----------------- bond2-1 - - bond3-2 - - cumulus@cumulus1$ ip link show bond2 136: bond2: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br3030 state UP mode DORMANT link/ether 2c:60:0c:xx:xx:aa brd ff:ff:ff:ff:ff:ff cumulus@cumulus1$ ip link show bond3 137: bond3: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br3030 state UP mode DORMANT link/ether 2c:60:0c:xx:xx:bb brd ff:ff:ff:ff:ff:ff cumulus@cumulus1$
異常系試験 ( リンク )(2) Cumulus2 cumulus@cumulus2$ clagctl The peer is not alive Our Priority, ID, and Role: 9192 2c:60:0c:yy:yy:yy secondary Peer Interface and IP: bond1.4094 169.254.255.253 Backup IP: 10.12.92.141 (active) System MAC: 44:38:39:ff:00:00 CLAG Interfaces Our Interface Peer Interface CLAG Id Conflicts Proto-Down Reason ---------------- ---------------- ------- -------------------- ----------------- bond2-1 - isl-down bond3-2 - isl-down cumulus@cumulus2$ ip link show bond2 194: bond2: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master br3030 state DOWN mode DORMANT link/ether 2c:60:0c:yy:yy:aa brd ff:ff:ff:ff:ff:ff cumulus@cumulus2$ ip link show bond3 195: bond3: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue master br3030 state DOWN mode DORMANT link/ether 2c:60:0c:yy:yy:bb brd ff:ff:ff:ff:ff:ff cumulus@cumulus2$ 結果 : MLAG ピアリンクが全断した場合 スプリットブレインを回避するために MLAG セカンダリースイッチの MLAG ポートが正常にシャットダウンされる
まとめ 分散スイッチの LACP と Cumulus の LACP の相互接続性は問題なし MLAG のフェイルオーバーおよびフェイルバック時のパケット転送については問題なし ( 最大で 3 秒程度の通信断 ) バックアップリンクを使用している場合 MLAG セカンダリースイッチのすべての MLAG ポートは正常にシャットダウンされるため スプリットブレインの問題を回避できる