GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS/RHEL 7 および 8 でネットワーク インターフェイス チーミングを構成する方法

ネットワーク インターフェイス チーミングは、CentOS/RHEL 7 から、ネットワーク ボンディングのより拡張性とスケーラビリティに優れた代替手段として導入されました。この投稿では、CentOS/RHEL 7/8 でネットワーク チーミングを構成する方法について説明します。

提供されている例は、NetworkManager を使用する 2 つのネットワーク インターフェイスを備えた Oracle Linux 8.2 システム (Oracle VirtualBox 6.1 ゲスト仮想マシン) に基づいています。

1.オリジナルのプレチーム構成

以下は、元のチーム前のネットワーク構成を示しています:

# dnf list | grep team | grep anaconda
NetworkManager-team.x86_64        1:1.22.8-4.el8                 @anaconda
libteam.x86_64                    1.29-1.el8                     @anaconda
teamd.x86_64                      1.29-1.el8                     @anaconda
# lspci | grep -i eth
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:08.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
# nmcli dev
DEVICE  TYPE      STATE      CONNECTION
enp0s3  ethernet  connected  enp0s3
enp0s8  ethernet  connected  enp0s8
lo      loopback  unmanaged  --
# nmcli con
NAME    UUID                                  TYPE      DEVICE
enp0s3  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
enp0s8  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# ls -l /etc/sysconfig/network-scripts/*
-rw-r--r-- 1 root root 334 Aug 21 13:29 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r-- 1 root root 334 Aug 21 13:30 /etc/sysconfig/network-scripts/ifcfg-enp0s8
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
  1 MACADDR=[MAC_ADDR1]
  2 MTU=1500
  3 TYPE=Ethernet
  4 PROXY_METHOD=none
  5 BROWSER_ONLY=no
  6 BOOTPROTO=dhcp
  7 DEFROUTE=yes
  8 IPV4_FAILURE_FATAL=no
  9 IPV6INIT=yes
  10 IPV6_AUTOCONF=yes
  11 IPV6_DEFROUTE=yes
  12 IPV6_FAILURE_FATAL=no
  13 IPV6_ADDR_GEN_MODE=stable-privacy
  14 NAME="enp0s3"
  15 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  16 DEVICE=enp0s3
  17 ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
  1 MACADDR=[MAC_ADDR2]
  2 MTU=1500
  3 TYPE=Ethernet
  4 PROXY_METHOD=none
  5 BROWSER_ONLY=no
  6 BOOTPROTO=dhcp
  7 DEFROUTE=yes
  8 IPV4_FAILURE_FATAL=no
  9 IPV6INIT=yes
  10 IPV6_AUTOCONF=yes
  11 IPV6_DEFROUTE=yes
  12 IPV6_FAILURE_FATAL=no
  13 IPV6_ADDR_GEN_MODE=stable-privacy
  14 NAME="enp0s8"
  15 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  16 DEVICE=enp0s8
  17 ONBOOT=yes
# ip addr
...
2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether  brd ff:ff:ff:ff:ff:ff
    inet /24 brd  scope global dynamic noprefixroute enp0s3
       valid_lft 86059sec preferred_lft 86059sec
    inet6 fe80::ca99:46d3:1765:f02b/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: enp0s8:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether  brd ff:ff:ff:ff:ff:ff
    inet /24 brd  scope global dynamic noprefixroute enp0s8
       valid_lft 86121sec preferred_lft 86121sec
    inet6 fe80::36d0:6bd3:5152:83dc/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

2.既存のネットワーク接続を削除

次のように、既存の enp0s3 および enp0s8 接続を削除します。これらは、次の手順でチーム スレーブとして再作成されます。

# nmcli con show
NAME    UUID                                  TYPE      DEVICE
enp0s3  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
enp0s8  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# nmcli con del XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Connection 'enp0s3' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully deleted.
# nmcli con del XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Connection 'enp0s8' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully deleted.
# nmcli dev
DEVICE  TYPE      STATE         CONNECTION
enp0s3  ethernet  disconnected  --
enp0s8  ethernet  disconnected  --
lo      loopback  unmanaged     --
# ls -l /etc/sysconfig/network-scripts/
total 0
#

3.マスターチームのつながりを作る

マスター チーム接続を作成します。例:

# nmcli con add type team con-name team0 ifname team0 config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
Connection 'team0' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.

上記では、チームの実行モード (runner) は activebackup であり、チームのリンク モニター/ウォッチャー (link_watch) は ethtool です。 runner と link_watch の代替値には以下が含まれます:

  • ランナー :ロードバランス、ラウンドロビン、lacp、ブロードキャスト、ランダム。
  • link_watch :arp_ping、nsna_ping

