Bonding 설정
1. Bonding 개요
본딩이란 여러 개의 NIC를 논리적으로 하나로 묶어 NIC의 개수만큼의 대역폭을 확장하는 기술이다. 예를들어 100Mbps NIM 두 개를 묶어 200Mbps의 대역폭으로 구성 할 수 있다. 또한 NIC가 두 개이기 때문에 물리적인 경로 또한 두 개가 생긴다. 이것은 곧, 네트워크의 이중화라고 말 할 수 있다. 하나의 NIC 장애 시 남은 하나의 NIC로 통신이 가능하여 Fault It Tolerancedml 역할을 한다. 또한 두 개의 경로에서 패킷을 적절히 분배 할 수 있는 로드 밸런싱 기능까지 구현 할 수 있다.
2. 테스트 환경
- OS 커널 : 2.6.X 커널 사용
> Linux 2.6.x 커널에서는 Teaming이라는 용어 대신 bonding으로 바뀌었으면 2.4.x 커널에서 이용을 하려고 할 경우 ifenslave를 업데이트를 하거나 2.4.12 커널 이상으로 커널 컴파일을 실시하여야 한다.
> Ifenslave를 업데이트하여 사용을 할 경우 정상적으로 동작을 되지 않을 수 있으므로 2.6.x 의 버전을 설치하는 것을 추천한다.
- NIC 2개
$ mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
eth1: negotiated 100baseTx-FD flow-control, link ok
3. Bonding 구성
3-1. 네트워크 환경 구성 파일 설정
ifcfg-bond0 <= 추가 생성
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.1.138
NETMASK=255.255.255.0
ifcfg-eth0 수정 및 생성
- USERCTL=no <= root가 아닌 일반계정이 해당 인터페이스를 비활성화 가능 여부
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
MASTER=bond0
SLAVE=yes
BOOTPROTO=static
ONBOOT=yes
ifcfg-eth1 수정 및 생성
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
USERCTL=no
MASTER=bond0
SLAVE=yes
BOOTPROTO=static
ONBOOT=yes
network 수정 및 생성
- GATEDEV=bond0 <=추가 사항
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=byun
GATEWAY=10.0.1.1
GATEDEV=bond0
3-2. 모듈 구성
modprobe.conf bond 모듈 추가
- options bonding mode=6 <= bonding방식 지정 : 6
- options bond0 miimon=100 <= NIC Health체크 시간(1/100 sec)
vi /etc/modprobe.conf
alias eth0 e1000
alias eth1 e1000
alias scsi_hostadapter aic79xx
alias scsi_hostadapter1 ata_piix
alias usb-controller uhci-hcd
#
# bonding 추가
alias bond0 bonding
options bonding mode=6 <= bonding 방식 지정 : 6
options bond0 miimon=100 <= NIC Health 체크 시간(1/100 sec)
[Bonding 모드 종류]
0 : Balance-round robine 정책 : 첫 번째 가능한 슬레이브부터 마지막까지 순차적으로 전송한다. 이 모드는 부하분산과 장애 감내를 제공한다.
1 : Active-backup 정책 : bond에서 하나의 슬레이브만 활성화된다. 다른 슬레이브는 활성화된 슬레이브가 fail 된 경우에만 활성화 된다.
2 : Balance-XOR 정책 : [(출발지 MAC 주소와 도착지 MAC 주소의 XOR) modula 슬레이브 1개]에 기초하여 전송한다. 이것은 도착지 MAC 주소에 대해서 동일한 슬레이브를 선택하게 된다. 이 모드는 부하분산과 장애감지를 제공한다.
3 : Broadcast 정책 : 모든 슬레이브 인터페이스에 모든 것을 전송한다. 이것은 장애감내를 제공한다.
4 : 802.3ad (link aggregation) - switch에 aggregation 그룹생성이 필요하다.
5 : transmit load 밸런스로써 보내는 패킷만 밸런스 한다.
6 : receive와 transmit패킷을 밸런스 한다. 이때 5,6 은 하나의 스위치에 있을때만 동작한다.
bonding 모듈 올리기
- modprobe bonding <= 모듈 올리기
modprobe bonding
또는
insmod /lib/modules/"uname -r'/kernel/drivers/net/bonding/bonding.kr miimon=1000 mode=6
insmod와 modprobe의 차이는 insmod 같은 경우에는 직접 모듈을 찾아 올려줘야하는 것이고 modprobe는 그와 달리 알아서(의존성이 걸린 모듈까지 전부) 찾아서 올려주는 명령이다
모듈 확인 방법
- lsmod | grep bonding <= 모듈 확인
lsmod | grep bonding <= 모듈 확인
$ lsmod | grep bonding <= 모듈 확인
bonding 68840 0
네트워크 IP 주소 정보
- ifconfig 확인 => 모두 3개의 인터페이스가 활성화 되었으며 실제 인터페이스에서는 “SLAVE”라는 상태 정보가 생성되어 있다.
- UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
- UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
- UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
$ ifconfig
bond0 Link encap:Ethernet HWaddr 00:0D:61:35:16:9C
inet addr:10.0.1.138 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr: fe80::20d:61ff:fe35:169c/64 Scope:Link
UP BROADCAST RUNNING MASTERMULTICAST MTU:1500 Metric:1
RX packets:72815 errors:0 dropped:0 overruns:0 frame:0
TX packets:67823 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6308545 (6.0 MiB) TX bytes:25702842 (24.5 MiB)
eth0 Link encap:Ethernet HWaddr 00:0D:61:35:16:9C
UP BROADCAST RUNNING SLAVEMULTICAST MTU:1500 Metric:1
RX packets:44950 errors:0 dropped:0 overruns:0 frame:0
TX packets:44091 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3851533 (3.6 MiB) TX bytes:24180496 (23.0 MiB)
eth1 Link encap:Ethernet HWaddr 00:0D:61:35:16:9D
UP BROADCAST RUNNING SLAVEMULTICAST MTU:1500 Metric:1
RX packets:27865 errors:0 dropped:0 overruns:0 frame:0
TX packets:23732 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2457012 (2.3 MiB) TX bytes:1522346 (1.4 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:194 errors:0 dropped:0 overruns:0 frame:0
TX packets:194 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13022 (12.7 KiB) TX bytes:13022 (12.7 KiB)
3-3 구성 상태 확인 및 검증
bond0 구동 현황 파악
- Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005) <= bonding 버전
- Bonding Mode: adaptive load balancing <= Bonding Mode
- Currently Active Slave: eth0 <= 현재 Active한 REAL NIC
- MII Status: up <= Link 상태
- MII Polling Interval (ms): 100 <= Fail 시 전환
- MII Status: up <= Link 상태
- Link Failure Count: 0 <= OS startup 이 후 Link Fail 건 수
- Permanent HW addr: 00:0d:61:35:16:9c <= MAC 주소
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005) <= bonding 버전
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0d:61:35:16:9c
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0d:61:35:16:9d
RX / TX 패킷 확인하기
$ cat /proc/net/dev (또는 /sbin/ifconfig 의 결과에서 RX/TX 패킷 비교)(단위 : 패킷 양)
(행의 길이가 길어서 필요한 것만 옮겼음)
Inter- |Receive |Transmit face |bytes packets |bytes packets
lo: 13222 198 13222 198
bond0: 8704648 99674 27088019 89807
eth0: 5074179 58607 24916076 55252
eth1: 3630469 41067 2171943 34555
sit0: 0 0 0 0
*주)
RX : 받는 패킷(Receive)
TX : 보낸 패킷(Transmit)
-OK : 에러없이 받은 패킷
-ERR : 에러
-DRP : Drop
-OVR : Overrun
즉, 위의 결과는 RX / TX 패킷을 각각 eth0와 eth1으로 거의 동일하게 분배해서 보내고 받음을 알 수 있다.
'리눅스' 카테고리의 다른 글
[명령어] chkconfig 명령어 (0) | 2013.09.29 |
---|---|
CentOS 6에서 SELinux을 해제하는 방법 (1) | 2013.09.29 |
SSH를 사용하여 미러링을 수행하는 방법 (0) | 2013.09.29 |
[리눅스] yum X window 설치 (0) | 2013.09.29 |
[리눅스] at 명령어 (0) | 2013.09.29 |