본문 바로가기

OS,Network,Container

CentOS7 네트워크 본딩 이중화 구성 설정하기

반응형

entOS7 네트워크 이중화 구성 (리눅스 본딩)

 

 

 

 

 

네트워크 선로에 문제가 생기거나 NIC 카드에 장애가 발생할 시 네트워크 사용이 원활하지 않을 수 있다.

이러한 장애에 대비하고자 네트워크 이중화 실습을 해보고자 한다.

 

 

cisco 에서는 etherchannel, windows에서는 Teaming, 리눅스에서는 Bonding이라고 부른다고 한다.

Active-Backup 구성을 해보겠다.

 

 

 

 

리눅스 본딩

- 여러 네트워크 카드를 사용하여 네트워크 단일 장애에 대처할 수 있음 // Active-Standby

- 여러 네트워크 카드를 사용하여 네트워크의 대역폭(Bandwidth)을 늘릴 수 있다. // Trunking

- 여러 네트워크 카드를 사용하여 데이터 송수신 부하를 분산시킬 수 있다. // Load

 

 

 

 

mode=0 (round-robin)                            mode 0과 1을 주로 많이 씀

mode=1 (active-backup)

mode=2 (balance-xor)

mode=3 (broadcast)

mode=4 (802.3ad)

mode=5 (balance-tlb)

mode=6 (balance-alb)

Active-Backup Mode 실습해보기

2개 이상의 NIC를 하나의 가상 NIC로 그룹화하여 다른 물리적 NIC가 고장났을 때도 통신을 할 수 잇도록 Failover 하는 모드가 Active-backup 이다.

 

 

 

NIC 추가

Vmware Workstation 기준

NIC 추가시켜주기 ( 그러면 리눅스 내에서는 ens?? 가 하나 추가될 것이다.)

+ NAT(Network Address Translation) 으로 설정하기

OK누르고 빠져나오기

* Vsphere나 Oracle 등 기타 가상머신들은 구글링해서 찾아보시면 된다

재부팅 후 ip a를 통해 확인해보니 기존의 ens33에 더불어 ens34가 추가되었다.

 

 

