26
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS 7の新機能、Team Driverを試す

Last updated at Posted at 2014-08-13

Team Driverとは

Team DriverはCentOS 7で追加された、もう1つのbonding実装である。

CentOS 7のbondingは http://qiita.com/yteraoka/items/e661c2a8c6e7617e64f9 のコメントに書いた通りで、今のところなんか微妙な感じなので(そのうち直るだろうが)、Team Driverが使えそうかの確認を行った、というのが今回の趣旨である。

本番環境で使用したわけではないが、機能としては特に問題はなさそうであることは確認できたため、以下に構築手順を記す。

Team Driverの設定

前提

通常はOSインストール時に自動的にインストールされているはずだが、もしインストールされていなければteamdをインストールする必要がある。

# yum install teamd

こちらも上記bondingの記事と同様に、以下の操作を行う。

  • teamingされていない1枚のNICでネットワークに接続された状態から、オンラインで2枚のNICをteamingして同じIPアドレスでネットワークに接続された状態に変更する
  • 片方のNICを落としても接続できていることを確認する
  • オンラインでteamingを解除し、1枚のNICでネットワークに接続された状態に戻す

オンラインで変更できることを確認するため、SSHでログインした状態で作業を実施した。

NetworkManagerサービスは起動した状態にしておく。

今回の作業ではVirtualBox 4.3.12上に立てた仮想マシンを利用している。
NICの名前は1枚目(元々接続されている方)が「enp0s3」、2枚目が「enp0s8」となる。
「enp0s3」には固定IPアドレスが振られており、teaming後も同じIPアドレスを使用する。初期状態は以下の通り。

# nmcli c
名前    UUID                                  タイプ          デバイス
enp0s8  efb66434-a502-4607-878b-17aaf12954c8  802-3-ethernet  --
enp0s3  3e375a6d-d3d2-4864-9506-ae72ab729597  802-3-ethernet  enp0s3
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:72:df:af brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.34/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe72:dfaf/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:f0:e6:9d brd ff:ff:ff:ff:ff:ff

teamingの構築

まずTeam Masterデバイスを追加する。
名前は「team0」とした。
これ自体がupしてもぶら下がるTeam Slaveが上がるまではネットワークに接続に行けないので、ここでは"autoconnect no"を付けて自動接続設定を切らなくても問題なさそう。

ここでconfigで指定したものがbondingのmode 1、Active-Backup相当とするための設定である。
ただし"hwaddr_policy": "by_active"に関しては、VirtualBoxの制限によるものであり、通常の環境では不要である。

# nmcli connection add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup", "hwaddr_policy": "by_active"}}'

2014-08-15追記: 修正前、configの値を'{"runner": {"name": "activebackup", "hwaddr_policy": "by_active"}, "link_watch": {"name": "ethtool"}}'としていたが、"link_watch": {"name": "ethtool"}はデフォルト値であることが判明したため削ることとした。


IPアドレスをDHCPで取得するのではなく、現在のenp0s3と同じ設定の固定に変更する。

# nmcli connection modify team0 ipv4.method manual ipv4.addresses "10.0.2.34/24 10.0.2.1" ipv4.dns 8.8.8.8

enp0s3とenp0s8をteam0のTeam Slaveとしてぶら下げる。
その際、enp0s8の方には自動起動させない設定である"autoconnect no"がないと追加した瞬間に立ち上がり、結果team0が接続されるので"autoconnect no"を付けておく。
enp0s3の方にこれが要らないのは、現在使用されているNICだからであると考えられる。
この辺りはNetworkManagerの作用だろう。

Team Slaveは特に接続名を指定しなかったので、名称「team-slave-enp0s3」「team-slave-enp0s8」で作られる。
指定したければcon-nameで指定することもできる。

# nmcli connection add type team-slave ifname enp0s3 master team0
# nmcli connection add type team-slave autoconnect no ifname enp0s8 master team0

元々の接続であるenp0s3が今後自動起動しないようにする。

# nmcli connection modify enp0s3 connection.autoconnect no

ネットワークの再起動を行う。

# systemctl restart network

enp0s8の方は自動起動する設定になっていないので、今はまだTeam Slaveはenp0s3の方だけupしている状態である。

