bonding 구성시 active / standby NIC 지정하기

jellypo의 이미지

서버 운영하다보면 자주 하는것들인데
bonding 구성에 대해 검색해보면 한글 검색 결과들은

CentOS 계열에서
/etc/modprobe.conf 에
alias bond0 bonding
options bond0 mode=1 miimon=100

이렇게 설정하여 active-standby 구성까지 하는 것까지만 설명되어 있고
Primary Slave 까지 설정하는 방법은 못 찾겠더군요.

[root@mm2 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0 (October 7, 2008)
 
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
...
하략
...

Primary Slave: None

이렇게 설정되면 인터페이스 숫자 낮은 것을 우선 active slave로 설정하는 모양.

방법 1.
/etc/modprobe.conf
options bond0 mode=1 miimon=100  primary=eth0

방법 2.
/etc/sysconfig/network-script/ifcfg-bond0
BONDING_OPTS="mode=1 miimon=100 use_carrier=0 primary=eth0"

방법 1 혹은 2 중에 하나 대로 하면 됩니다.

그외에
max_bonds=3 downdelay=0 updelay=10000
이런 것도 옵션으로 줄 수 있는데 뭔지 잘 모르겠네요.

modprobe로 bonding 모듈 올릴 때 위 옵션 적용하려면

modprobe bonding mode=1 miimon=100 primary=eth0
이렇게 하면 되는 모양인데, 이건 좀 불확실해요. 직접 테스트한게 아니라서요. ^^;

dipole의 이미지

모듈 올리실때 modprobe bonding mode=1 miimon=100 primary=eth0 이렇게 하시는게 맞구요...

mode 에서 1 이라는 숫자가 아닌 스트링으로 active-backup 이렇게 주었던 것으로 기억합니다.
그리고 slave 들은 등록을 할때...

echo +eth0 > /sys/class/net/bond0/bonding/slaves
echo +eth1 > /sys/class/net/bond0/bonding/slaves

이런 형태로 등록하면 됩니다.
인터페이스 숫자 낮은 것을 우선하는건 아니고 primary 로 지정한 디바이스명이 우선 동작하는 방식입니다.
예를 들어 primary=eth0 일때...

eth0 가 active 가 되면 항상 eth0 를 이용해 동작합니다.
eth0 가 inactive 가 되면 나머지 slave 중에 하나로 동작합니다.

너는 누구냐?

jellypo의 이미지

본딩 적용 해보며 알게 된 점 정리입니다.

1. mode는 숫자로 적어야 하나 문자열로 적어야 하나?

modinfo bonding
해보면

parm: mode int, description "Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor"

mode int(숫자) 를 적으라고 되어 있습니다.
bonding 버전 올라가면서

parm: mode:Mode of operation; 0 for balance-rr, 1 for active-backup, 2

설명이 바뀌었네요.
스트링로 써도 되고 숫자로 써도 되는 것 같습니다.

2. GATEWAYDEV냐 GATEDEV 냐?

비슷한 예로 GATEWAYDEV=bond0 이런 설정을 /etc/sysconfig/network 파일에 적어줘야 하는데 GATEDEV=bond0 으로 적어도 되는 모양입니다.

이런 설정에 대해 명시된 문서가 있으면 좋겠는데, 커널 문서(/usr/src/버전/Documentation/networking/bonding.txt)에도 안 나와있네요.

3. 본딩 정책은 ifcfg-bond0에 적어야 하나 /etc/modules.conf 에 적어야 하나?

저는 주로 Active-Backup(mode=1)로 eth0, eth1을 묶어서 bond0을 만듭니다.

CentOS에서 리붓 없이 모듈 적용시 뭔가 제대로 안 되는 경우가 많았는데, /etc/sysconfig/network-scripts/ifcfg-bond0 에 본딩 정책을 적어놓고 사용해서 그런게 아닌가 추정 중입니다.

본딩 모듈은 modprobe bonding 하지 않아도 service network restart 하면 일단 모듈 자체는 올라오지만 cat /proc/net/bond0/info (낮은 버전의 경우, 본딩 모듈 최근 버전은 /proc/net/bonding/bond0 에 있을겁니다)을 보면 본딩 정책이 라운드 로빈으로 되어 있는 경우를 자주 목격했습니다.

그런데 모듈을 올리면서 옵션을 명시하지 않았기 때문에 가장 기본값인 mode=0, 즉 라운드 로빈으로 모듈을 올리고 나서 네트워크 설정을 하기 때문에 RR로 본딩 설정이 되는 것으로 추정 중입니다.

라운드 로빈 이외의 정책 사용시, 모듈쪽에 본딩 옵션을 주는 것이 어떨까 싶습니다. 아니면 커맨드 라인에서 본딩 설정을 하던지.

3번 항목은 테스트를 해봐야겠네요. 생각 정리할 겸 작성해 보았습니다.