NetworkManager は次のインターフェイス構成ファイルを作成します:

# cat /etc/sysconfig/network-scripts/ifcfg-team0
  1 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}, \"link_watch\": {\"name\": \"ethtool\"}}"
  2 PROXY_METHOD=none
  3 BROWSER_ONLY=no
  4 BOOTPROTO=dhcp
  5 DEFROUTE=yes
  6 IPV4_FAILURE_FATAL=no
  7 IPV6INIT=yes
  8 IPV6_AUTOCONF=yes
  9 IPV6_DEFROUTE=yes
 10 IPV6_FAILURE_FATAL=no
 11 IPV6_ADDR_GEN_MODE=stable-privacy
 12 NAME=team0
 13 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 14 DEVICE=team0
 15 ONBOOT=yes
 16 DEVICETYPE=Team
# nmcli con
NAME   UUID                                  TYPE  DEVICE
team0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  team  team0
# nmcli dev
DEVICE  TYPE      STATE                                  CONNECTION
team0   team      connecting (getting IP configuration)  team0
enp0s3  ethernet  disconnected                           --
enp0s8  ethernet  disconnected                           --
lo      loopback  unmanaged

4.必要に応じて静的 IP アドレスをチームに割り当てます

必要に応じて、静的 IP アドレス、ゲートウェイ、DNS などをチーム接続に割り当てます。例:

# nmcli con mod team0 ipv4.addresses [IP3]/24
# nmcli con mod team0 ipv4.gateway [IP4]
# nmcli con mod team0 ipv4.dns [IP5]
# nmcli con mod team0 ipv4.method manual
# nmcli con mod team0 connection.autoconnect yes

NetworkManager は、次のチーム インターフェイス構成ファイルを変更します:

# cat /etc/sysconfig/network-scripts/ifcfg-team0
  1 TEAM_CONFIG="{\"runner\": {\"name\": \"activebackup\"}, \"link_watch\": {\"name\": \"ethtool\"}}"
  2 PROXY_METHOD=none
  3 BROWSER_ONLY=no
  4 BOOTPROTO=none
  5 DEFROUTE=yes
  6 IPV4_FAILURE_FATAL=no
  7 IPV6INIT=yes
  8 IPV6_AUTOCONF=yes
  9 IPV6_DEFROUTE=yes
 10 IPV6_FAILURE_FATAL=no
 11 IPV6_ADDR_GEN_MODE=stable-privacy
 12 NAME=team0
 13 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 14 DEVICE=team0
 15 ONBOOT=yes
 16 DEVICETYPE=Team
 17 IPADDR=[IP3]
 18 PREFIX=24
 19 GATEWAY=[IP4]
 20 DNS1=[IP5]

静的 IP アドレスが割り当てられていない場合、チームは DHCP を利用します。

5.スレーブを設定してチームに追加

スレーブを構成してチームに追加します。例:

# nmcli con add type team-slave con-name team0-slave0 ifname enp0s3 master team0
Connection 'team0-slave0' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.
# nmcli con add type team-slave con-name team0-slave1 ifname enp0s8 master team0
Connection 'team0-slave1' (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) successfully added.
# nmcli conn
NAME          UUID                                  TYPE      DEVICE
team0         XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  team      team0
team0-slave0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s3
team0-slave1  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enp0s8
# nmcli dev
DEVICE  TYPE      STATE      CONNECTION
team0   team      connected  team0
enp0s3  ethernet  connected  team0-slave0
enp0s8  ethernet  connected  team0-slave1
lo      loopback  unmanaged  --

NetworkManager は、次のチーム スレーブ インターフェース構成ファイルを作成します:

# cat /etc/sysconfig/network-scripts/ifcfg-team0-slave0
  1 NAME=team0-slave0
  2 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  3 DEVICE=enp0s3
  4 ONBOOT=yes
  5 TEAM_MASTER=team0
  6 DEVICETYPE=TeamPort
# cat /etc/sysconfig/network-scripts/ifcfg-team0-slave1
  1 NAME=team0-slave1
  2 UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  3 DEVICE=enp0s8
  4 ONBOOT=yes
  5 TEAM_MASTER=team0
  6 DEVICETYPE=TeamPort

少なくとも 1 つのスレーブがチームに追加されると、インターフェース (team0) が起動され、アクセス可能になります。

