728x90
반응형
Bonding이란?


- NIC 카드 이중화로 여러 물리적인 NIC을 논리적으로 묶어 대역폭을 늘리거나 가용성을 위해 사용하는 방법

- Linux에서는 Bonding, Windows에서는 Teaming, Cisco에서는 EtherChannel이라 부름

- 표준은 Link Aggregation이라 하며 몇몇 본딩 모드는 스위치의 EtherChannel 기능이 지원되야한다
(EtherChannel이 off되어 있거나 지원하지 않는다면 몇몇 모드는 사용할 수 없거나 기능이 떨어짐)


Bonding Mode

1) mode 0 : Round-robin
첫번째 가능한 슬레이브부터 마지막 슬레이브까지 순차적으로 전송한다. 이 모드는 부하분산과 failover를 제공한다. 
active-active, 이론상 슬레이브 수만큼의 배수대로 대역폭을 확장가능하다. 스위치에서 지원한다면 hashing 없이 load balancing 된다.
예를 들어 2개의 NIC이 있다면 2개의 NIC에 패킷을 순차적으로 분배한다. [ A nic -> B nic -> A nic -> B nic 순]으로 패킷을 분산하며
한쪽 네트워크의 연결이 끈어지더라도 장애허용으로 인해 이를 보완하는 기능이 존재한다.
RR(RoundRobin)방식 로드밸런스. 인터페이스의 라운드로빈(대역폭 상승 + Failover)

2) mode 1 : Active-backup
bond에서 하나의 슬레이브만 활성화된다. 다른 슬레이브는 standby 상태로 대기하다. 활성중이 슬레이브가 fail 된 경우 standby 슬레이브가 활성화 된다.
대역폭은 활성화 된 슬레이브의 대역폭을 갖는다. primary를 직접 설정하지 않으면 failback 되지 않는다.
실제 사용시에는 2개의 스위치나 백본에 2개의 NIC이 연결되며 IDC같은 곳에서는 하나의 스위치에 2회선을 물려 사용하기도 한다.

3) mode 2 : balance-xor (load balancing + failover)
0과 비슷하지만 xor연산을 이용하여 목적지 Mac과 근원지 Mac을 이용하여 분배한다.
( (출발지 mac XOR 목적지 mac) modula 슬레이브 개수 ) fault tolerance 와 load balancing 을 위한 XOR 으로 설정한다.
이 방식은 인터페이스가 slave 네트워크 카드들의 하나에 대한 Mac address 로 imcoming request의 Mac address를 연결하는 방식이다.

4) mode 3 : broadcast (failover)
모든 슬레이브 인터페이스로 전송한다. 이것은 failover를 제공한다(mirror).
하나의 슬레이브만큼 대역폭을 갖는다. 특별한 상황에서 사용한다.
그 특별한 경우는 랜카드가 절대로, 절대로 죽어서는 안되고 패킷이 절대로 절대로 없어지면 안되는 서버에 사용된다.
스위치의 지원이 필요없다.

5) mode 4 / LACP : 802.3ad (link aggregation)
Dynamic Link Aggregation 정책으로 동작된다. 같은 speed와 duplex 설정을 공유하는
aggregation group을 스위치에서 만들어야한다. (switch 가 802.3ad 를 지원해야 한다)
송/수신은 active aggregator 안에서 모든 슬레이브에서 수행된다.
이론상 슬레이브 수만큼의 배수대로 대역폭을 확장가능한다.
그룹화에 따라 회선의 정책이 변경되어 무단절 네트워크 연결을 가능하게 만드는 방식

6) mode 5 : balance-tlb
스위치의 지원이 필요없다.  이 모드는 특별한 지원이 OS 자체적으로 구동가능한 방법으로
각 링크의 현재 로드에 따라 보내는 데이터는 분산되어 전송된다.
데이터의 수신은 현재 slave쪽으로만 가게되며 해당 slave가 fail시 다른 slave가 MAC주소를 넘겨받아 수신한다.
데이터를 보낼 때에 드라이버가 MAC address를 링크의 것으로 바꿔 보내지만 받을 때에는 그냥 남겨둔다.
송신패킷만 로드밸런싱하며 동일한 스위치에 NIC들이 연결되어있어야 한다.

7) mode 6 : balance-alb
mode 4 즉 802.3ad 를 스위치가 지원하지 않는다면 이 모드인 mode 6를 사용하면된다.
스위치의 지원이 필요없다.  이 모드는 mode 5와 같이 동작하지만 데이터 수신 시에서 load-balancing을 하는데
두개의 링크에서 ARP negotiation을 통하여 동작한다. 
MAC 주소 트릭을 이용하여 데이터를 보내고 받을 때에 load-balancing을 하게 된다.
송수신패킷 로드밸런싱하며 동일한 스위치에 NIC들이 연결되어있어야한다.


TIP

본딩을 하기 위해서는 서버뿐만 아니라 스위치에서도 설정이 필요하며,
mode 1인 active-backup은 굳이 스위치의 설정은 별도로 필요없다.
시스코 스위치에서 본딩을 하여 대역폭 확장을 확실히 하기위해서는
mode 0 가 아닌 mode 4(시스코에서는 LACP-link aggregation )를 써야한다.
본딩은 리눅스 커널에서 본딩 기능이 지원되어야하고 최적의 성능을 위해서는 스위치가 EtherCannel 이 지원되어야한다.




