반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

hann-blume

Linux - Channel Bonding 본문

Linux

Linux - Channel Bonding

hann-blume 2020. 3. 20. 00:16

 

 

 

[채널 본딩 (Channel Bonding)]

 

- 채널 본딩이란 물리적인 여러 개의 네트워크 인터페이스 카드장치를 

   하나로 묶어 단일 Channel 형식으로 운영하는 것을 말한다.


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


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


- 리던던시 환경은 말 그대로 중복적인 장치 운영 환경을 리던던시 환경이라 부른다.


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


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


[채널 본딩의 모드]

Mode0 - 디폴트값.라운드로빈= NIC에 들어오는 트래픽을 분산시켜주는 방식, Failover가 안된다.

우리는 Mode1을 테스트 해볼 것이다.

(Server)


Edit - Network Adapter 추가

 


부팅

네트워크 매니저를 켜고
# systemctl start NetworkManager
# ifconfig
그럼 새로운 NIC가 잡혀있다.

(사용자에 따라 ens36이 아닐 수 있다. 상관없다.)

 

# nmcli connection

이 명령어를 실행시키고 ens36의 UUID를 메모한다.


NAME         UUID                                  TYPE      DEVICE

유선 연결 1  685aad27-90d1-3c73-82b7-7c7853178794  ethernet  ens36


(아래서 필요하기 때문)


본딩작업에 필요한 패키지는
# rpm -qa | grep bind-utils
bind-utils-9.11.4-9.P2.el7.x86_64
# rpm -qa | grep ethtool
ethtool-4.8-10.el7.x86_64

이렇게 두 가지이다.(이미 설치되어 있을 것)

 

본딩은 네트워크매니저가 반드시 꺼져있어야한다. 

# systemctl disable NetworkManager
# systemctl stop NetworkManager


# cd /etc/sysconfig/network-scripts

bond0이라는 MASTER를 만든다.
# vi ./ifcfg-bond0

DEVICE=bond0 - 장치이름
ONBOOT=yes
USERCTL=no - 네트워크매니저 같은 것을 이용한 설정을 이용하지 않겠다라는 것이다. 
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=192.168.131.100
NETMASK=255.255.255.0
GATEWAY=192.168.131.2
DNS1=168.126.63.1
BROADCAST=192.168.131.255


이번엔 기존의
# vi ./ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
UUID=fac51f7f-3e21-4653-b8e6-f0114eb3f6f1
DEVICE=ens33
ONBOOT=yes

만 나두고 아래의 ip주소 부분을 전부 삭제한다.
그리고 TYPE아래에
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

-> 마스터가 bond0이라는 것과, ens33이 슬레이브에 포함된다는 것을 명시해준다.


# cp ./ifcfg-ens33 ./ifcfg-ens36

# vi ./ifcfg-ens36

TYPE=Ethernet
USERCTL=no
NM_CONTROLLED=no+
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
DEFROUTE=yes
NAME=ens36
UUID=62abb6a4-397f-3dd4-a32f-2dd58ed875b8
DEVICE=ens36
ONBOOT=yes

UUID 아까 위에서 저장해둔것 복붙


# cd ~

내 시스템 전체의 인터페이스에 대한 모든 기본 게이트웨이를 bond0이라는 작업을 해준다.
# vi /etc/sysconfig/network
# Created by anaconda
GATEWAYDEV=bond0

bonding.conf라는 파일을 만들어준다
본딩에 대한 설정 정보를 저장하는 모듈을 만드는 작업.
# vi /etc/modprobe.d/bonding.conf
alias bond0 bondig

 


방금 만들어준 것을 적용시켜준다
# modprobe bonding

그리고 네트워크 재시작 후
# systemctl restart network

확인
# ifconfig

그럼 ens33,ens36위에 bond0이 나타난다.


bond0의 정보를 보기위해
# cat /proc/net/bonding/bond0
Bonding Mode: load balancing (round-robin)
= Mode 0으로 기본 설정되어있는 것을 알 수 있다.

Mode 1로 변경해주자.
ㄱㄷ변경 하려면 옵션을 추가해주어야 한다.
# vi /etc/sysconfig/network-scripts/ifcfg-bond0

맨 아래줄에
BONDING_OPTS="mode=1 miimon=100" 을 추가해준다
Mode 1로 변경해줌과 동시에 0.1초 단위로 상태를 체크하겠다는 옵션이다.

 


# reboot로  재부팅 후
# ifconfig 로 bon0이 제대로 올라오는지 확인후
# cat /proc/net/bonding/bond0 로 
모드가 Bonding Mode: fault-tolerance (active-backup)
로 변경되어있는지 확인.



성능테스트
실시간 모니터링
# watch -d -n 1 "cat /proc/net/bonding/bond0"
cat 명령어를 자동으로 1초마다 계속 치는 효과
d 옵션은 이전 출력결과와 비교하여 변경된 부분을 표시해 주는 기능
n 옵션은 입력한 명령어의 결과를 원하는 초단위 간격으로 출력해 주는 기능(default 값은 2초)

 

Putty 1개 틀고 
# ping 8.8.8.8



가상머신 오른쪽 하단에 네트워크 아이콘중 1개를 다운시켜보자(우클릭)


그리고 실시간 모니터링을 해주는 곳을 보면 down되는데

 


이때 다른 푸티창의 ping은 계속 정상작동한다.
다운시킨것을 다시 커넥트하면 up으로 돌아온다.

나머지 네트워크 NIC도 다운시켜보고
down 확인,


다른 푸티창의 ping은 여전히 정상작동한다.

다시 커넥트하고up 확인.

즉, mode 1의 Failover 기능으로 하나가 죽어도 네트워크는 정상적으로 작동하는 것을 확인 할 수 있다.



 

 

 

여기까지 Channel Bonding에 대한 설명이 끝났다.

반응형