# ip addr
...
2: enp0s3: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
3: enp0s8: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
6: team0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    inet [IP3]/24 brd [IP6] scope global dynamic noprefixroute team0
       valid_lft 86045sec preferred_lft 86045sec
    inet6 fe80::5b1f:554a:1928:8575/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

すべてのチーム/チーム化されたインターフェースは同じ MAC アドレス、つまりチームの最初のチーム スレーブ メンバーのものを使用することに注意してください。

6.チームを再起動

静的 IP アドレスなどを有効にするには、チームを再起動します。例:

# nmcli con down team0 && nmcli con up team0

7.現在アクティブ/非アクティブなスレーブ インターフェースを特定する

teamdctl(8) を使用して、現在アクティブおよび非アクティブなスレーブ インターフェイスを識別します。例:

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

8.ネットワーク インターフェイスの無差別モードを有効にする

Oracle VM VirtualBox などの一部の仮想化テクノロジーでは、スレーブのフェイルオーバー/フェイルバックが正しく動作するために、ゲストに割り当てられたネットワーク インターフェイスとゲスト内で無差別モードを有効にする必要があります。物理システムのネットワーク インターフェイスでプロミスキャス モードを有効にすることも必要になる場合があります。

Oracle VM VirtualBox の場合、次のようにゲスト インターフェイスに対してプロミスキャス モードを有効にすることができます:
– Oracle VM VirtualBox Manager> [GUEST]> Settings> Network> Adapter 1|… ] Advanced ] Promiscuous Mode:Allow All

プロミスキャス モードは、次のようにカスタム サービスを使用して、CentOS/RHEL 7 システム内で動的および静的に有効にすることができます。

動的、非永続的:

# ip link set enp0s3 promisc on
# ip link set enp0s8 promisc on

静的、永続的:

次の内容のカスタム systemd ユニット ファイルを作成します。例:

# cat /usr/lib/systemd/system/promiscuous.service
  1 [Unit]
  2 Description=Bring up network interfaces in promiscuous mode upon boot
  3 After=network.target
  4
  5 [Service]
  6 Type=oneshot
  7 ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on
  8 ExecStart=/usr/sbin/ip link set dev enp0s8 promisc on
  9 ExecStop=/usr/sbin/ip link set dev enp0s3 promisc off
 10 ExecStop=/usr/sbin/ip link set dev enp0s8 promisc off
 11 TimeoutStartSec=0
 12 RemainAfterExit=yes
 13
 14 [Install]
 15 WantedBy=default.target

systemd に新しいサービスを通知します。例:

# systemctl daemon-reload

新しいサービス/ユニットを有効にして開始します。例:

