티스토리 뷰

study/Network

linux bonding configuration

알 수 없는 사용자 2008. 8. 21. 00:00

[제목] Ethernet Channel Bonding by ifenslave

-여러개의 이더넷을 하나로 묶어 네트워크 대역폭을 늘리는 방법

- 작성자 : 김칠봉 <san2(at)linuxchannel.net>
   2001. 06. 30 : 최초작성
   2001. 09. 27 : 보완(강성일<sikang@casaturn.kaist.ac.kr>님의 지적)

- 관련 문서
    /usr/src/linux-2.2.x/Documentation/network/bonding.txt(커널 문서)
    또는
    /usr/share/doc/iputils-xxx/README.ifenslave(iputils-xxx 패키지)

*주)
이 문서는 /usr/share/doc/iputils-xxx/README.ifenslave 문서를 기준으로
작성되었습니다.

* 잘못된 점이나 보완하고자 하는 내용이 있으면 언제든지 환영합니다.
   이 문서에 대한 이후 보완된 점은 다음의 주소에서 찾을 수 있습니다.

   http://www.linuxchannel.net/docs/ethernet-channel-bonding.txt

--------------------------------------------------------

목자

0. 개요 및 배경

1. 제약 조건

2. 커널에서 지원하려면 ?

3. 필요한 패키지는?

4. Ethernet Channel Bonding 설정 및 확인
  4-1. /etc/modules.conf (또는 /etc/conf.modules)
  4-2. /etc/sysconfig/network
  4-3. /etc/sysconfig/network-scripts/ifcfg-bond0
  4-4. /etc/sysconfig/network-scripts/ifcfg-eth0
  4-5. /etc/sysconfig/network-scripts/ifcfg-eth1
  4-6. 시스템 재부팅 및 설정 확인(예)

5. 간단한 속도 테스트
  5-1. 테스트1 - 스위칭 허브 / 각각 하나의 이더넷 만을 사용
  5-2. 테스트2 - 스위칭 허브 / 각각 Ethernet Channel Bonding을 적용
  5-3. 테스트3 - 더미 허브 / 각각 Ethernet Channel Bonding을 적용
  5-4. 테스트 결과

6. FAQ
  6-1. SMP 시스템에서 안전(safe)합니까?
  6-2. 잘 지원하는 이더넷 카드는 ?
  6-3. bond Master(가상) 장치는 몇개까지 가능합니까?
  6-4. bond Slave(Ethernet) 장치는 몇개까지 가능합니까?
  6-5. Slave 장치중 하나가 죽는다면 어떤 현상이 있나요?
  6-6. 만약 이것(6-5의 질문)이 고쳐지면 bonding은 높은 성능을 낼 수 있습니까?
  6-7. 어떤 switches/system이 Ethernet Channel Bonding을 적용할 수 있습니까?
  6-8. bond0의 MAC address는 어느 장치의 것입니까?
  6-9. Ethernet Channel Bonding은 어떤 정책(용도)에 사용할 수 있습니까?
  6-10. 채널본딩을 적용했는데 원격에서 몇몇 서비스데몬에 접속할 수 없습니다.
  6-11. 채널본딩한 컴퓨터끼리는 빠르게 패킷이 전송되는데 외부 네트워크에서는
    그렇지 못합니다. 해결방법은?

7. 후기

==========================================================

0. 개요 및 배경

이 내용은 여러개(2개이상)의 Ethernet를 하나로 묶어서 네트워크 대역폭을
늘리는 방법입니다.

이 방법은 Beowulf 프로젝트 중 클러스터 제작시 사용하는 Ethernet Channel Bonding
입니다.(필자는 클러스터 제작경험이 없기 때문에 실제로 이렇게 적용하는지에
대해서는 아는 바가 없습니다.)

http://www.beowulf.org/software/bonding.html

관련 문서가 마침 KLDP에 있군요.
http://kldp.org/Translations/html/Cluster_QuickStart-KLDP/Cluster_QuickStart-KLDP-13.html

(웹서버와 DB서버와의 대역폭(Bandwidth)을 넓히는데 적당하겠음)


