개요
Network Bonding(또는 Link Aggregation)은 두 개 이상의 물리 네트워크 인터페이스를 하나의 논리 인터페이스로 묶어 대역폭을 늘리거나 이중화(failover)를 구현하는 기술입니다. 리눅스에서는 bonding 커널 모듈과 /etc/sysconfig/network-scripts/ 설정 파일로 구성하며, mode 0(balance-rr)부터 mode 6(ALB)까지 다양한 Bonding 모드를 지원합니다.
Network Bonding 활용 사례
Network Bonding(Link Aggregation)이 실무에서 사용되는 주요 사례는 크게 두 가지입니다. 첫째, 서버의 트래픽이 단일 NIC 대역폭(보통 1Gbps)을 초과할 때 여러 NIC를 묶어 대역폭을 확장합니다(mode 0, 2, 4). 둘째, 한 NIC나 케이블에 장애가 발생해도 서비스가 중단되지 않도록 이중화(failover)를 구성합니다(mode 1). 데이터센터 서버, 스토리지 서버, 가상화 호스트에서 흔히 사용합니다.
실제 환경에서는 스위치 지원 여부에 따라 mode 선택이 달라집니다. 스위치 없이 바로 사용하려면 mode 1(active-backup)이 가장 안정적입니다. 스위치에서 LACP(802.3ad)를 지원하면 mode 4로 대역폭 확장과 failover를 동시에 구현할 수 있습니다. mode 0(balance-rr)은 스위치 설정 없이도 동작하지만, 일부 네트워크 장비와 호환성 문제가 발생할 수 있습니다.
What is bonding?
- 2개 이상의 물리적인 NIC(Network Interface Card)를 논리적인 NIC 1개로 묶어서 대역폭을 확장하거나 Active/Standby 구조로 구성하여 특정 NIC의 고장 또는 케이블의 단절로 인한 Disconnect를 예방하여 고가용성(High Availability) 또는 내결함성(Fault Tolerance)를 보장해줍니다.
Configuration
- RHEL(CentOS) 7 & 6
// Bonding Interface 정의
# vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
# vi /etc/sysconfig/network-script/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.12.117
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"
※BONDING_OPTS에 primary=eth0 추가 하여 인터페이스 우선 순위 설정
// Bonding으로 묶을 NIC들의 설정 변경
# vi/etc/sysconfig/network-script/ifcfg-eth0
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
# vi/etc/sysconfig/network-script/ifcfg-eth1
TYPE=Ethernet
NAME=eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
// CentOS 7 서비스 재시작
# systemctl restart network
// CentOS 6 서비스 재시작
# service network restart
- Common Configuration(BONDING_OPTS=mode)
0 balance-rr : (Round Robin) Load Balancing, 송신할 패킷마다 사용하는 물리적 NIC를 순차 변경
1 active-backup: Fault-Tolerance, bond내에서 한개의 Slave만 사용, 해당 NIC에 문제가 발생할 경우 다른 Slave가 Enable
2 balance-xor : Load Balancing, 소스와 목적지의 MAC을 XOR 연산을 통해 사용할 NIC를 결정하여 분배
3 Broadcast : Fault-Tolerance, 모든 Slave로 데이터전송(failover), 일반적으로는 잘 사용안함.
4 802.3ad : Dynamic Link Aggregation, IEEE 802.3ad 프로토콜을 이용하여 동적 Aggregation 작성 대역폭 상승, 부하 분산, Failover 지원(Switch LACP 구성 필요)
5 balance-tlb(TLB) : 적응형 송신 부하 분산, 송신패킷 로드밸런싱, 송신시 부하가 낮은 NIC이용 수신은 특정 NIC이용
6 balance-alb(ALB) : 적응형 부하 분산, 송수신패킷 로드밸런싱, 송수신시 부하가 낮은 NIC를 사용
miimon=100 : NIC가 활성화되어 있는지 확인하는 단위 시간 0.1초
- RHEL(CentOS) 5
// Bonding Interface 정의
# vi /etc/modprobe.conf
alias bond0 bonding
alias bond1 bonding
// NIC 설정 방식 동일
// 서비스 재시작
# service network restart
- Network Manager 서비스가 기동중일 경우 설정중인 파일이 서비스 재기동과 관계 없이 반영될 수 있으므로 Network Manager 서비스를 종료 후 작업을 추천 드립니다.
// CentOS 7 서비스 재시작
# systemctl stop NetworkManager
// CentOS 6 서비스 재시작
# service NetworkManager stop
- bonding 상태 확인
# cat /proc/net/bonding/bond0
# ethtool bond0

RHEL 8/9 및 Ubuntu에서의 Bonding
위 설정 방식은 CentOS 6/7(/etc/sysconfig/network-scripts/) 기반입니다. RHEL 8/9 및 Rocky Linux 9부터는 이 방식이 deprecated되었으며, NetworkManager와 nmcli 명령으로 bonding을 구성합니다. nmcli con add type bond로 bond 인터페이스를 생성하고 각 slave NIC를 추가하는 방식입니다. Ubuntu에서는 Netplan(/etc/netplan/*.yaml)에서 bonds: 블록으로 설정합니다. 운영 중인 OS 버전에 맞는 방식을 사용해야 설정이 영구 반영됩니다.
설정 완료 후 /proc/net/bonding/bond0 파일에서 현재 active slave, bonding mode, MII 상태를 실시간으로 확인할 수 있습니다. Kernel bonding 드라이버는 miimon 값(밀리초) 주기로 각 slave NIC의 링크 상태를 폴링하여 장애 감지와 failover를 자동 처리합니다.
참고
참고 문서: RHEL 7 Network Bonding 설정 가이드 · IEEE 802.3ad Link Aggregation