Gentoo IP bonding

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기
Gentoo Linux 에서의 IP bonding구축



Gentoo Linux 에서의 IP bonding구축

  • 작성자
    조재혁([1])


  • 고친과정
    2008년 4월 30일 : 처음씀
    2013년 3월 19일 : KLDP로부터 문서 마이그레이션


IP bonding 이란?

간략히 설명하자면 여러장의 NIC를 마치 하나의 NIC로 묶어서 모든 트래픽을 각 NIC에 균등하게 일정한 규칙에 의해서 분산시키는 것을 말합니다.

Kernel 설정

우선 저의 Gentoo Linux 환경에서 Linux kernel 2.6.12이하버젼에서는 IP bonding 을 사용하면 시스템이 굉장히 불안해졌습니다.

이에 대해서 좀더 명확히 말씀드리고 싶지만 정신건강을 위해서 2.6.14 이상의 버젼에서 구축하시기를 권장합니다.

Kernel에서 다음의 옵션이 Module 로 설정되어 있는지 확인합니다.


코드 예제 1.1: 커널 옵션 확인하기

Device Drivers/Network device support/Bonding driver support [M]



IP bonding 에 대한 커널문서는 커널소스에서 "Documentation/networking/bonding.txt" 위치에 있으니 한번쯤 읽어보시면 좋겠습니다. 커널을 빌드하면 "bonding.ko" 모듈이 생겼을겁니다. 정상적으로 Gentoo 를 설치하여 사용중이라면 특별히 "/etc/modules.autoload.d/kernel-2.6" 에 추가해줄필요는 없을겁니다. 하지만 만약 bonding 모듈이 자동으로 올라가지 않으면 추가해주시면 되겠습니다. 그리고 bonding 에 대한 정책이 여러가지가 있는데 bonding 모듈을 올릴때 이러한 옵션을 지정해줄수 있습니다.


기본 bonding 처리 정책을 세밀하게 설정하고 싶으시다면 "/etc/modules.d/bond"(파일이 없다면 아래와 같이 파일을 만드시면 됩니다.)에 적절히 module option을 설정하시고 "/sbin/update-modules"을 실행시켜준후에 시스템을 재부팅 하시면 됩니다. 주로 기본정책을 설정하는 mode와 감시주기를 설정하는 miimon값을 많이 다루게 되는데 여기서 mode는 보통 0또는 1을 많이들 사용하는것 같습니다. 0은 균등하게 배분하여 사용하는 방식으로 운용되며 1은 하나만 쓰다가 NIC가 사용불능이 되면 다른 NIC로 바꿔 사용합니다.


코드 예제 1.2: /etc/modules.d/bond

# read /usr/src/linux/Documentation/networking/bonding.txt for help!

alias bond0 bonding
options bond0 mode=0 miimon=100
#alias bond1 bonding<br/> <nowiki>#options bond1 -o bonding1 arp_interval=200 arp_ip_target=10.0.0.1

# Parameters:
# arp_interval:arp interval in milliseconds (int)
# arp_ip_target:arp targets in n.n.n.n form (array of charp)
# arp_validate:validate src/dst of ARP probes: none (default), active, backup or all (charp)
# downdelay:Delay before considering link down, in milliseconds (int)
# lacp_rate:LACPDU tx rate to request from 802.3ad partner (slow/fast) (charp)
# max_bonds:Max number of bonded devices (int)
# miimon:Link check interval in milliseconds (int)
# mode:Mode of operation : 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp)
# primary:Primary network device to use (charp)
# updelay:Delay before considering link up, in milliseconds (int)
# use_carrier:Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int)
# xmit_hash_policy:XOR hashing method: 0 for layer 2 (default), 1 for layer 3+4 (charp)


ifenslave 설치

다음과 같이 하여 ifenslave 를 설치합니다.


코드 예제 2.1: ifenslave 이머지 하기

bash# emerge ifenslave


또는 커널소스에 보시면 "Documentation/networking/ifenslave.c" 소스가 있는데 이것을 직접 컴파일하여 "/sbin/ifenslave" 에 저장하셔도 됩니다.

Network configuration

"/etc/conf.d/net" 에서 아래의 예제를 참조하시어 적절히 수정하시면 됩니다. 아래의 예제는 eth0 가 master가 되고 eth1 이 slave 가 되어 192.168.xx.xx 로 bond0 를 만들어 묶는 것입니다. 이때 eth0와 eth1은 보통 "null" 을 주시면 무난할겁니다.


코드 예제 3.1: /etc/conf.d/net

config_eth0=("null")
config_eth1=("null")

slaves_bond0="eth0 eth1"
config_bond0=("192.168.xx.xx broadcast 192.168.xx.xx netmask 255.255.255.0")
routes_bond0=("default gw 192.168.xx.1")

depend_bond0() {
    need net.eth0 net.eth1
}


IP bonding 을 사용해보고서

우선 eth0 또는 eth1 어느한쪽의 LAN cable 을 뽑아도 모든 Network 은 정상적으로 연결이 유지되는것을 보였습니다.

하지만 경우에 따라서는 ping 의 경우 약간의 loss가 일시적으로 발생한 경우가 있기는 합니다.

그리고 여러 호스트에 연결하여 많은 트래픽을 사용할때 약간의 체감속도가 빨라졌습니다.

하지만 1:1 호스트간의 트래픽 향상은 없었습니다.

즉, 1 vs 다수의 host 연결시에 꽤 좋은 성능을 느낄수 있었습니다.

정상적으로 설치가 되었으면 ifconfig 명령으로 다음과 같이 나오는것을 확인할수 있을겁니다.

bond0, eth0, eth1 의 MAC 주소가 모두 같게 나오는것도 흥미로운 부분입니다.


코드 예제 4.1: ifconfig 실행하기

bond0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.xx.xx Bcast:192.168.xx.xx Mask:255.255.255.0
inet6 addr: fe80::20e:cff:fe5a:c405/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:10428636 errors:0 dropped:0 overruns:0 frame:0
TX packets:8704619 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1987897250 (1895.8 Mb) TX bytes:1630747353 (1555.2 Mb)

eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet6 addr: fe80::20e:cff:fe5a:c405/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:5612670 errors:0 dropped:0 overruns:0 frame:0
TX packets:4352310 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1033339780 (985.4 Mb) TX bytes:2955265436 (2818.3 Mb)

eth1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet6 addr: fe80::20e:cff:fe5a:c405/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:4815966 errors:0 dropped:0 overruns:0 frame:0
TX packets:4352309 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:954557470 (910.3 Mb) TX bytes:2970449213 (2832.8 Mb)
Interrupt:10


참고문서