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 로 설정되어 있는지 확인합니다.
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 를 설치합니다.
또는 커널소스에 보시면 "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" 을 주시면 무난할겁니다.
IP bonding 을 사용해보고서...
우선 eth0 또는 eth1 어느한쪽의 LAN cable 을 뽑아도 모든 Network 은 정상적으로 연결이 유지되는것을 보였습니다. 하지만 경우에 따라서는 ping 의 경우 약간의 loss가 일시적으로 발생한 경우가 있기는 합니다.
그리고 여러 호스트에 연결하여 많은 트래픽을 사용할때 약간의 체감속도가 빨라졌습니다. 하지만 1:1 호스트간의 트래픽 향상은 없었습니다. 즉, 1 vs 다수의 host 연결시에 꽤 좋은 성능을 느낄수 있었습니다.
정상적으로 설치가 되었으면 ifconfig 명령으로 다음과 같이 나오는것을 확인할수 있을겁니다. bond0, eth0, eth1 의 MAC 주소가 모두 같게 나오는것도 흥미로운 부분입니다.
참고문서
http://www.gentoo-wiki.com/index.php?title=HOWTO_Setup_Bonded_ethernet_adapters&redirect=no
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




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