【CentOS7.3】2つのネットワークインタフェースでbonding(active-backup)をやってみた。

# はじめに
CentOS7.3にて2つのネットワークインタフェースでbondingを組んでみました。
bondingを組む迄の手順をアウトプットしていきたいと思います。

# そもそもbondingとは？

複数のネットワークインタフェースを束ねて冗長化したり、処理能力向上を図ること。
※`teaming`とも呼ばれる。

# 環境

|  項目  |  説明  |
| ---- | ---- |
|  Hypervisor　|  ESXi6.7  |
|  OS  |  CentOS7.3  |
|  NIC  |  2枚  |

- OS

```bash
[root@tspweb01 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@tspweb01 ~]#
```

- NIC

![nic.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/8c052fbf-4bde-39c9-7f9e-ada82aaee616.jpeg)


# ざっくりとした構成

![bonding.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/b8fd9b71-585b-70a0-4351-93c65b041283.jpeg)

## 備考

- **Slave** 
  Bondingに参加する物理インタフェース

- **Master**
  Bondingを司る論理インタフェース  

# 今回構成するActive-backup構成

![active.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/37dd39cd-79be-e5b7-8d44-5af31313ef3a.jpeg)





# 構築手順

## 事前確認

**①ネットワーク確認**

- ネットワークインタフェース

`ens192`と`ens224`がDownしていることを確認。

```bash
[root@tspweb01 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:ee:2e:ba brd ff:ff:ff:ff:ff:ff
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:ee:2e:c4 brd ff:ff:ff:ff:ff:ff
```

- NetworkManagerの状態

サービスが立ち上がっていることを確認
※今回は、サービスを立ち上げたまま設定を進めます。

```bash
[root@tspweb01 network-scripts]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2020-06-16 20:11:06 JST; 17min ago
     Docs: man:NetworkManager(8)
 Main PID: 782 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           mq782 /usr/sbin/NetworkManager --no-daemon

 6月 16 20:26:28 tspweb01 NetworkManager[782]: <info>  [1592306788.2383] ma...L
 6月 16 20:26:28 tspweb01 NetworkManager[782]: <info>  [1592306788.2384] po...S
 6月 16 20:26:28 tspweb01 NetworkManager[782]: <info>  [1592306788.2386] po...S
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2854] de...]
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2855] ma...L
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2885] au..."
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2890] de...]
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2900] ma...L
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2901] po...S
 6月 16 20:26:33 tspweb01 NetworkManager[782]: <info>  [1592306793.2902] po...S
Hint: Some lines were ellipsized, use -l to show in full.
[root@tspweb01 network-scripts]#
```

**②ネットワーク設定ファイルバックアップ**

- `ifcfg-*`のバックアップ

