Server/Linux

Linux // Bonding ( 네트워크 이중화 )

깨래 2018. 3. 28. 17:59

bonding - 네트워크 이중화


- Linux kernel에 내장된 기술로 2개 이상의 Network Interface Card를 논리적으로 하나의 interface 로 묶어서 NIC의 물리적 장애에 대응하거나 처리량을 늘리는 기술이다.



본딩 모드 종류



Mode 0 (balance-rr) balance-round robine ( 2개의 NIC을 순차적으로 분배 + Fault Tolerance)

- 회선이 2회선일 경우 트래픽을 같이 사용할 수 있어 대역폭을 분산시키는데 효율적

 

Mode 1 (active-backup) 

- 일반 기업들이 많이 쓰고, 흔히들 말하는 네트워크 이중화에 대한 부분으로 사용

- 실제 사용시에는 2개의 백본에 2개의 NIC에 연결이 되며, 활성화 되어있는 NIC에 문제 발생시 예비 NIC으로 이첩시키는 기능을 합니다.


Mode 5 (balance-tlb)

- 로드 발랜싱 정책으로 밖으로 내보내지는 트래픽은 분산되어 송출되며, 들어오는 트래픽은 Active되어있는 NIC으로 패킷을 받음. 만일 Active 되어있는 NIC의 문제로 패킷을 받지 못하면 또다른 NIC이 실패한 NIC의 MAC Address를 물려받게 됨


Mode 6 (balance-alb) 

- 들어오는 트래픽을 분산 처리하여 받음. 

- bond에서 트래픽이 많이 존재하지 않는 NIC으로 분산.

- 들어오는 로드 발렌싱은 ARP negotiation을 통해서 수행.


본딩 실습

1. 네트워크 카드 추가
Server-A 네트워크 카드 추가
VMware -> Settings -> Add -> Network Adaptor 추가
2. 네트워크 카드 추가 확인
#ifconfig // 기존에 장착되어 있던 eth0과 eth1 인터페이스 확인
#ifconfig -a // ifconfig 명령어로 출력이 안될 시 -a 옵션 사용하여 확인

3. 네트워크 인터페이스 설정 및 파일 생성
#cd /etc/sysconfig/network-scripts/ // 네트워크 설정 파일이 위치한 디렉토리
#vi ifcfg-eth0 // eth0 파일 수정
DEVICE=eth0 // 장치 이름
TYPE=Ethernet // 통신 타입
ONBOOT=yes // 부팅 시 활성화 여부
BOOTPROTO=none // IP 할당 방식
USERCTL=no // 사용자 계정으로 해당 장치 제어 여부
NM_CONTROLLED=no // 네트워크 매니저 데몬이 해당 장치 제어 여부
SLAVE=yes // 종속 여부
MASTER=bond0 // 마스터가 될 본딩 장치의 이름
#vi ifcfg-eth1
DEVICE=eth1
        TYPE=Ethernet
        ONBOOT=yes
        BOOTPROTO=none
        USERCTL=no
        NM_CONTROLLED=no
        SLAVE=yes
        MASTER=bond0

ifcfg-bond0 파일 생성
#vi ifcfg-bond0
DEVICE=bond0
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
IPADDR=100.100.100.110 // bond0에 할당할 IP주소
NETMASK=255.255.255.0
GATEWAY=100.100.100.2
BONDING_MASTER=yes // Bonding 주체 여부
BONDING_OPTS="mode=1 miimon=100" // 본딩 옵션
// mode=1 (Active/Backup 모드)
// miimon=100 모니터링 주기 (ms)
4. /etc/modprobe.d/bonding.conf 파일 생성
#vi /etc/modprobe.d/bonding.conf // 커널에게 전달할 본딩 설정을 저장하고 있는 파일
alias bond0 bonding // bonding은 bond0 으로 동작하도록 설정
options bond0 mode=1 miimon=100 // 해당 파일에 추가로 옵션을 넣어도 무방
5. 커널에게 본딩 설정 적용
#modprobe bond0 // 본딩을 사용하기 위한 모듈을 커널에게 전달
6. 설정 적용
#service network restart                 // 지금 까지의 설정을 적용
7. 설정 확인
1. #ifconfig // bond0 인터페이스 확인
2. #cat /proc/net/bonding/bond0
(1) boding mode가 1번 (Active/Backup)으로 설정되었는지 확인
(2) 현재 Active 상태인 인터페이스 확인 
(3) 모니터링 및 통신 상태 확인
Bonding Mode: fault-tolerance (active-backup) // 본딩 모드 확인
Currently Active Slave: eth0 // 현재 활성화 상태인 인터페이스
MII Status: up // 모니터링 상태
MII Polling Interval (ms): 100 // 모니터링 주기
Slave Interface: eth0 // 슬레이브 인터페이스 명
MII Status: up // 모니터링 상태
Speed: 1000 Mbps // 전송 속도 
Duplex: full // 전송 방식
Link Failure Count: 0 // 링크가 떨어진 회수
Permanent HW addr: 00:0c:29:19:4b:67 // MAC주소
Slave queue ID: 0 // 우선순위

8. 본딩 테스트 ( 절체 테스트)
- 인터페이스 장애 -> 인터페이스 제거 (disconnect)
- 실제 서버에서는 랜선을 하나씩 제거 하면서 통신 상태 확인
세션-1 세션-2
#ping 8.8.8.8 #watch -d -n 0.1 "cat /proc/net/bonding/bond0"
종료 -> Ctrl + C

// VMware에서 Network Adaptor 아이콘 -> 마우스 우클릭 -> Connect / Disconnect 를 이용하여 네트워크를 비활성화(장애)하면서 절체 테스트



> 본딩이 정상적으로 되었다. 이 때, addaptor의 상태를 disconnect 로 변경하면 밑의 사진처럼 바뀐다. 



> eth0 -> eth1 로 재빠르게 다른 인터페이스로 변경을 한다. 계속해서 ping이 되는 것을 확인할 수 있다.