'IP bonding'에 해당되는 글 1건

minzkn의 "Gentoo linux 에서의 IP bonding 구축 설치기록"

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

Gentoo linux 에서의 IP bonding 환경 구축
1. Kernel 설정
우선 저의 Gentoo Linux 환경에서 Linux kernel 2.6.12이하버젼에서는 IP bonding 을 사용하면 시스템이 굉장히 불안해졌습니다. 이에 대해서 좀더 명확히 말씀드리고 싶지만 정신건강을 위해서 2.6.14 이상의 버젼에서 구축하시기를 권장합니다.
Kernel에서 다음의 옵션이 Module 로 설정되어 있는지 확인합니다.
인용:
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 모듈을 올릴때 이러한 옵션을 지정해줄수 있습니다. 기본정책을 사용하지 않고 별도로 정책을 사용하시려면 "/etc/modules.autoload.d/kernel-2.6" 에 추가하면 됩니다. 기본값은 "bonding miimon=100 mode=1" 인것으로 보시면 됩니다. 보다 자세한 내용은 Kernel 문서를 참조하세요.

2. ifenslave 설치
다음과 같이 하여 ifenslave 를 설치합니다.
인용:
bash# emerge ifenslave

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

3. Network configuration
"/etc/conf.d/net" 에서 아래의 예제를 참조하시어 적절히 수정하시면 됩니다.
아래의 예제는 eth0 가 master가 되고 eth1 이 slave 가 되어 192.168.xx.xx 로 bond0 를 만들어 묶는 것입니다. 이때 eth0와 eth1은 보통 "null" 을 주시면 무난할겁니다.
인용:
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 주소가 모두 같게 나오는것도 흥미로운 부분입니다.
인용:
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



참고문서
http://www.gentoo-wiki.com/index.php?title=HOWTO_Setup_Bonded_ethernet_adapters&redirect=no
크리에이티브 커먼즈 라이센스
Creative Commons License
Posted by minzkn

트랙백 주소 :: http://blog.minzkn.com/trackback/132

댓글을 달아 주세요

  1. yundream 2007/05/28 17:29  댓글주소  수정/삭제  댓글쓰기

    독특하면서도 유용한 기능이군요.
    이론상으로는 패킷을 인캡슐레이션 하고나서, 각각의 이더넷에잘 던져주면 될지 싶기도하고.
    들어오는 패킷은 라운드로빈하게 들어올거라 생각되는데, 하나의 버퍼에서 처리하게 하면 될려나요.