1. 제약 조건

Ethernet Channel Bonding 을 사용하면 몇가지 조건이 있습니다.

  1. 허브 장비가 스위칭이어야 성능을 제대로 발휘
      (EtherChannel 지원).
  2. 리눅스 커널에서는 Bonding 기능 지원이 필요.
  3. 기타, 성능좋은 Ethernet 2개 이상(가능한 같은 모델의 PCI 방식)

*성능을 제대로 내기 위해서는 양쪽 컴퓨터 모두 위와 같은 조건이어야함.
  즉, 리눅스 Bonding이나 Cisco 5500 switch, 또는 SunTrunking SunSoft driver처럼
  비슷한 기능이 양쪽 모두 구현되어 있어야 함.


*참고로)
필자의 네트워크 환경은 위의 조건에서 허브 장비가 EtherChannel 기능이 지원하지는
못하지만 불행중 다행이 스위칭 장비이어서 테스트가 가능했음.
나중에 나오는 테스트의 수치는 절대적인 수치가 아닌 테스트 그대로의 수치입니다.


2. 커널에서 지원하려면 ?

커널에서 지원하기 위해서는 다음과 같이 설정하고 커널을 컴파일하여야 한다.

Network device support  --->
  <*> Bonding driver support

멀티 Ethernet Channel을 사용하기 위해서 [Y]나 [M]으로 설정하여 컴파일합니다.
이 기능은, 이 모듈(Bonding)를 이용해서 두배의 속도를 가진 하나의 장치(bond)
처럼 작동합니다.
SISCO(시스코)에서는 "Etherchannel", Sun에서는 "Trunking", 리눅스에서는 "Bonding"
이라고 함.

성능을 제대로 내기 위해서 상대방 쪽에도 같은 조건이어야 함.
(리눅스 Bonding이나 Cisco 5500 switch, 또는 SunTrunking SunSoft driver처럼 비슷한
기능을 지원해야 함)


3. 필요한 패키지는?

레드햇 리눅스라면 iputils-xxx.rpm 패키지를 설치하면 됩니다.
즉 이 패키지 중에서 ifenslave 유틸리티를 이용하기 위해서 입니다.

예)
# rpm -qf /sbin/ifenslave
iputils-20000418-6
# rpm -ql iputils
/bin/ping
/sbin/ifenslave <--- 확인 사항
/usr/sbin/arping
/usr/sbin/clockdiff
/usr/sbin/ping6
/usr/sbin/rdisc
/usr/sbin/tracepath
/usr/sbin/tracepath6
/usr/sbin/traceroute6
/usr/share/doc/iputils-20000418
/usr/share/doc/iputils-20000418/README
/usr/share/doc/iputils-20000418/README.ifenslave
/usr/share/doc/iputils-20000418/RELNOTES
/usr/share/man/man8/arping.8.gz
/usr/share/man/man8/clockdiff.8.gz
/usr/share/man/man8/in.rdisc.8.gz
/usr/share/man/man8/ping.8.gz
/usr/share/man/man8/tracepath.8.gz
#

일반적으로 거의 이 패키지가 설치되어 있기 때문에 확인만 함.

*참고) 직접 ifenslave를 컴파일하는 방법 ---------------------------

  1. http://www.beowulf.org/software/ 에서 ifenslave.c 소스 파일을 받아옴.
  2. 컴파일 및 복사
    # gcc -O2 -o ifenslave ifenslave.c
    # cp ifenslave /sbin/ifenslave

이 소스 역시 Donald Becker <becker@cesdis.gsfc.nasa.gov>씨가 작성했군요.
라이센스는  GNU GPL이라고 명시되어 있군요.
--------------------------------------------------------


4. Ethernet Channel Bonding 설정 및 확인

커널 컴파일과 위의 패키지가 설치되어 있다면 한번 설정해 봅시다.
현재 시스템(리눅스)에 Ethernet이 하나 장착되어 있다고 가정하겠습니다.

커널 컴파일이 끝나면 곧바로 재부팅하지 말고 아래와 같이 파일을 생성 및 편집
합니다.
(두번째 이더넷은 이 과정이 끝나고 장착할 예정)

