CentOS 7.3 で nmcli でボンディング、ブリッジの設定をする

Pocket

どうも久しぶりです。
インフラエンジニアの野口です。
最近電話にグローバル化の波が押し寄せてきています。Hello!

そういえばつい先日 2/22 に OpenStack Ocata がリリースされましたね。
近いうち DevStack で試してみたいです。

対象者

CentOS 7 系で NetworkManager のコマンドラインインターフェイス nmcli を使ってネットワークまわりの設定をする方法です。
主に KVM 仮想化で使用するブリッジ、物理インターフェイスの冗長化のボンディングの設定について記述しています。

オンプレおじさん、おにいさんたちに向けて書いております。
クラウドおじさんはブラウザでボタンポチー、あるいは API 叩くと勝手に VM が作られます。

注意

もしあなたがデータセンターに物理サーバーがすでに置いてあって、リモートで作業をする場合は細心の注意を払って設定してください。
下手をすると現地まで赴くことになります。
それよりも前に IPMI の設定して SOL できるようにしましょう。

ブリッジ、ボンディングの設定作業はネットワーク系の作業をやるので接続断を伴います。
SOL(Serial over LAN) や RS232C シリアルコンソール接続、あるいはサーバーに直接入出力デバイスを接続して作業していることが前提です。

nmtui とか手動編集してやってもいいですが、何台も同時にサーバー設定していると手が腱鞘炎になるので慣れてきたらコマンドライン推奨です。

ブリッジ

仮想化するなら必須。
こちらはボンディングしないときの設定。

nmcliで仮想ブリッジ作成 – めもめも

sudo nmcli con add type bridge autoconnect yes con-name bridge-br0 ifname br0
sudo nmcli con modify bridge-br0 ipv4.method manual ipv4.address "172.16.12.192/24" ipv4.gateway "172.16.12.1" ipv4.dns "172.16.12.5 8.8.8.8 8.8.4.4" ipv4.dns-search unicast.internal
# Add slave interface to bridge
sudo nmcli con add type bridge-slave autoconnect yes con-name bridge-slave-enp0s25 ifname enp0s25 master br0
sudo nmcli c down bridge-br0
sudo nmcli c down bridge-slave-enp0s25
sudo nmcli c up bridge-slave-enp0s25
sudo nmcli c up bridge-br0
# Delete Physical Port Setting
sudo nmcli c del enp0s25

ボンディング

あなたがベアメタルおじさんでブリッジを切る必要がない場合はこちら。

CentOS 7 の nmcli で bonding – Qiita

sudo nmcli c add type bond ifname bond0 con-name bond-bond0 mode active-backup
sudo nmcli c mod bond-bond0 ipv4.method manual ipv4.address "172.16.12.254/24" ipv4.gateway "172.16.12.1" ipv4.dns "172.16.12.5 8.8.8.8 8.8.4.4" ipv4.dns-search unicast.internal
sudo nmcli c add type bond-slave ifname enp0s25 con-name bond-slave-enp0s25 master bond0
sudo nmcli c add type bond-slave ifname enp2s0 con-name bond-slave-enp2s0 master bond0
sudo nmcli c down bond-slave-enp0s25
sudo nmcli c down bond-slave-enp2s0
sudo nmcli c down bond-bond0
sudo nmcli c up bond-slave-enp0s25
sudo nmcli c up bond-slave-enp2s0
sudo nmcli c up bond-bond0

詳細なログは以下のようになる。

[wataru@file2 ~]$ sudo nmcli c
名前     UUID                                  タイプ          デバイス 
enp2s0   e01b4a7f-33bc-4e97-80b2-97130ea548a8  802-3-ethernet  enp2s0   
enp0s25  b380cff2-ee3f-4fd5-acf9-d656036f2f31  802-3-ethernet  --       
[wataru@file2 ~]$ sudo nmcli c add type bond ifname bond0 con-name bond-bond0 mode active-backup
接続 'bond-bond0' (d0cbb770-88f5-4820-b62b-30e73fadd95b) が正常に追加されました。
[wataru@file2 ~]$ sudo nmcli c mod bond-bond0 ipv4.method manual ipv4.address "172.16.12.254/24" ipv4.gateway "172.16.12.1" ipv4.dns "172.16.12.5 8.8.8.8 8
.8.4.4" ipv4.dns-search unicast.internal
[wataru@file2 ~]$ sudo nmcli c add type bond-slave ifname enp0s25 con-name bond-slave-enp0s25 master bond0
接続 'bond-slave-enp0s25' (da1b4b5d-91ac-412e-9f73-d505a9b6296f) が正常に追加されました。
[wataru@file2 ~]$ sudo nmcli c add type bond-slave ifname enp2s0 con-name bond-slave-enp2s0 master bond0
接続 'bond-slave-enp2s0' (b6b30897-de01-4100-adfd-ecc8d36f2b92) が正常に追加されました。
[wataru@file2 ~]$ sudo nmcli c down bond-slave-enp0s25
接続 'bond-slave-enp0s25' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)
[wataru@file2 ~]$ sudo nmcli c down bond-slave-enp2s0
エラー: 'bond-slave-enp2s0' はアクティブな接続ではありません。
エラー: アクティブな接続がありません。
[wataru@file2 ~]$ sudo nmcli c down bond-bond0
接続 'bond-bond0' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)
[wataru@file2 ~]$ sudo nmcli c up bond-slave-enp0s25
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/5)
[wataru@file2 ~]$ sudo nmcli c up bond-slave-enp2s0
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/7)
[wataru@file2 ~]$ sudo nmcli c up bond-bond0
接続が正常にアクティベートされました (マスターはスレーブを待機しています) (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/8)
[wataru@file2 ~]$ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s25:  mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether ff:ff:ff:fc:fd:a4 brd ff:ff:ff:ff:ff:ff
3: enp2s0:  mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether ff:ff:ff:fc:fd:a4 brd ff:ff:ff:ff:ff:ff
6: bond0:  mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether ff:ff:ff:fc:fd:a4 brd ff:ff:ff:ff:ff:ff
    inet 172.16.12.254/24 brd 172.16.12.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::e734:a869:fff:17a/64 scope link 
       valid_lft forever preferred_lft forever