enp0s8の方を自動起動する設定に変更する。
enp0s8は現在使用されていないNICなので、自動起動に変更するとすぐにupする。

# nmcli connection modify team-slave-enp0s8 connection.autoconnect yes

これでteamingされた状態に移行した。
内容を確認すると以下となる。

# nmcli c
名前               UUID                                  タイプ          デバイス
team0              62bf13e5-8a0e-4608-b327-e16c9c975e9b  team            team0  
enp0s8             f6fc5697-a7ea-430b-8b99-1f2921dad4a6  802-3-ethernet  --     
enp0s3             57011925-aa21-49fd-97a8-86c0702be02e  802-3-ethernet  --     
team-slave-enp0s8  59193dc9-d907-4dc4-85b0-73cbb77d6d3b  802-3-ethernet  enp0s8 
team-slave-enp0s3  49e3a052-a210-474b-90d0-da67b6bd00cf  802-3-ethernet  enp0s3 

(上記の通りVirtualBoxの制限で"hwaddr_policy": "by_active"としたので、activebackupなのにenp0s3とenp0s8のMACアドレスが違うものになる)

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 08:00:27:cb:8e:fb brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 08:00:27:dd:09:c6 brd ff:ff:ff:ff:ff:ff
5: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 08:00:27:cb:8e:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.34/24 brd 10.0.2.255 scope global team0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fecb:8efb/64 scope link
       valid_lft forever preferred_lft forever
# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: enp0s3

片方のNICを落とす

teamdctl team0 stateでactive portになっているenp0s3を落としてみる。

# nmcli connection down team-slave-enp0s3

状態は以下のように変化する。

# nmcli c
名前               UUID                                  タイプ          デバイス
team0              62bf13e5-8a0e-4608-b327-e16c9c975e9b  team            team0  
enp0s8             f6fc5697-a7ea-430b-8b99-1f2921dad4a6  802-3-ethernet  --     
enp0s3             57011925-aa21-49fd-97a8-86c0702be02e  802-3-ethernet  --     
team-slave-enp0s8  59193dc9-d907-4dc4-85b0-73cbb77d6d3b  802-3-ethernet  enp0s8 
team-slave-enp0s3  49e3a052-a210-474b-90d0-da67b6bd00cf  802-3-ethernet  --     
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:cb:8e:fb brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP qlen 1000
    link/ether 08:00:27:dd:09:c6 brd ff:ff:ff:ff:ff:ff
5: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 08:00:27:dd:09:c6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.34/24 brd 10.0.2.255 scope global team0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fecb:8efb/64 scope link
       valid_lft forever preferred_lft forever
# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: enp0s8

裏でpingを飛ばしていたが、途切れることはなかった。

落とした側をもう一度上げ直す。

# nmcli connection up team-slave-enp0s3

teamdctl team0 stateで見ると、両方上がっているがactiveなのはenp0s8の側のまま、となる。

# teamdctl team0 state
setup:
  runner: activebackup
ports:
  enp0s3
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  enp0s8
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
runner:
  active port: enp0s8

teamingの解除

最後に、teamingを解除して最初の状態に戻す。

Teamの自動起動をしないようにし、元の接続の自動起動を行うようにする。

# nmcli connection modify team0 connection.autoconnect no
# nmcli connection modify team-slave-enp0s3 connection.autoconnect no
# nmcli connection modify team-slave-enp0s8 connection.autoconnect no
# nmcli connection modify enp0s3 connection.autoconnect yes

ネットワークの再起動を行う。

# systemctl restart network

使い終わったteamingの設定を削除する。

# nmcli connection delete team-slave-enp0s3
# nmcli connection delete team-slave-enp0s8
# nmcli connection delete team0

これで元通り。

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:cb:8e:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.34/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fecb:8efb/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:dd:09:c6 brd ff:ff:ff:ff:ff:ff
# nmcli c
名前    UUID                                  タイプ          デバイス
enp0s8  f6fc5697-a7ea-430b-8b99-1f2921dad4a6  802-3-ethernet  --
enp0s3  57011925-aa21-49fd-97a8-86c0702be02e  802-3-ethernet  enp0s3

参考文献

26
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?