*주) ------------------------------------------------------
새로 장착할 두번째(또는 그이상) 이더넷은 가능한 PCI Ethernet 으로 첫번째(이미
장착되어 있는)과 같은 모델이면 더욱 좋습니다.(물론 같지 않아도 상관없음)
또한 새로 장착할 이더넷 역시 커널에서 지원해야합니다.
----------------------------------------------------------

[RedHat 리눅스 계열 일 경우]

수정 및 생성해야 할 파일

  - /etc/modules.conf (또는 conf.modules)
  - /etc/sysconfig/network
  - /etc/sysconfig/network-scripts/ifcfg-bond0
  - /etc/sysconfig/network-scripts/ifcfg-eth0
  - /etc/sysconfig/network-scripts/ifcfg-eth1
  ....
  - /etc/sysconfig/network-scripts/ifcfg-eth[N] <-- 시스템에 장착할 수 있는 N 만큼


4-1. /etc/modules.conf (또는 /etc/conf.modules)

# cd /etc
# vi modules.conf (커널 2.2.x는 conf.modules)
----------------------------------------------------------
## 중간 생략
##
alias   bond0   bonding
alias   eth0      3c59x  ## <-- 현재 장착되어 있는 이더넷
alias   eth1      3c59x  ## <-- 새로 장착할 두번째 이더넷
##
##
## bond0에서 0는 숫자 0입니다.
## bonding은 커널 모듈을 의미합니다.
## 3c59x 는 모듈이름입니다(3Com 905B-TX 10/100M).
----------------------------------------------------------

4-2. /etc/sysconfig/network

# cd /etc/sysconfig
# vi network
----------------------------------------------------------
## 현재 설정을 그대로 유지한채 다음 GATEWAYDEV 설정만 바꿈.
## 그래야 외부 네트워크로 패킷이 나갈 수 있습니다.
##
## 중간 생략
##
GATEWAYDEV=bond0
----------------------------------------------------------

4-3. /etc/sysconfig/network-scripts/ifcfg-bond0

# cd /etc/sysconfig/network-scripts
# mv ifcfg-eth0 ifcfg-bond0
# vi ifcfg-bond0
----------------------------------------------------------
DEVICE=bond0  ## <-- 이부분 만 수정함. 나머진 기존의 eth0를 그대로 유지
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
BROADCAST=XXX.XXX.XXX.255
NETWORK=XXX.XXX.XXX.0
NETMASK=255.255.255.XXX
IPADDR=XXX.XXX.XXX.XXX
----------------------------------------------------------

4-4. /etc/sysconfig/network-scripts/ifcfg-eth0

# vi ifcfg-eth0 (ifcfg-eth0 파일을 생성함)
----------------------------------------------------------
DEVICE=eth0  ## <-- 이부분이 ifcfg-eth1과 다르고 모두 동일
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
----------------------------------------------------------

4-5. /etc/sysconfig/network-scripts/ifcfg-eth1

# vi ifcfg-eth1 (ifcfg-eth1 파일을 생성함)
----------------------------------------------------------
DEVICE=eth1  ## <-- 이부분이 ifcfg-eth0과 다르고 모두 동일
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
----------------------------------------------------------

# pwd
/etc/sysconfig/network-scripts
# ls ifcfg-*
ifcfg-bond0  ifcfg-eth0  ifcfg-eth1  ifcfg-lo
#

이상으로 설정이 모두 끝났습니다.
시스템을 OFF 한 다음 두번째 이더넷을 장착합니다.
그리고 시스템을 ON해야겠죠?.

[RedHat 리눅스가 아닌 경우]

주*) 재부팅한 상태에서 명령을 내림

/sbin/ifconfig bond0 addresss netmask xxx.xxx.xxx.xxx broadcast xxx.xxx.xxx.xxx up
/sbin/ifenslave bond0 eth0
/sbin/ifenslave bond0 eth1
....
/sbin/ifenslave bond0 eth[n]

또는 간단하게
# /sbin/ifenslave -v eth0 eth1


4-6. 시스템 재부팅 및 설정 확인(예)

