왜 링크 이중화가 필요한가
단일 NIC 구성에서는 케이블 하나가 끊기거나 스위치 포트 하나가 죽으면 서버 전체가 네트워크에서 사라진다. DB 마스터나 스토리지 게이트웨이처럼 순간 단절도 허용되지 않는 노드에서는 치명적이다. 여기에 대역폭 문제도 겹친다. 10G 한 포트로 부족한 트래픽을 억지로 몰아넣으면 특정 링크만 포화되고 나머지는 논다. NIC 본딩은 물리 인터페이스 여러 개를 하나의 논리 인터페이스로 묶어, 한쪽이 죽어도 트래픽이 살아있는 링크로 넘어가게 하고 대역폭도 합산한다.
본딩 모드 선택 기준
본딩에는 여러 모드가 있지만 실무에서 갈리는 건 스위치 협조가 필요한지 여부다. 스위치 설정 권한이 없으면 active-backup, 있으면 802.3ad(LACP)가 사실상 정답이다.
| 모드 | 스위치 설정 | 대역폭 | 용도 |
|---|---|---|---|
| active-backup (1) | 불필요 | 단일 링크 | 장애조치만 필요할 때 |
| balance-xor (2) | 정적 EtherChannel | 합산 | LACP 미지원 스위치 |
| 802.3ad (4) | LACP 필요 | 합산 | 대역폭+이중화 동시 |
LACP의 동작 원리
LACP(802.3ad)는 서버와 스위치가 LACPDU를 주기적으로 교환하며 링크 묶음(aggregation group)의 상태를 상호 확인하는 프로토콜이다. 정적 묶음과 달리, 케이블은 살아있지만 반대편이 응답하지 않는 반쪽 장애까지 감지해 해당 링크를 자동으로 뺀다. 핵심은 xmit_hash_policy다. 이 해시 정책이 어떤 패킷을 어느 물리 링크로 보낼지 결정하는데, 단일 TCP 세션은 항상 같은 링크에 묶이므로 세션 하나가 링크 대역폭을 넘을 수는 없다. 다중 세션 환경이라야 합산 효과가 난다.
netplan으로 LACP 본딩 구성
우분투 최신 버전 기준 netplan 설정이다. L3+L4 해시로 세션 분산을 높이고, 빠른 장애 감지를 위해 lacp-rate를 fast로 둔다.
network:
version: 2
ethernets:
ens1f0: {}
ens1f1: {}
bonds:
bond0:
interfaces: [ens1f0, ens1f1]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
transmit-hash-policy: layer3+4
up-delay: 200
addresses: [10.0.10.21/24]
routes:
- to: default
via: 10.0.10.1
sudo netplan apply 후 반영된다. mii-monitor-interval은 링크 상태를 100ms마다 점검한다는 뜻이다.
상태 확인과 검증
설정만으로 끝내면 안 된다. 반드시 커널이 보고하는 실제 상태를 봐야 한다. 특히 "Partner Mac Address"가 스위치 MAC으로 채워졌는지가 LACP 협상 성공의 결정적 신호다. 00:00:00:00:00:00이면 스위치 쪽 LACP가 꺼져 있거나 포트 채널 설정이 안 된 것이다.
#!/bin/bash
# bond0 상태 요약 및 협상 검증
cat /proc/net/bonding/bond0 | grep -E "MII Status|Partner Mac|Slave Interface|Aggregator ID"
# 활성 슬레이브 수 확인
active=$(grep -c "MII Status: up" /proc/net/bonding/bond0)
echo "active links (bond+slaves): ${active}"
# 실장애 시뮬레이션: 한쪽 링크만 내려보고 세션 유지 확인
sudo ip link set ens1f0 down
sleep 1
grep "MII Status" /proc/net/bonding/bond0
실무에서 자주 밟는 함정
- 양쪽 불일치: 서버는 LACP인데 스위치는 정적 포트채널이면 루프나 간헐적 단절이 생긴다. 반드시 양쪽 모드를 일치시킨다.
- 단일 스트림 기대: 백업 하나가 20G 나올 거라 기대하면 실망한다. 해시 정책상 세션 하나는 한 링크에 고정된다.
- MTU 불일치: 슬레이브들의 MTU가 다르면 본드 MTU가 꼬인다. 점보프레임 쓸 땐 슬레이브·본드·스위치 3자를 모두 9000으로 맞춘다.
- MLAG 미구성: 두 링크를 서로 다른 스위치에 꽂아 스위치 이중화까지 노린다면 스위치 간 MLAG/vPC가 전제되어야 한다. 그냥 꽂으면 협상이 안 된다.
정리
LACP 본딩은 링크·스위치 포트 단일 장애를 흡수하면서 다중 세션 대역폭을 합산하는, 비용 대비 효과가 확실한 이중화 수단이다. 다만 스위치 쪽 설정과 반드시 짝을 맞춰야 하고, 도입 후에는 실제로 한쪽 링크를 내려보는 장애 주입 테스트로 페일오버를 검증해야 한다. 설정 파일이 아니라 /proc/net/bonding/bond0의 Partner MAC이 진짜 증거다.