리눅스 본딩 구성

2014.02.18 00:02 | 리눅스
리눅스에서 본딩 구성하는 방법 (Redhat 계열)

아래와 같은 시나리오로 본딩을 구성해보자.

1. NIC는 총 4개
2. eth0, eth2를 bond0으로 묶고, eth1, eth3을 bond1로 묶음
3. bond0을 Default Gateway로 잡고 필요한 Static Route는 bond1에 설정

반복되는 부분 때문에 조금 길지만... 아래와 같이 구성해 보았다.

# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.0.101
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

DNS1=168.126.63.1
DNS2=168.126.63.2
BONDING_OPTS="mode=1 miimon=100"
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
MASTER=bond0
SLAVE=yes
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
MASTER=bond0
SLAVE=yes
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
IPADDR=10.10.0.101
NETMASK=255.255.255.0

BONDING_OPTS="mode=1 miimon=100"
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
MASTER=bond1
SLAVE=yes
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
MASTER=bond1
SLAVE=yes
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
# /etc/sysconfig/network-scripts/route-bond1
10.10.0.0/16 via 10.10.0.1 dev bond1

일단 파란색으로 표기한 공통 부분에 대해 알아보자.

ONBOOT=yes
=> 부팅시 자동으로 활성화

BOOTPROTO=none
=> bootp나 dhcp를 사용하지 않음 (static으로 구성)

USERCTL=no
=> 일반 유저가 컨트롤 할 수 없음 (root 권한 필요)

NM_CONTROLLED=no
=> NetworkManager가 컨트롤 할 수 없음

다음은 녹색으로 표시한 본딩 옵션에 대해 알아보자.

BONDING_OPTS="mode=1 miimon=100"
=> 본딩 모드를 Active-Backup으로 설정하고 MII 링크 모니터링 주기를 100ms (0.1초) 로 설정

본딩 모드는 아래와 같다. 보통 mode 1 또는 5를 많이 사용하는 듯.

mode=0 (round-robin)
mode=1 (active-backup)
mode=2 (balance-xor)
mode=3 (broadcast)
mode=4 (802.3ad)
mode=5 (balance-tlb)
mode=6 (balance-alb)

Static Route는 특정 대역을 Default Gateway가 아닌 bond1로 보내기 위해 /etc/sysconfig/network-scripts/route-bond1 파일에 설정하였고, 아래와 같이 route 명령어로 잘 설정되었음을 확인할 수 있다.

[root@CentOS ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.10.0.0       0.0.0.0         255.255.255.0   U     0      0        0 bond1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 bond0
10.10.0.0       10.10.0.1       255.255.0.0     UG    0      0        0 bond1
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 bond0
169.254.0.0     0.0.0.0         255.255.0.0     U     1007   0        0 bond1
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 bond0

network-scripts 설정이 완료되면 service network restart 한번 해주고, 아래와 같이 bonding 상태를 확인할 수 있다.

[root@CentOS ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:15:5d:00:02:00
Slave queue ID: 0
Slave Interface: eth2
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:15:5d:00:02:25
Slave queue ID: 0
[root@CentOS ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:15:5d:00:02:24
Slave queue ID: 0
Slave Interface: eth3
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 00:15:5d:00:02:26
Slave queue ID: 0
신고

  1. BlogIcon dummy
    2014.02.19 13:42 신고

    4개의 랜카드중에 2개만 연결되어 있어서(eth0, eth2) CentOS 6.5 설치 후 두개만 bond0로 설정 했는데

    network restart 시키면

    bond0 인터페이스 활성화중 입니다: Determining if ip address 172.27.200.95 is already in use for device bond0...

    이렇게 나옵니다. 구글해봐도 딱히 해결 방법을 못찾겠네요.

    그렇다고 인터넷이 안되는건 아닙니다만...

    resolv.conf 에 DNS 설정한게 재부팅하면 리셋이 되는데 이거 해결 방법이 없을까요?

    구글링해서 이거저거 다 해봤는데도 안되네요.

    • BlogIcon snpbox
      2014.02.19 23:16 신고
      수정 및 삭제

      ifcfg-bond0 파일에 ARPCHECK=no를 추가해보세요.
      그리고 DNS도 resolv.conf에 직접 설정하지 마시고
      ifcfg-bond0 파일에 DNS1=168.126.63.1 처럼 설정하세요.

    • BlogIcon dummy
      2014.02.20 16:11 신고
      수정 및 삭제

      ARPCHECK=no 추가하니 에러는 사라졌는데

      DSN1을 추가해도 설정이 안되네요. ifcfg 붙은 파일들에다가 전부다 써줘봐야 하나...

      ps. NetworkManager 구동안되게 해뒀더니 괜찮아졌네요.

  2. 칼린츠
    2014.04.14 15:53 신고

    음... RHEL6 버전대에서는 이 부분이 생략되어도 되는지는 모르겠지만
    /etc/modprobe.conf에 "alias bond0 bonding" 기입 내용이 없는 것 같은데...
    요즘 버전에서는 모듈 올리지 않아도 정상 동작하나요?

    아, 그리고 서버 관리하면서 겪었던 일인데 일부 서버, 또는 일부 NIC장치, 드라이버에 따라서 본딩 구성 시 간헐적으로 아무런 이유 없이 NIC 링크가 업/다운을 반복하는 경우가 있습니다.
    주로 브로드컴 네트워크 장치에서 문제가 발생되더군요.
    RHEL5 버전대에서 발생했던 커널과 NIC 드라이버 관련 버그였는데요,
    /etc/modprobe.conf 내용에 options "NIC 드라이버 모듈명" disable_msi=1을 추가하여
    MSI, MSI-X 기능을 해제함으로써 해결이 가능합니다.

    예) options bnx2 disable_msi=1

    RHEL5.5 이상 버전에서 부터 이 문제가 해결되었다고는 하네요.
    그냥 여기 방문하시는 분들이 참고하시면 좋을 것 같아서요~ ㅎㅎ