두번째 이더넷을 장착하고 시스템을 부팅하면 다음과 같은 메시지를 볼 수 있습니다.

Setting network parameters:                           [  OK  ]
Bringing up interface lo:                             [  OK  ]
Bringing up interface bond0:                          [  OK  ]
Bringing up interface eth0:                           [  OK  ]
Bringing up interface eth1:                           [  OK  ]


각 네트워크 인터페이스 확인하기

  [bond0 / eth0 / eth1 모두 같아야 할 부분]

  - 이더넷 MAC Address : HWaddr 00:xx:C9:xx:E7:xx
      즉 첫번째 이더넷(eth0)의 MAC Address 를 모두 따른다.
  - IP Address : inet addr:211.xxx.159.xxx
  - Brocast Address : Bcast:211.xxx.159.xxx
  - Net Mask :  Mask:255.255.255.xxx

  [서로 꼭 틀려야할 부분]

  - MASTER / SLAVE(********꼭 확인********)
     bond0 : ... RUNNING MASTER MULTICAST ...
     eth0/eth1 : ... RUNNING SLAVE MULTICAST ...
  - 이더넷 I/O Address(서로 다른 이더넷임을 확인)
     eth0 : Base address:0x7000
     eth1 : Base address:0x9000
  - 기타 패킷 양

# /sbin/ifconfig (또는 netstat -i)
bond0     Link encap:Ethernet  HWaddr 00:xx:C9:xx:E7:xx
          inet addr:211.xxx.159.xxx  Bcast:211.xxx.159.xxx  Mask:255.255.255.xxx
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1107 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0

eth0      Link encap:Ethernet  HWaddr 00:xx:C9:xx:E7:xx
          inet addr:211.xxx.159.xxx  Bcast:211.xxx.159.xxx  Mask:255.255.255.xxx
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:1721 errors:0 dropped:0 overruns:0 frame:0
          TX packets:554 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:9 Base address:0x7000

eth1      Link encap:Ethernet  HWaddr 00:xx:C9:xx:E7:xx
          inet addr:211.xxx.159.xxx  Bcast:211.xxx.159.xxx  Mask:255.255.255.xxx
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:1746 errors:0 dropped:0 overruns:0 frame:0
          TX packets:553 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x9000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
#
#
# ls /proc/sys/net/ipv4/conf
all  bond0  default  eth0  eth1  lo
#

여기까지 일단 확인되었으면,
게이트웨이나 네트워크 또는 외부 네트워크에 패킷을 보내고 받아본다.
(네트워크 이상유무 확인)

만약 네트워크 연결이 안되거나 속도가 현저하게 느리다면, 랜선이 허브와 이더넷에
올바르게 연결되어있는지 확인하거나 허브 장비에 해당 Link가 On되어 있는지 꼭
확인하기 바랍니다.

RX / TX 패킷 확인하기

# cat /proc/net/dev (또는 /sbin/ifconfig 의 결과에서 RX/TX 패킷 비교)
(행의 길이가 길어서 필요한 것만 옮겼음)

(단위 : 패킷 양)
Iface   RX-OK  RX-ERR  RX-DRP  RX-OVR      TX-OK  TX-ERR  TX-DRP TX-OVR
   lo    340       0       0       0        340      0       0      0
bond0      0       0       0       0       3313      0       0      0
eth0  14711       0       0       0       1657      0       0      0
eth1  14746       0       0       0       1656      0       0      0
#

*주)
RX : 받는 패킷(Receive)
TX : 보낸 패킷(Transmit)
-OK : 에러없이 받은 패킷
-ERR : 에러
-DRP : Drop
-OVR : Overrun

즉, 위의 결과는 RX / TX 패킷을 각각 eth0와 eth1으로 거의 동일하게 분배해서 보내고 받음을
알 수 있다.



5. 간단한 속도 테스트

필자의 네트워크 환경은 위의 조건에서 허브 장비가 EtherChannel 기능이 지원하지는
못하지만 불행중 다행이 스위칭 장비이어서 테스트가 가능했음.