# systemctl enable promiscuous
Created symlink /etc/systemd/system/default.target.wants/promiscuous.service → /usr/lib/systemd/system/promiscuous.service.
# systemctl start promiscuous
# systemctl status promiscuous
● promiscuous.service - Bring up network interfaces in promiscuous mode upon boot
   Loaded: loaded (/usr/lib/systemd/system/promiscuous.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2020-08-21 16:14:53 AEST; 17s ago
  Process: 8088 ExecStart=/usr/sbin/ip link set dev enp0s8 promisc on (code=exited, status=0/SUCCESS)
  Process: 8086 ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on (code=exited, status=0/SUCCESS)
 Main PID: 8088 (code=exited, status=0/SUCCESS)

Aug 21 16:14:53 [HOST] systemd[1]: Starting Bring up network interfaces in promiscuous mode upon boot...
Aug 21 16:14:53 [HOST] systemd[1]: Started Bring up network interfaces in promiscuous mode upon boot.

すべてのスレーブ インターフェイスでプロミスキャス モードが有効になっていることを確認します。例:

# ip addr | grep enp
2: enp0s3: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000
3: enp0s8: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP group default qlen 1000

9.チームのネットワーク接続回復力のテスト – スレーブのフェイルオーバー/フェイルバック

A. リモート クライアントから、ネットワーク チーミングが構成されているサーバーの継続的な ping(8) を開始します。例:

[CLIENT]$ ping [SERVER]
PING [IP3] ([IP3]) 56(84) bytes of data.
64 bytes from [IP3]: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from [IP3]: icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from [IP3]: icmp_seq=3 ttl=64 time=0.039 ms
...

B. 現在アクティブなチーム スレーブを切断します。

スレーブ インターフェイスに接続されている物理ネットワーク ケーブルを一時的に取り外します。 enp0s3.プログラムでインターフェイスを無効にしても、実際の物理リンク接続の切断はエミュレートされないことに注意してください。

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

切断されると、teamdctl はスレーブ インターフェイス enp0s3 をダウンとして示し、以前のバックアップ スレーブ enp0s8 が現在アクティブなスレーブになります。スレーブのフェイルオーバーにもかかわらず、リモート クライアントからの ping(8) は中断されずに続行されます。

さらに ip(8) コマンドを実行すると、チームへのすべてのネットワーク トラフィックが新しいアクティブなスレーブ enp0s8 経由で発生することが確認されます。つまり:

# ip -s link
...
2: enp0s3: [BROADCAST,MULTICAST,PROMISC] mtu 1500 qdisc fq_codel master team0 state DOWN mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX:  bytes packets  errors  dropped overrun mcast
    3007606561 5014092  0       27008   0       91263
    TX: bytes  packets  errors  dropped carrier collsns
    787749     7568     0       0       0       0
3: enp0s8: [BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP] mtu 1500 qdisc fq_codel master team0 state UP mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors dropped overrun mcast
    3829373093 6116137  0      26680   0       111948
    TX: bytes  packets  errors dropped carrier collsns
    179163     1337     0      0       0       0
7: team0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether [MAC1] brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors dropped overrun mcast
    2106463511 1969187  0      49615   0       60559
    TX: bytes  packets  errors dropped carrier collsns
    176341     1378     0      0       0       0

C. 新しい現在アクティブなチーム スレーブを切断します。

新しく昇格したアクティブなスレーブ インターフェイスに接続されている物理ネットワーク ケーブルを一時的に切断します。 enp0s8.切断されると、teamdctl はスレーブ インターフェイス enp0s3 と enp0s8 の両方をダウンとして示します。例:

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

この時点で、両方のチーム スレーブが切断されているため、リモート クライアントからの ping(8) は停止します。たとえば、

...
64 bytes from [IP3]: icmp_seq=1253 ttl=64 time=0.207 ms
64 bytes from [IP3]: icmp_seq=1254 ttl=64 time=0.131 ms
64 bytes from [IP3]: icmp_seq=1255 ttl=64 time=0.227 ms
64 bytes from [IP3]: icmp_seq=1256 ttl=64 time=0.218 ms
64 bytes from [IP3]: icmp_seq=1257 ttl=64 time=0.198 ms
From [IP3] icmp_seq=1258 Destination Host Unreachable
From [IP3] icmp_seq=1259 Destination Host Unreachable
...

D. 切断されたスレーブを再接続する

物理ネットワーク ケーブルをスレーブ インターフェイスの 1 つに再接続します。 enp0s3.再接続されると、teamdctl はスレーブ インターフェイス enp0s3 をアップとして示します。例:

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

この時点で、enp0s3 が現在アクティブなスレーブであり、リモート クライアントからの ping(8) が再開されます。

...
From [IP3] icmp_seq=1392 Destination Host Unreachable
From [IP3] icmp_seq=1393 Destination Host Unreachable
From [IP3] icmp_seq=1394 Destination Host Unreachable
From [IP3] icmp_seq=1395 Destination Host Unreachable
64 bytes from [IP3]: icmp_seq=1396 ttl=64 time=1258180 ms
64 bytes from [IP3]: icmp_seq=1397 ttl=64 time=1257180 ms
64 bytes from [IP3]: icmp_seq=1398 ttl=64 time=1256181 ms
64 bytes from [IP3]: icmp_seq=1399 ttl=64 time=1255181 ms
...

E. 残りの切断されたスレーブを再接続します。

物理ネットワーク ケーブルを残りのスレーブ インターフェイスに再接続します。 enp0s8.再接続されると、teamdctl は残りのスレーブ インターフェイス enp0s8 をアップとして示します。つまり:

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


Cent OS
  1. CentOS / RHEL 7 :ネットワーク インターフェイス名を変更する方法

  2. CentOS / RHEL 7 :ネットワーク ボンディングまたは NIC チーミングを構成する方法

  3. CentOS/RHEL 7 でネットワーク チーミングを構成する方法

  1. CentOS / RHEL 7 :telnet をインストールして構成する方法

  2. CentOS / RHEL 5 :インターフェイス ボンディング (NIC チーミング) の構成方法

  3. CentOS / RHEL 4 :インターフェイス ボンディング (NIC チーミング) を構成する方法

  1. RHEL 8 / CentOS8LinuxシステムにRをインストールして構成する方法

  2. CentOS / RHEL に Samba をインストールして構成する方法

  3. CentOS/RHEL で「無差別モード」でインターフェイスを構成する方法