[root@file2 ~]# tailf /var/log/messages
Mar 10 16:37:59 file2 kernel: bond0: link status definitely up for interface enp0s25, 1000 Mbps full duplex
Mar 10 16:37:59 file2 kernel: bond0: making interface enp0s25 the new active one
Mar 10 16:37:59 file2 kernel: bond0: first active interface up!
Mar 10 16:37:59 file2 kernel: IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready
Mar 10 16:37:59 file2 kernel: e1000e: enp2s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 10 16:37:59 file2 NetworkManager[866]:   [1489131479.6467] device (enp2s0): link connected
Mar 10 16:37:59 file2 kernel: bond0: link status definitely up for interface enp2s0, 1000 Mbps full duplex
Mar 10 16:38:05 file2 NetworkManager[866]:   [1489131485.2484] policy: set 'bond-bond0' (bond0) as default for IPv6 routing and DNS
Mar 10 16:38:05 file2 su: (to wataru) root on ttyS0
Mar 10 16:39:01 file2 chronyd[837]: Selected source 133.243.238.244
Mar 10 16:40:49 file2 kernel: e1000e: enp2s0 NIC Link is Down
Mar 10 16:40:49 file2 kernel: bond0: link status definitely down for interface enp2s0, disabling it
Mar 10 16:40:59 file2 kernel: e1000e: enp2s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 10 16:40:59 file2 NetworkManager[866]:   [1489131659.5058] device (enp2s0): link connected
Mar 10 16:40:59 file2 kernel: bond0: link status definitely up for interface enp2s0, 1000 Mbps full duplex
Mar 10 16:41:21 file2 kernel: e1000e: enp2s0 NIC Link is Down
Mar 10 16:41:21 file2 kernel: bond0: link status definitely down for interface enp2s0, disabling it
Mar 10 16:41:31 file2 kernel: e1000e: enp2s0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 10 16:41:31 file2 NetworkManager[866]:   [1489131691.1847] device (enp2s0): link connected
Mar 10 16:41:31 file2 kernel: bond0: link status definitely up for interface enp2s0, 1000 Mbps full duplex
Mar 10 16:41:39 file2 kernel: e1000e: enp0s25 NIC Link is Down
Mar 10 16:41:39 file2 kernel: bond0: link status definitely down for interface enp0s25, disabling it
Mar 10 16:41:39 file2 kernel: bond0: making interface enp2s0 the new active one
Mar 10 16:41:53 file2 NetworkManager[866]:   [1489131713.2214] device (enp0s25): link connected
Mar 10 16:41:53 file2 kernel: e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Mar 10 16:41:53 file2 kernel: bond0: link status definitely up for interface enp0s25, 1000 Mbps full duplex

ボンディング + ブリッジ

データセンターにハウジング、あるいは自分のところで遠くにデータセンター持っている人で、
一回サーバー突っ込んだらなかなかデータセンターには足を運ばない人には必須。

ボンディングで NIC が片方死んでも大丈夫にし、ブリッジで仮想マシンもバシバシ立てますという方向け。

RHEL7/CentOS7のnmcliコマンドでTeamデバイス/Bondingデバイス/VLAN/ブリッジを組み合わせる方法 – めもめも

まずブリッジインターフェイス br0 を作成する。

sudo nmcli c add type bridge ifname br0 con-name bridge-br0
sudo nmcli c mod bridge-br0 bridge.stp no
sudo nmcli c mod bridge-br0 ipv4.method manual ipv4.address "172.16.12.102/24" ipv4.gateway "172.16.12.1" ipv4.dns "172.16.12.5 8.8.8.8 8.8.4.4" ipv4.dns-search unicast.internal
sudo nmcli c down bridge-br0
sudo nmcli c up bridge-br0

次にボンディングインターフェイス bond0 を作成する。

sudo nmcli c add type bond ifname bond0 con-name bond-bond0 mode active-backup
sudo nmcli c mod bond-bond0 connection.master br0 connection.slave-type bridge
sudo nmcli c add type bond-slave ifname enp0s25 con-name bond-slave-enp0s25 master bond0
sudo nmcli c add type bond-slave ifname enp6s0 con-name bond-slave-enp6s0 master bond0
sudo nmcli c down bond-slave-enp0s25
sudo nmcli c down bond-slave-enp6s0
sudo nmcli c down bond-bond0
sudo nmcli c up bond-slave-enp0s25
sudo nmcli c up bond-slave-enp6s0
sudo nmcli c up bond-bond0

最後に物理インターフェスを削除する。
これやらないとインターフェイスが fail してもフェイルオーバーしなくて VM に通信ができなくなる。

sudo nmcli c del enp0s25
sudo nmcli c del enp6s0

それではよい週末を。

投稿者紹介

Wataru Noguchi
* Bio: Software Engineer, Network and Server Engineer
* Certification:
IPA: FE, AP, Network Specialist
Cisco: CCNA R&S, CCNP R&S
LPI: LPIC Level1, Level2, LPIC-3 Specialty LPI-304 Virtualization &High Availability

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください