[Centos 7] Channel Bonding( 채널 본딩 )

2022. 11. 25. 00:11리눅스(Linux)

Channel Bonding이란? = 이더채널 본딩

   - 채널 본딩이란 여러개의 NIC를 하나로 묶어 단일 Channel 형식으로 운영하는것을 말한다.

   - 채널 본딩을 구현 할 경우 Fault Tolerance 환경을 구축할 수 있으며, 네트워크 인터페이스에 대한 Redundancy를 구현 할 수 있다.

   - 폴트 플러런스란 한쪽 장치에 문제가 발생하더라도 반대쪽 장치에서 그 기능을 온전히 수행 하므로, 전체 시스템 운영에는 문제가 발생하지 않는 환경을 말한다.

   - 부하도가 많은 장치의 경우 채널 본딩을 통한 네트워크 트래픽에 대한 Load Balancing을 구현 할 수 있다.

   - Load Balancing은 네트워크 인터페이스 카드의 대역폭을 균형있게 사용하여 전체 네트워크 트래픽에 대한 각 장치의 부하도를 감소시킬 수 있다.(부하 분산)

 

[Mode 0] : Balance-rr (Round Robin)

   - LoadBalancing구현 가능, 전체 NIC에 대한 순환 통신을 진행하고, 데이터 전송시에만 부하분산 진행 (Default값)

 

[Mode 1] : Active-Backup

   - Failover, bond 내의 하나의 NIC만 통신, Main NIC에 문제가 발생 했을 경우 Bond내의 대체 NIC가 통신을 수행

 

[Mode 4] : 802.3ad(LACP)

   - Failover, 동적 부하분산, NIC 대역폭 확장 통신 (IEEE 802.3ad 통신을 지원하는 스위치와 연결되어 있을 경우 사용 가능)

 

bond 0

   -  논리적인 bond0(Master Device)을 생성 후 bond0이 사용할 물리적인 device들(Slave Device)(ens32, ens34)을 추가한다.

   - bond0에만 ip 주소를 부여한다.

 

$ mode 0, 터미널로 작업

# systemctl disable NetworkManager 
# systemctl stop NetworkManager 
   - 본딩 설정시 네트워크매니저 끄고 진행

# cd /etc/sysconfig/network-scripts 

# vi ./ifcfg-bond0 
DEVICE=bond0 
   - 장치이름 
ONBOOT=yes 
USERCTL=no 
   - 네트워크매니저 같은 것을 이용한 설정을 이용하지 않겠다라는 것이다.  
NM_CONTROLLED=no 
BOOTPROTO=none 
IPADDR=192.168.1.100 
NETMASK=255.255.255.0 
GATEWAY=192.168.1.2 
DNS1=8.8.8.8
BROADCAST=192.168.1.255

# vi ./ifcfg-ens32 | # vi ./ifcfg-ens34 
NM_CONTROLLED=no 
MASTER=bond0 
SLAVE=yes 
   - 밑에 추가
   
# vi /etc/sysconfig/network 
# Created by anaconda 
GATEWAYDEV=bond0
   - 시스템 전체의 인터페이스에 대한 모든 기본 게이트웨이를 bond0이라는 작업
   
# vi /etc/modprobe.d/bonding.conf 
alias bond0 bonding
   - 본딩에 대한 설정 정보를 저장하는 모듈을 만드는 작업

# modprobe bonding 
   - 모드 적용

# systemctl restart network 
   - 재부팅

# cat /proc/net/bonding/bond0 
   - bond0 정보 확인

$ mod1 변경

# vi /etc/sysconfig/network-scripts/ifcfg-bond0 
BONDING_OPTS="mode=1 miimon=100" 
   - 맨 아래줄에 추가해준다 

# systemctl restart network

# cat /proc/net/bonding/bond0 
   - 모드가 Bonding Mode: fault-tolerance (active-backup)로 변경되어있는지 확인.

# watch -d -n 1 "cat /proc/net/bonding/bond0" 
   - 실시간 모니터링

# ping 8.8.8.8 
   - putty 1개를 더 틀고 입력

 

ens32 다운시켰을 때

ens34 다운시켰을 때 

$ Network Manager 명령어로 채널본딩 설정

# ifconfig ens32 down
# ifconfig ens34 down

# mkdir /backup
# cd /etc/sysconfig/network-scripts
# mv ifcfg-ens32 ifcfg-ens34 /backup
# ls -l /backup
합계 8
-rw-r--r--. 1 root root 360  5월 16 13:01 ifcfg-ens32
-rw-r--r--  1 root root 253  6월  8 11:51 ifcfg-ens34

# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup ip4 192.168.1.100/24
연결 'bond0' (028fcca6-c5ef-43de-b313-24c53dcdfaa7)이 성공적으로 추가되었습니다.

# nmcli con mod id bond0 bond.options mode=active-backup,miimon=100
   - bond0 장치의 Bonding Option 정의 
   - mode : Channel_Bonding Mode 정의
   - miimon : 0.1초 단위의 모니터링 수행 ( Main 인터페이스에 문제가 있는지 확인 )

# nmcli conn
NAME   UUID                                  TYPE      DEVICE 
bond0  028fcca6-c5ef-43de-b313-24c53dcdfaa7  bond      bond0  
ens32  ee5baa59-9197-4393-903c-f74b64f80f59  ethernet  --     
ens34  d497469c-6dc2-38db-8ade-324af2f140e7  ethernet  --     

# nmcli conn del ens32
연결 'ens32'(ee5baa59-9197-4393-903c-f74b64f80f59)이(가) 성공적으로 삭제되었습니다.

# nmcli conn del ens34
연결 'ens34'(d497469c-6dc2-38db-8ade-324af2f140e7)이(가) 성공적으로 삭제되었습니다.

# nmcli conn
NAME   UUID                                  TYPE  DEVICE 
bond0  028fcca6-c5ef-43de-b313-24c53dcdfaa7  bond  bond0  

# nmcli conn add type bond-slave ifname ens32 con-name ens32 master bond0
연결 'ens32' (cee98a40-a3a0-4212-8555-93e26c72b101)이 성공적으로 추가되었습니다.

# nmcli conn add type bond-slave ifname ens34 con-name ens34 master bond0
연결 'ens34' (231832d3-03c8-4c7d-b326-32feb99395b1)이 성공적으로 추가되었습니다.

# systemctl restart NetworkManager
# nmcli conn
NAME   UUID                                  TYPE      DEVICE 
bond0  028fcca6-c5ef-43de-b313-24c53dcdfaa7  bond      bond0  
ens32  cee98a40-a3a0-4212-8555-93e26c72b101  ethernet  ens32  
ens34  231832d3-03c8-4c7d-b326-32feb99395b1  ethernet  ens34  

# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::3b77:fed2:6929:ea56  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:8a:40:e8  txqueuelen 1000  (Ethernet)
        RX packets 3  bytes 180 (180.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19  bytes 2120 (2.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens32: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:0c:29:8a:40:e8  txqueuelen 1000  (Ethernet)
        RX packets 4183  bytes 1449809 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2690  bytes 449454 (438.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:0c:29:8a:40:e8  txqueuelen 1000  (Ethernet)
        RX packets 166  bytes 29000 (28.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 358  bytes 56333 (55.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[ TEST ] : Terminal 2개 활성화 후 테스트 
   - Terminal 1번 : ping 8.8.8.8
   - Terminal 2번 : watch -d -n 1 "cat /proc/net/bonding/bond0"
   - Main으로 사용되는 인터페이스를 VMware에서 중지상태로 변경
   - Backup 인터페이스가 활성화되며, 지속적인 통신이가능한 상태인지 확인한다.