Bonding 설정


1) NetworkManager 종료

# service NetworkManager Stop

# chkconfig NetworkManager off

# service Network restart

Bonding을 구성할 경우 Port와 IP는 고정으로 할당한다. 하지만 NetworkManager가 실행된 경우

NetworkManager에서 Booting시 먼저 올라온 Nic의 Port에 우선적으로 IP를 할당하기 때문에 

Bonding 구성에 문제가 생길 수 있다. 그러므로 NetworkManager는 종료한다.

Rhel 7버전부터는 NetworkManager를 종료하면 이더넷이 전혀 안되므로 종료하지 않고 진행하거나

7버전부터 권장사항인 Teaming을 구성한다.


2) Bonding 구성

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

- ifcfg 파일에서 NAME=eth0, DEVICE=eth0으로 되어 있는데
NAME=eth0의 경우 NetworkManager가 인식하는 장치명이고
DEVICE=eth0의 경우는 Kernel이 인식하는 장치명이다.

1. 구성파일 만들기

# /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 use_carrier=0 primary=eth0"
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

# /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
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 use_carrier=0 primary=eth1"
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
MASTER=bond1
SLAVE=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

# /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
MASTER=bond1
SLAVE=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

* primary=eth0 옵션은 eth0(Active), eth1(Slave) 상태에서 eth0 장애시 eth1이 Master가 되어
Active 상태로 전환되는데 eth0이 복구된다면 eth1은 Master를 eth0으로 넘기고 자신은 다시 Slave가 된다.
(failback을 의미한다)


2. Static Router는 bond1에 추가

# /etc/sysconfig/network-scripts/route-bond1
10.10.0.0/16 via 10.10.0.1 dev bond1


3) Module 파일 설정

#/etc/modprobe.d/bond.conf 설정내에 아래의 사항을 추가
alias bond0 bonding
alias bond1 bonding
options bond0 mode=1 miimon=100
options bond1 mode=1 miimon=100

4) 모듈 로딩 및 네트워크 재시작
modprobe bonding # 본딩 모듈 로딩
/etc/init.d/network restart 혹은 service network restart

#5) 본딩 해제
# rmmod bonding


6) 본딩 구성 확인
/etc/sysconfig/network-scripts/route-bond1 파일에 설정하였고, 아래와 같이 route 명령어로 잘 설정되었음을 확인할 수 있다.

# route -n
Kernel IP routing tabl
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 상태를 확인할 수 있다.

# 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          #Active Device 명
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






네트워크 설정파일 옵션


TYPE=Ethernet
=> 네트워크 타입
ONBOOT=yes
=> 부팅시 자동으로 활성화

BOOTPROTO=none
=> Static (고정), DHCP, none(상속), bootp 형식등이 있음 

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

NM_CONTROLLED=no
=> NetworkManager가 컨트롤 할 수 없음
MASTER=bond0
=>MASTER는 Bonding 명

SLAVE=yes
=>대비책으로 구성 (Master는 bond0이므로 Slave 그룹에 가입)
BONDING_OPTS="mode=1 miimon=100"
=> 본딩 모드를 Active-Backup으로 설정하고 MII 링크 모니터링 주기를 100ms (0.1초) 로 설정

HWADDR=xx:xx:xx:xx:xx:xx : 맥주소 입력
TYPE= Ethernet : 이더넷 인터페이스의 종류
BOOTPROTO=static : ip할당 방식
– static : 고정 아이피 할당
– dhcp : 유동 아이피 할당
– bootp : dhcp 이전에 사용하던 방식
– none : 사용안함
DEFROUTE=yes : 디폴트라우트 사용 여부
PEERDNS=yes : dhcp 서버의 dns정보를 /etc/resolv.conf에 저장 여부
PEERROUTES=yes : dhcp 서버의 라우터 정보를 /etc/sysconfig/network에 저장 여부
IPV4_FAILURE_FATAL=yes : 설정이 잘 안됬을 때 IPv6 사용 여부(yes면 사용하지 않고 no면 사용)
IPV6INIT=yes : IPv6 사용 여부
NAME=enp0s3 : GUI 네트워크 설정 때 보이는 NIC 이름
ONBOOT=yes : 부팅시 자동 활성화 여부
BROADCAST= : 브로드캐스트 주소
IPADDR= : 아이피주소
NETMASK= : 넷마스크 주소
NETWORK= : 네트워크 주소
GATEWAY= : 게이트웨이 주소
DNS1= : DNS주소
DNS2= : DNS주소
USERCTL=no : 일반 사용자가 수정 할 수 있는지에 대한 여부
NM_CONTROLLED=yes : 네트워크 관리도구사용 여부

Miimon 옵션
- 링크 감시설정 모드( 밀리초 마다 인터페이스를 체크한다는 의미 )로 ms 단위를 사용하며 디폴트값이 0(사용안함)즉, 0으로 설정하면 Failover가

비활성화되는 부분으로 사용하며,기본적으로 리눅스에서는 100ms로 사용합니다.
반응형

'Linux' 카테고리의 다른 글

Linux Bonding fail over 문제해결  (0) 2018.08.08
Linux Network 인터페이스 안올라옴  (0) 2018.08.08
Linux firewall(RHEL7)  (0) 2018.08.08
Linux Teaming  (0) 2018.08.08
Linux eth0 사용하기(RHEL 7버전 이상)  (0) 2018.08.08

+ Recent posts