리눅스에서의 본딩(Bonding)은 두 개 이상의 물리적 네트워크 인터페이스 카드(NIC)를 묶어서 하나의 논리적 인터페이스로 동작시키는 기술이다. 고가용성과 네트워크 부하 분산 등의 이점을 위해 사용한다.
개인용 PC도 네트워크 포트가 여러개인 경우가 있고 특히나 서버 컴퓨터의 경우는 무조건 포트가 4개 이상으로 구성된다.
물론 저 중에서 1개의 포트만 사용해도 동작에 전혀 문제가 없다.
하지만 고장은 서버의 포트, 케이블, 스위치의 포트 어느쪽에서든지 발생할 수 있고, 장애 발생 상황에도 기능이 유지되는 고가용성을 위해 여러개를 사용하여 다중포트로 구축하는 것이 권장된다.
위의 사진과 같이 2개 이상의 연결을 사용하면, 혹여 1개의 연결에서 장애가 발생하더라도 통신이 지속될 수 있다.
다만 각각의 이더넷 포트는 개별 IP를 할당받아 사용할 것이고 IP를 기준으로 동작하던 서비스는 서버의 연결이 살아있더라도 장애가 발생한 포트의 IP로는 통신이 불가능 할 것이다.
이때 bonding을 사용하여 논리적 네트워크 인터페이스를 사용할 수 있다.
여러 이더넷을 묶어 하나의 논리적 인터페이스로 만들어 IP를 할당해주면 해당 IP의 네트워크 인터페이스는 소속된 모든 물리적 인터페이스에 장애가 발생하기 전까지 정상동작하게 된다.
RHEL8.4가 설치된 R740서버에서 진행한다.
먼저ifconfig
, ip a
등의 명령을 사용하여 현재 사용중인 네트워크 인터페이스를 확인한다.
총 4개의 포트가 있기 때문에 이더넷 인터페이스 4개(eno1, eno2, eno3, eno4)가 존재하고 그 중, 물리적으로 LAN 케이블이 연결되어있는 eno1과 eno2가 활성화되어있음을 볼 수 있다.
idrac과 virbr0는 R740에 iDRAC이 들어있어 자동으로 생성된 인터페이스다. 이 글에서는 다루지 않는다.
eno1과 eno2를 bond0라는 이름으로 bonding을 생성할 것이다.
/etc/sysconfig/network-scripts/
폴더 내부의 네트워크 인터페이스 설정 파일들을 수정 해 준다.
bond0 설정파일, ifcfg-bond0
를 생성하고 내용을 작성한다.
TYPE=Bond
BONDING_MASTER=yes
NAME=bond0
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.1.140 #bonding에 할당할 IP
NETMASK=255.255.255.0 #bonding에 할당할 IP의 서브넷
GATEWAY=192.168.1.1 #bonding에 할당할 IP의 게이트웨이
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100 primary=eno1"
NM_CONTROLLED=yes #NetworkManager를 사용하는 버전의 OS에서 필수
Bonding Mode 설명
0(Round Robin)
- bonding 인터페이스에 묶인 포트(SLAVE)에 순차적으로 한 번씩 사용하여 데이터 전송
1(Active-Backup)
- bonding 인터페이스에 묶인 포트(SLAVE) 중 한 포트씩 우선 사용하는데 장애가 발생하면 다른 포트 사용
2(Balance-XOR)
- XOR 연산하여 MAC기반으로 포트를 정해서 데이터 전송
3(Broadcast)
- bonding 인터페이스에 묶인 포트(SLAVE)에 모두 데이터 전송
4(802.3ad(LACP))
- EEE 802.3ad 프로토콜에 따라 포트를 선정하여 데이터 전송
5(Balance-TLB)
- 송신 패킷 로드밸런싱, 송신 시 부하가 낮은 포트(SLAVE)를 이용하여 데이터 전송
6(Balance-ALB)
- 송수신 패킷 로드밸런싱, 송수신시 부하가 낮은 포트(SLAVE)를 이용하여 데이터 전송
Bonding 파라미터 설정 설명
ONBOOT=yes/no
- 부팅 시 디바이스 활성화
NM_CONTROLLED=yes/no
- 네트워크 인터페이스를 NetworkManager로 통제 허용 활성화/비활성화. 옵션을 주지 않는 경우 no처럼 동작.
- network를 사용하는 7버전 이하 리눅스에서는 필요하지 않음.
BOOTRPTO=none
- 디바이스 정보를 "Static", "dhcp"로 적용 여부
USERCTL=no
- 일반 유저가 해당 디바이스를 컨트롤하지 못함
LAN Card staus 설정 설명
million
- 랜카드가 정상적으로 작동을 하는지에 대한 여부를 체크하는 옵션(default:0)
- 링크 감시 여부로 100ms로 설정
물리 이더넷 인터페이스인 eno1과 eno2의 설정파일,ifcfg-eno1
, ifcfg-eno2
에는 아래의 내용을 추가한다.
MASTER=bond0
SLAVE=yes
modprobe를 사용하여 bonding 인터페이스를 모듈에 추가해준다.
먼저 /etc/modprobe.d/bonding.conf
에 alias를 추가해준다.
alias bond0 bonding
# alias 없이 bonding으로 명령어를 사용해도 된다. alias가 있으면 bonding 인터페이스 이름인 bond0로 지칭 가능
modprobe bond0
명령으로 모듈에 bonding을 올려준다.
systemctl restart NetworkManager
명령으로 NetworkManager를 재실행해준다.
다시 ifconfig
, ip a
등의 명령을 사용하여 네트워크 인터페이스 목록을 확인해보면 bond0가 생성되어 설정한 IP가 할당되었음을 볼 수 있다.
/proc/net/bonding/bond0
에서 bonding의 상태를 확인할 수 있다.
nmcli dev
: 네트워크 디바이스 확인
nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
: bond0 이름으로 bonding 생성
nmcli con mod [인터페이스 이름] master [bonding이름]
: 인터페이스를 본딩에 연결
ifenslave [bonding이름] [인터페이스 이름]
: 지정한 인터페이스를 지정한 bonding의 구성 slave로 등록
nmcli con up [인터페이스 이름]
: NetworkManager 재실행 없이 특정 인터페이스/bonding만 재활성화
'Server' 카테고리의 다른 글
iODD 아이오드 (0) | 2024.02.05 |
---|---|
MultiPath 멀티패스 (0) | 2024.01.16 |
DNS 서버 구축 (0) | 2024.01.08 |
NTP 서버와 클라이언트 (0) | 2024.01.04 |
CLI로 고정 IP 할당 (0) | 2023.12.27 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!