(직접 테스트는 못해보았지만, 각각의 Lan선을 허브에 연결하는 것보다는 cross 케이블을
제작하여 직접 C/S구조를 만드는것이 훨씬 낫겠군요.)

따라서 다음에 나오는 테스트 결과의 수치는 절대적인 수치가 아님에 주의하시길
바랍니다.

[테스트 환경 및 방법]

   - 두 대의 리눅스 박스 준비
     하나(이하 '서버'라 칭함) : redhat 6.2(kernel 2.4.1), 3Com905B-TX 10/100M 2개
     둘(이하 '클라이언트') : redhat 7.0(kernel 2.4.4), Intel eepro100 2개
   - 허브는 스위칭 장비이며, EtherChannel 기능 없음
   - 10MBPS 더미 허브 추가 테스트
   - 허브에서 서버, 클라이언트의 각각의 이더넷으로 총 4개의 Lan 선 연결(RJ45용)
   - FTP를 이용하여 클라이언트에서 서버로 하나의 파일을 업/다운한 테스트
   - 테스트한 파일은 약 131M mpeg 파일 포맷임(시간을 재기위해서 큰 파일 이용)
   - 시간 관계상 테스트는 3번만 했으며, 그 중 두번째의 내용을 화면에 보임
   - 테스트 종류는 총 3가지로
     1. 스위칭 허브에서 각각 하나의 이더넷 만을 사용했을 경우(비교 기준)
     2. 스위칭 허브에서 각각 Ethernet Channel Bonding을 적용했을 경우(주 관심 대상)
     3. 더미허브에서 각각 Ethernet Channel Bonding을 적용했을 경우(더미 허브에서 궁금)


5-1. 테스트1 - 스위칭 허브 / 각각 하나의 이더넷 만을 사용

(비교 기준을 만들기 위해서 테스트함)

ftp> get SES990610.mpg  ## <--- 클라이언트에서 FTP 서버의 파일 다운로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xxx,159,xxx,xxx,xx).
150 Opening BINARY mode data connection for SES990610.mpg (137753375 bytes).
226 Transfer complete.
137753375 bytes received in 117 secs (1.1e+03 Kbytes/sec)  ## <--- 결과
ftp>
ftp> put SES990610.mpg  ## <--- 클라이언트에서 FTP 서버로 파일 업로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xx,159,xx,xxx,xx).
150 Opening BINARY mode data connection for SES990610.mpg
226 Transfer complete.
137753375 bytes sent in 117 secs (1.1e+03 Kbytes/sec)  ## <--- 결과
ftp>


5-2. 테스트2 - 스위칭 허브 / 각각 Ethernet Channel Bonding을 적용

(주 관심 대상)

ftp> get SES990610.mpg  ## <--- 클라이언트에서 FTP 서버의 파일 다운로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xxx,159,xxx,xxx,xx).
150 Opening BINARY mode data connection for SES990610.mpg (137753375 bytes).
226 Transfer complete.
137753375 bytes received in 64.7 secs (2.1e+03 Kbytes/sec)  ## <--- 결과 .... 헙??
ftp>
ftp> put SES990610.mpg  ## <--- 클라이언트에서 FTP 서버로 파일 업로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xxx,159,xxx,xxx,xx).
150 Opening BINARY mode data connection for SES990610.mpg
226 Transfer complete.
137753375 bytes sent in 61.1 secs (2.2e+03 Kbytes/sec)  ## <--- 결과 .... 헙??
ftp>


5-3. 테스트3 - 더미 허브 / 각각 Ethernet Channel Bonding을 적용

ftp> get SES990610.mpg  ## <--- 클라이언트에서 FTP 서버의 파일 다운로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xxx,159,xxx,xxx,xxx).
150 Opening BINARY mode data connection for SES990610.mpg (137753375 bytes).
226 Transfer complete.
137753375 bytes received in 290 secs (4.6e+02 Kbytes/sec)  ## <--- 결과
ftp>
ftp> put SES990610.mpg  ## <--- 클라이언트에서 FTP 서버로 파일 업로드
local: SES990610.mpg remote: SES990610.mpg
227 Entering Passive Mode (211,xxx,159,xxx,xxx,xxx).
150 Opening BINARY mode data connection for SES990610.mpg
226 Transfer complete.
137753375 bytes sent in 243 secs (5.5e+02 Kbytes/sec)  ## <--- 결과
ftp>