```bash
mkdir -p /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`
cp -p /etc/sysconfig/network-scripts/ifcfg-* /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`/.
ls -la /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`
```


実行例

```bash
[root@tspweb01 network-scripts]# mkdir -p /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`
[root@tspweb01 network-scripts]# cp -pi /etc/sysconfig/network-scripts/ifcfg-* /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`/.
[root@tspweb01 network-scripts]#
[root@tspweb01 network-scripts]# ls -la /etc/sysconfig/network-scripts/backup_`date +'%Y%m%d'`
合計 20
drwxr-xr-x. 2 root root   82  6月 16 21:00 .
drwxr-xr-x. 3 root root 4096  6月 16 20:59 ..
-rw-r--r--. 1 root root  153  6月 16 20:25 ifcfg-ens192
-rw-r--r--. 1 root root  153  6月 12 07:54 ifcfg-ens224
-rw-r--r--. 1 root root  254  9月 12  2016 ifcfg-lo
[root@tspweb01 network-scripts]#
```

**③bonding.confバックアップ**

- `bonding.conf`の有無確認

`bonding.conf`が存在しないことを確認。

```bash
[root@tspweb01 network-scripts]# ls -l /etc/modprobe.d/bonding.conf;date
ls: /etc/modprobe.d/bonding.conf にアクセスできません: そのようなファイルやディ レクトリはありません
2020年  6月 16日 火曜日 20:30:30 JST
[root@tspweb01 network-scripts]#
```

※存在する場合はファイルバックアップ実施

```bash
cp -p /etc/modprobe.d/bonding.conf /etc/modprobe.d/bonding.conf_`date +'%Y%m%d'`
ls -la /etc/modprobe.d/bonding.conf_`date +'%Y%m%d'`
```

## 設定手順

**①bonding.conf作成・確認**

- `bonding.conf`作成

```bash
vi /etc/modprobe.d/bonding.conf
```

設定内容

```bash
alias bond0 bonding
```

設定後、`wq!`にて保存。

- `bonding.conf`内容確認

設定した内容になっていること。

```bash
[root@tspweb01 modprobe.d]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
[root@tspweb01 modprobe.d]#
```
  
<br>

**②NIC設定**

- ens192

```bash
vi /etc/sysconfig/network-scripts/ifcfg-ens192
```

内容

```bash
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=ens192
HWADDR=00:0c:29:ee:2e:ba
DEVICE=ens192
ONBOOT=yes
MASTER=bond0
SLAVE=yes
```

- ens224

```bash
vi /etc/sysconfig/network-scripts/ifcfg-ens224
```

内容

```bash
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=ens224
HWADDR=00:0c:29:ee:2e:c4
DEVICE=ens224
ONBOOT=yes
MASTER=bond0
SLAVE=yes
```

**【設定内容説明】**

|  項目  |  説明  |
| ---- | ---- |
|  TYPE  | 種類 |
|  BOOTPROTO  |  DHCPを使用する場合は"dhcp"、静的に設定する場合は"static"もしくは"none"  |
|  IPV6INIT| IPv6設定実施の有無   |
|  NAME|  NICの名前  |
|  HWADDR |  NICのMACアドレス  |
|  DEVICE　|  NICのデバイス名  |
|  ONBOOT |  OS起動時にNICを起動させるか  |
|  MASTER| 設定する論理インタフェース名(今回は`bond0`)   |
|  SLAVE |  SLAVEとしての使用有無  |

**③NIC設定確認**

- ifcfg-ens192

```bash
[root@tspweb01 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=ens192
HWADDR=00:0c:29:ee:2e:ba
DEVICE=ens192
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@tspweb01 network-scripts]#
```

- ifcfg-ens224

```bash
[root@tspweb01 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=ens224
HWADDR=00:0c:29:ee:2e:c4
DEVICE=ens224
ONBOOT=yes
MASTER=bond0
SLAVE=yes
[root@tspweb01 network-scripts]#
```

**④bonding設定**

```bash
vi /etc/sysconfig/network-scripts/ifcfg-bond0
```
  
内容

```bash
BOOTPROTO=none
DEVICE=bond0
TYPE=Bond
ONBOOT=yes
IPADDR=192.168.0.41
PREFIX=24
GATEWAY=192.168.0.1
BONDING_OPTS="mode=1 miimon=100 primary=ens192 primary_reselect=1"
```

**【BONDING_OPTS説明】**

`BONDING_OPTS="mode=1 miimon=100"`

|  項目  |  設定値 |  説明  |
| ---- | ---- | ---- |
|  mode | 1 | Active-backupモード |
|  miimon | 100 | 0.1秒間隔でBondingの状態を確認 (1000msec = 1秒) |

**⑤bonding設定確認**

```bash
[root@tspweb01 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
BOOTPROTO=none
DEVICE=bond0
TYPE=Bond
ONBOOT=yes
IPADDR=192.168.0.41
PREFIX=24
GATEWAY=192.168.0.1
BONDING_OPTS="mode=1 miimon=100 primary=ens192 primary_reselect=1"
[root@tspweb01 network-scripts]#
```

**⑥networkサービス再起動**

```bash
systemctl restart network
```

## 設定後確認

**①IP情報を確認**

`bond0`が存在することを確認。

```bash
[root@tspweb01 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 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: ens192: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 00:0c:29:ee:2e:ba brd ff:ff:ff:ff:ff:ff
3: ens224: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether 00:0c:29:ee:2e:ba brd ff:ff:ff:ff:ff:ff
4: ens256: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:ee:2e:ce brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.45/24 brd 192.168.0.255 scope global ens256
       valid_lft forever preferred_lft forever
    inet6 2404:7a80:91a1:4d00:20c:29ff:feee:2ece/64 scope global tentative mngtmpaddr dynamic
       valid_lft 2592000sec preferred_lft 604800sec
    inet6 fe80::20c:29ff:feee:2ece/64 scope link tentative
       valid_lft forever preferred_lft forever
7: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:0c:29:ee:2e:ba brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.41/24 brd 192.168.0.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 2404:7a80:91a1:4d00:20c:29ff:feee:2eba/64 scope global tentative mngtmpaddr dynamic
       valid_lft 2592000sec preferred_lft 604800sec
    inet6 fe80::20c:29ff:feee:2eba/64 scope link
       valid_lft forever preferred_lft forever
[root@tspweb01 network-scripts]#
```

**②bonding状態確認**

`ens192`と`ens224`でbondingが組まれていること。

```bash
[root@tspweb01 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens192 (primary_reselect better)
Currently Active Slave: ens192
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens192
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:ee:2e:ba
Slave queue ID: 0

Slave Interface: ens224
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:ee:2e:c4
Slave queue ID: 0
[root@tspweb01 network-scripts]#
```

**③TeraTermにてSSH確認**

sshできること。

![ssh.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/f94be3a7-9a07-9a4b-e8ff-c0213023d563.jpeg)


# `ens192(active)`を落としてみる

## 構成図

![standby.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/2bab3576-c779-b25e-1a74-6d848a7a0738.jpeg)


## 手順

①`ens192`を落とす

```bash
[root@tspweb01 ~]# ifdown ens192
デバイス 'ens192' が正常に切断されました。
[root@tspweb01 ~]#
```

③`ens224`に切り替わっていることを確認

```bash
[root@tspweb01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens224
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens224
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:ee:2e:c4
Slave queue ID: 0
[root@tspweb01 ~]#
```



# 参考

[ボンディングとは](https://www.designet.co.jp/faq/term/?id=44Oc44Oz44OH44Kj44Oz44Kw)
[ボンディングとは - IT用語辞典 e-Words](http://e-words.jp/w/%E3%83%9C%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0.html)
[Linux(CentOS8/RHEL8)のBondingのmodeと設定確認方法,スイッチのLink Aggregation設定との組合せ](https://milestone-of-se.nesuke.com/nw-basic/link-aggregation/linux-bonding-and-switch-config/)
[CentOS 7でBondingを行う](https://orebibou.com/ja/home/201503/20150312_001/)