[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.3/24 brd 192.168.5.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3f:8c9f/64 scope link
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:0c:29:3f:8c:a9 brd ff:ff:ff:ff:ff:ff

NetworkManager 중단

전에 실습해본 바로 NetworkManager을 비활성화나 중단시키지 않을 시 제대로 실습이 진행이 되질 않았다. ( 본딩 구성 후 systemctl restart network 할 때)

고로, 애초에 본딩 구성 시 NetworkManager을 중단 후 본딩을 구성시켜보겠다.

 

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:NetworkManager(8)



 

 

bond0, ens33, ens34 파일 생성 / 내용 변경

 

 

cd /etc/sysconfig/networkscripts/ 로 이동 후 ls 명령어를 쳐보니

ifcfg-ens33 만 있다.

 

( NIC를 추가한다고 해서 netowrk-scripts 디렉터리 내에 파일이 자동으로 생성되는 것이 아니다. 고로,

ens34는 따로 만들어줘야 하고 ens33을 vi를 통해서 수정을 하면 된다.

ip주소는 bond0 파일에만 설정해주고 ens33, ens34는 slave 로써 설정해주면 된다 )

 

 

[root@localhost network-scripts]# ls
ifcfg-ens33      ifdown-ippp    ifdown-tunnel  ifup-ippp   ifup-routes
ifcfg-lo         ifdown-ipv6    ifup           ifup-ipv6   ifup-sit
ifdown           ifdown-isdn    ifup-Team      ifup-isdn   ifup-tunnel
ifdown-Team      ifdown-post    ifup-TeamPort  ifup-plip   ifup-wireless
ifdown-TeamPort  ifdown-ppp     ifup-aliases   ifup-plusb  init.ipv6-global
ifdown-bnep      ifdown-routes  ifup-bnep      ifup-post   network-functions
ifdown-eth       ifdown-sit     ifup-eth       ifup-ppp    network-functions-ipv6

# bond0

vi /etc/sysconfig/network-scripts/bond0

# ens33

vi /etc/sysconfig/network-scripts/ens33

# ens34

vi /etc/sysconfig/network-scripts/ens34

위와 같이 vi를 통해 ens33, ens34, bond0를 설정해주면 된다.

ls를 해보니 생성되었군ㅋ

 

[root@localhost network-scripts]# ls
ifcfg-bond0      ifdown-eth     ifdown-tunnel  ifup-ipv6    ifup-tunnel
ifcfg-ens33      ifdown-ippp    ifup           ifup-isdn    ifup-wireless
ifcfg-ens34      ifdown-ipv6    ifup-Team      ifup-plip    init.ipv6-global
ifcfg-lo         ifdown-isdn    ifup-TeamPort  ifup-plusb   network-functions
ifdown           ifdown-post    ifup-aliases   ifup-post    network-functions-ipv6
ifdown-Team      ifdown-ppp     ifup-bnep      ifup-ppp
ifdown-TeamPort  ifdown-routes  ifup-eth       ifup-routes
ifdown-bnep      ifdown-sit     ifup-ippp      ifup-sit

 

 

 

 

 

 

network 서비스 재시작 및 Bonding 모듈 동작 확인

systemctl restart network 를 통해 네트워크 서비스를 재시작한다.

@ 만약 오류가 뜰다면 systemctl stop NetworkManager 이나 syetemctl disable NetworkManager 을 통해 네트워크 매니저를 비활성화하거나 중단한 이후 systemctl restart network를 해보자.

lsmod | grep bonding

netstat -nr

ip a or ifconfig -a

 

[root@localhost modprobe.d]# systemctl restart network
[root@localhost modprobe.d]# ismod | grep bonding
bash: ismod: command not found
[root@localhost modprobe.d]# lsmod | grep bonding
bonding               152979  0
[root@localhost modprobe.d]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.5.2     0.0.0.0         UG        0 0          0 bond0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 bond0
192.168.5.0     0.0.0.0         255.255.255.0   U         0 0          0 bond0
[root@localhost modprobe.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens33: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
3: ens34: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.3/24 brd 192.168.5.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3f:8c9f/64 scope link
       valid_lft forever preferred_lft forever

 

본딩 구성 및 상태 확인하기

cat /proc/net/bonding/bond0

reboot

 

[root@localhost modprobe.d]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)      # active-backup 모드 되어있는지 확인
Primary Slave: None                                # primary Slave 지정 안함
Currently Active Slave: ens33                      # 현재 Active Slave는 ens33 이다.
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:3f:8c:9f
Slave queue ID: 0

Slave Interface: ens34
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:3f:8c:a9
Slave queue ID: 0
[root@localhost modprobe.d]# reboot

ping을 통한 네트워크 통신 확인

Gateway로 핑 신호를 보내본다.

ping -c 3 192.168.5.2

잘 된다. 본딩이 잘 완료된 모양이다.

 

[root@localhost ~]# ping -c 3 192.168.5.2
PING 192.168.5.2 (192.168.5.2) 56(84) bytes of data.
64 bytes from 192.168.5.2: icmp_seq=1 ttl=128 time=0.378 ms
64 bytes from 192.168.5.2: icmp_seq=2 ttl=128 time=0.117 ms
64 bytes from 192.168.5.2: icmp_seq=3 ttl=128 time=0.409 ms

--- 192.168.5.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.117/0.301/0.409/0.131 ms

고의로 NIC 연결을 끊어도 네트워크 통신이 잘 유지되는지 확인

vmware workstation을 통해 고의로 연결을 끊어준다.

 

 

cat /proc/net/bonding/bond0와 ip a를 통해 확인해봤을 때

ens33의 state DOWN이라고 떠있다.

ens33은 네트워크가 불량인 상태이지만 ping을 해보니 잘 연결이 된다. -> 본딩이 잘 연결되었단 뜻

 

[root@localhost ~]# 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: ens34
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 00:0c:29:3f:8c:9f
Slave queue ID: 0

Slave Interface: ens34
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:3f:8c:a9
Slave queue ID: 0

 

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens33: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc pfifo_fast master bond0 state DOWN group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
3: ens34: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:3f:8c:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.3/24 brd 192.168.5.255 scope global bond0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3f:8c9f/64 scope link
       valid_lft forever preferred_lft forever
[root@localhost ~]# ping -c 3 192.168.5.2
PING 192.168.5.2 (192.168.5.2) 56(84) bytes of data.
64 bytes from 192.168.5.2: icmp_seq=1 ttl=128 time=0.287 ms
64 bytes from 192.168.5.2: icmp_seq=2 ttl=128 time=0.126 ms
64 bytes from 192.168.5.2: icmp_seq=3 ttl=128 time=0.151 ms

--- 192.168.5.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.126/0.188/0.287/0.070 ms

반응형