5-4. 테스트 결과

테스트1 - 스위칭 허브 / 각각 하나의 이더넷 만을 사용

  - 다운로드 : 137753375 bytes received in 117 secs (1.1e+03 Kbytes/sec)
  - 업로드 : 137753375 bytes sent in 117 secs (1.1e+03 Kbytes/sec)

테스트2 - 스위칭 허브 / 각각 Ethernet Channel Bonding을 적용
  - 다운로드 : 137753375 bytes received in 64.7 secs (2.1e+03 Kbytes/sec)
  - 업로드 : 137753375 bytes sent in 61.1 secs (2.2e+03 Kbytes/sec)

테스트3 - 더미 허브 / 각각 Ethernet Channel Bonding을 적용
  - 다운로드 :  137753375 bytes received in 290 secs (4.6e+02 Kbytes/sec)
  - 업로드 : 137753375 bytes sent in 243 secs (5.5e+02 Kbytes/sec)

테스트1 결과를 기준으로 볼 때 테스트2는 거의 약 2배의 속도를 내는군요.
반면 테스트3은 오히려 더 속도가 떨어진다는 것을 알 수 있습니다.
테스트3은 좀더 많은 테스트를 해봐야 알겠지만 일단 더미허브에서는 그 효과가
없다는 것을 짐작할 수 있습니다.

스위칭 허브에 양쪽 모두 Ethernet Channel Bonding을 적용했을 경우
정말 놀라운 속도(?)를 내군요.
따라서 웹서버와 DB서버/메일서버(POP3/IMAP)를 서로 Ethernet Channel Bonding
을 적용하면 적절하겠음.

*참고) 일반적인 내부 네트워크 환경 --------------------------------
특별한 경우가 아닌 이상 10/100M 허브 장비에 10/100M 이더넷을 사용합니다.
이는 10MBPS 를 기준으로 할때,(MBPS는 MBit Per Sec)

10MBPS = 10 * 1024 * (1/8)Kbytes * (1/sec) = 약 1,280 KBytes/sec

이므로, 테스트1의 결과(1,100KBytes/sec)는 특별한 상황(네트워크 장애)이 아닌
일반적인 내부 네트워크 환경이라고 말 할 수 있음.
----------------------------------------------------------


6. FAQ

*주)
이 FAQ는 /usr/share/doc/iputils-20000418/README.ifenslave 문서를 번역해 놓은
것입니다.

6-1.  SMP 시스템에서 안전(safe)합니까?

  네, 안전합니다.
  오래된 커널 2.0.xx에서 channel bonding 패치는 안전한 SMP가 아니었지만,
  이것은 안전한 SMP 시스템에서 출발 디자인되었습니다.

6-2.  잘 지원하는 이더넷 카드는 ?

  어떠한 이더넷 카드라도 지원합니다(예를들어, tulip 과 3com 3c905의 bonding).
  또한 1000M(Gigabit) 이더넷도 함께 bonding할 수 있습니다.

  *역주)
  이더넷은 우선적으로 리눅스 커널에서 지원해야합니다.

6-3.  bond Master(가상) 장치는 몇개까지 가능합니까?

  하나.

6-4. bond Slave(Ethernet) 장치는 몇개까지 가능합니까?

  시스템에 장착할 수 있는 개수 만큼 가능합니다.

  *역주)
  실제로 3개까지 설정해 보았으나 테스트하지는 못했음.


6-5.  Slave 장치중 하나가 죽는다면 어떤 현상이 있나요?

  현재, 이더넷 드라이브는 이 상황에서 잘 대처하지 못합니다.
  tulip 드라이버를 사용할 경우 멈추지는 않지만 이는 단지 패킷을 없애버립니다.

  *역주)
  필자가 테스트한 바로는 속도가 엄청나게 느려지더군요...

6-6. 만약 이것(6-5의 질문)이 고쳐지면 bonding은 높은 성능을 낼 수 있습니까?

   네,

