젠투리눅스에서의 IP bonding구축
Kernel 설정 ¶우선 저의 Gentoo Linux 환경에서 Linux kernel 2.6.12이하버젼에서는 IP bonding 을 사용하면 시스템이 굉장히 불안해졌습니다.
이에 대해서 좀더 명확히 말씀드리고 싶지만 정신건강을 위해서 2.6.14 이상의 버젼에서 구축하시기를 권장합니다.
Kernel에서 다음의 옵션이 Module 로 설정되어 있는지 확인합니다.
Device Drivers/Network device support/Bonding driver support [M] 기본 bonding 처리 정책을 세밀하게 설정하고 싶으시다면 "/etc/modules.d/bond"(파일이 없다면 아래와 같이 파일을 만드시면 됩니다.)에 적절히 module option을 설정하시고 "/sbin/update-modules"을 실행시켜준후에 시스템을 재부팅 하시면 됩니다. 주로 기본정책을 설정하는 mode와 감시주기를 설정하는 miimon값을 많이 다루게 되는데 여기서 mode는 보통 0또는 1을 많이들 사용하는것 같습니다. 0은 균등하게 배분하여 사용하는 방식으로 운용되며 1은 하나만 쓰다가 NIC가 사용불능이 되면 다른 NIC로 바꿔 사용합니다. # read /usr/src/linux/Documentation/networking/bonding.txt for help! alias bond0 bonding options bond0 mode=0 miimon=100 #alias bond1 bonding #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 를 설치합니다.
bash# emerge ifenslave 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 |
Sin has many tools, but a lie is the handle which fits them all. |