6-7. 어떤 switches/system이 Ethernet Channel Bonding을 적용할 수 있습니까?

  Cisco 5500 시리즈 허브(EtherChannel 지원이 가능한지 확인 요망).
  SunTrunking 소프트웨어.

6-8. bond0의 MAC address는 어느 장치의 것입니까?

  첫번째 slave(eth0)의 MAC address입니다.
  만약 첫번째 slave 장치를 제거하면 MAC address는 첫번째 slave와 관련하여
  계속 할려고 시도할 것이다.
  만약 MAC address를 제거하고 싶다면 다음과 같이 해야합니다..

   # ifconfig bond0 down
   # modprobe -r bonding

  만약 MAC address를 다시 지정하고 싶다면, bond0 장치에 ifconfig(인터페이스설정)
  해야합니다.

  *역주)
  MAC address를 제거한다?...번역이??

6-9. Ethernet Channel Bonding은 어떤 정책(용도)에 사용할 수 있습니까?

   enslaving 기초한 Round robin.

  *역주)
  강성일<sikang@casaturn.kaist.ac.kr>님의 지적에 의해서 역주 설명을 인용하여 정정
  합니다.

  스케줄링의 기본이 되는 단순한 정책으로 각 자원(장치, 프로세스 등등) 을 돌아가면서
  사용하는 것을 의미하며, 관련된 곳이면 어디든지 사용될 수 있는 가장 간단한 방법중의
  하나로 대부분의 운영체제에서 스케줄링을 사용함.
  실시간 운영체제에서는 실시간 작업(프로세스)을 제외하고 시간과 별관계가 없는 것을
  Round robin으로 처리한다고 함.
  Round-robin scheduling(멀티유저 환경에서 CPU 시간을 할당하는 방법)

  DNS 설정에서 말하는 Round robin은 같은 호스트이름에 대해서 여러개의 다른 IP주소를
  지정하여 클라이언트가 랜덤하게 access 하는 기법을 말합니다

6-10. 채널본딩을 적용했는데 원격에서 몇몇 서비스데몬에 접속할 수 없습니다.

  이 FAQ는 강성일<sikang@casaturn.kaist.ac.kr>님이 피드백해준 내용을 정리한 것입니다.

  이더넷 채널 본딩을 적용하고 나면 네트워크 MASTER 인터페이스 장치이름이 eth0에서
  bond0로 바뀌게 됩니다.
  따라서 iptables이나 ipchains 등으로 방화벽을 설치하여 운영하는 환경에서는 방화벽 설정을
  해제하거나 방화벽 설정에서 eth0 부분을 bond0 으로 수정해야합니다.

  예)
    수정 전 :
    ipchains -A input -p tcp -s xxx.xxx.xxx.xxx -d xxx.xxx.xxx.xxx -i eth0 -j ACCEPT
    수정 후:
    ipchains -A input -p tcp -s xxx.xxx.xxx.xxx -d xxx.xxx.xxx.xxx -i bond0 -j ACCEPT

  물론 위의 설정은 bond0 인터페이스가 패킷의 출입구 역할을 할 경우에 해당됩니다.
  따라서, 라우팅 테이블을 보고 SLAVE가 아닌 인터페이스 장치에 대해서 방화벽 설정을
  수정해야합니다.

6-11. 채널본딩한 컴퓨터끼리는 빠르게 패킷이 전송되는데 외부 네트워크에서는
  그렇지 못합니다. 해결방법은?

  채널 본딩은 기본적으로 양쪽 모두 같은 조건에서 그 효과가 있습니다. 예를 들어
  원격의 호스트가 더미허브에 물려있다면 오히려 채널본딩하기 전보다 속도가 더 떨어질 수
  있습니다.
  이런 경우에는 채널본딩한 인터페이스를 내부IP주소로 설정하여 주로 내부네트워크용으로
  사용하는 방향으로 정하고, 이더넷 카드를 하다 더 장착하여 인터페이스를 활성한 다음 외부
  네트워크용으로 사용하는것이 좋습니다(GATEWAYDEV).