SEARCH
TOOLBOX
LANGUAGES
modified on 2018년 4월 23일 (월) at 15:15 ••• 12,211 views

메뉴얼:Bonding

MikroTik Korean Wiki

Manual:Interface/Bonding

요약

본딩은 다 수의 이더넷 종류의 인터페이스를 하나의 가상 링크로 묶어줌으로써, load balancing과 failover를 기대할 수 있는 기술이다.

사양

• Packages required: system
• License required: Level1
• Submenu level: /interface bonding
• Standards and Technologies: None
• Hardware usage: Not significant


퀵셋 가이드

각각의 라우터 Router1, Router2에 2개의 NIC가 장착되어있다 가정하고, Bonding을 설정해 본다.

• Slave가 될 인터페이스에 IP 주소를 부여하지 않는다.
• Router1와 Router2에 bonding 인터페이스를 추가.
Router1 설정
[admin@Router1] interface bonding> add slaves=ether1,ether2
Router2 설정
[admin@Router2] interface bonding> add slaves=ether1,ether2

본딩 인터페이스에 IP부여

[admin@Router1] ip address> add address=172.16.0.1/24 interface=bonding1
[admin@Router2] ip address> add address=172.16.0.2/24 interface=bonding1

Router1에서 확인:

[admin@Router1] interface bonding> /pi 172.16.0.2
172.16.0.2 ping timeout
172.16.0.2 ping timeout
172.16.0.2 ping timeout
172.16.0.2 64 byte ping: ttl=64 time=2 ms
172.16.0.2 64 byte ping: ttl=64 time=2 ms
Icon-note.png

알림: 본딩인터페이스는 상대편과 통신이 되기까지 약간의 시간이 소요됩니다.


링크 모니터링

링크 모니터링 옵션 중 하나를 활성화하는 것은 중요하다.

위의 예시에서, Bonding 링크(bonding에 slave로 추가한 인터페이스)중 하나가 fail이여도 bonding 드라이버는 fail 상태에 빠진 링크로 계속 패킷을 보내기 때문에 네트워크의 성능 저하를 초래할 것이다.

현재 RouterOS의 bonding은 slave 장치들의 상태를 모니터하기 위한 MII 와 ARP monitoring 두 가지 방법을 제공한다.

Bonding 드라이버 제약 때문에 두 가지 방식을 동시에 사용하는 것은 불가능하다.

ARP 모니터링

ARP 모니터링은 ARP 쿼리를 보내고, 응답을 링크가 작동하는지 지표로써 사용한다.

한편으로, 이는 트래픽이 실질적으로 링크를 통해 흘러가고 있는지 보증하기 위한 용도로도 사용된다.

본딩 모드를 balance-rr 또는 balance-xor 모드로 설정했다면, 스위치는 모든 링크에 대하여 패킷이 균등하게 분배되도록 설정되어야 한다.

그렇지 않으면, ARP 타겟으로 부터 받은 응답들은 모두 같은 링크로 되돌아와서 다른 링크들이 fail상태로 보이게 될 것이다.

ARP monitoring은 link-monitoring, arp-ip-targets, arp-interval 이 세 가지 파라메터를 설정함으로써 사용할 수 있다. 각 옵션의 의미는 후술하도록 하겠다.

고가용성 설정에도 유용한 다수의 ARP 타겟을 지정할 수도 있다.

오직 한 개 target만 설정되면, target 자체가 down 될 수 있다. 추가적인 target을 지정해두는 것은 ARP monitoring의 신뢰성을 높인다.

ARP monitoring 사용.

[admin@Router1] interface bonding> set 0 link-monitoring=arp arp-ip-targets=172.16.0.2

[admin@Router2] interface bonding> set 0 link-monitoring=arp arp-ip-targets=172.16.0.1

이 예제에서는 arp-interval 값을 바꾸지 않았다. RouterOS는 arp-interval default값이 100ms로 설정되어있다.

link monitoring이 올바르게 동작하는지 확인하기 위해서 (bonding된) 케이블 중 하나를 제거해보자.

arp monitoring이 링크의 fail상태를 감지하기 까지 ping에서 몇번의 timeout을 확인할 수 있을 것이다.

[admin@Router1] interface bonding> /pi 172.16.0.2
172.16.0.2 ping timeout
172.16.0.2 64 byte ping: ttl=64 time=2 ms
172.16.0.2 ping timeout
172.16.0.2 64 byte ping: ttl=64 time=2 ms
172.16.0.2 ping timeout
172.16.0.2 64 byte ping: ttl=64 time=2 ms
172.16.0.2 64 byte ping: ttl=64 time=2 ms
172.16.0.2 64 byte ping: ttl=64 time=2 ms

MII 모니터링

MII monitoring은 오직 local 인터페이스의 상태를 모니터한다. RouterOS에서 두 가지 방법으로 MII monitoring을 설정할 수 있다.(ROS v6 미만)

• MII Type 1 – 장치 드라이버는 링크가 up인지 down인지 결정한다. 만약 장치 드라이버가 이 옵션을 지원하지 않으면 링크는 항상 up이라 표시될 것이다.
• MII Type 2 - 커널 내부에서 호출되어 링크가 up상태인지 확인하는 절차이다.(점차 사라지게 될 절차이다.) 이 방법은 효율성이 떨어지지만, 모든 장치에서 사용될 수 있다. 이 모드는 MII type1이 지원되지 않는 장비에서만 사용하도록 한다.

가장 큰 단점은 MII monitoring은 링크가 up 상태로 감지되었더라도 실질적으로 링크에서 패킷이 흘러다니는지 보증할 수 없다는 것이다.

MII monitoring은 link-monitoring 모드와 mii-interval 파라메터를 세팅함으로써 설정된다.

MII Type monitoring을 활성화.

 [admin@Router1] interface bonding> set 0 link-monitoring=mii
 [admin@Router2] interface bonding> set 0 link-monitoring=mii

mii-interval 을 기본값(100ms)로 설정해 둘 것이다.

(bonding된) 케이블을 하나 제거하면, ARP link monitoring에 비하여 링크의 fail상태가 거의 즉각적으로 감지될 것이다.

본딩 모드

802.3ad

802.3ad 모드는 IEEE표준이며, LACP(Link Aggregation Control Protocol) 라고도 불린다.

자동 aggregation 설정이 포함되기에, 스위치에서는 최소한의 설정만이 필요하다.

이 표준에서는 frame들이 순서대로 전달되도록 강제하므로, connection에서는 패킷이 잘못된 순서로 들어와서는 안된다.

또한, bonding으로 묶을 장비들이 반드시 같은 속도와 duplex모드를 사용해야하고, MII link monitoring'과만 동작하도록 강제한다.

LACP는 외부로 나가는 패킷들을 프로토콜의 헤더정보로 얻은 해시값을 바탕으로 활성화된 포트들로 분산하고, 외부에서 들어오는 패킷들은 활성화된 어떤 포트에서도 받아들인다. 해싱에는 이더넷 출발지와 목적지 주소가 사용되며, VLAN 태그가 정보가 있다면 사용하고, IPv4/IPv6 출발지 목적지 주소도 사용한다. transmit-hash-policy 파라메터에 따라 해싱 방법이 달라진다.

Icon-note.png

알림: layer-3-and-4 해시모드는 LACP와 완벽하게 호환되지 않는다.


설정 예제 802 3ad.jpg

fault tolerance와 throughput증가를 위해 더 많은 인터페이스가 추가 될 수 있다.


Router 설정

/inteface bonding add slaves=ether1,ether2 mode=802.3ad lacp-rate=30secs link-monitoring=mii transmit-hash-policy=layer-2-and-3

balance-rr (Round-Robine)

이 모드로 세팅되면, 패킷은 첫 번째 슬레이브부터 마지막 슬레이브로 순차적으로 전송된다.

Balance-rr은 동일한 TCP/IP 커넥션에 속하는 패킷을 다수의 인터페이스를 통하여 보낼 수 있는 유일한 모드이다.

다수의 송신 및 수신 링크를 사용할 경우 패킷은 종종 잘못된 순서로 수신될 수 있고, 이는 세그먼트의 재전송으로 이어진다. UDP 프로토콜등의 잘못된 순차의 패킷에 대하여 내성이 있는 클라이언트 소프트웨어 경우에는 문제가 되지 않는다.

링크들을 묶기 위하여 알맞는 스위치 포트 설정이 필요하지만, 많은 스위치들은 balance-rr모드를 지원하지 않는다.

전술한 'Quick setup guide'에서는 balance-rr을 사용한 것을 보았듯이, 설정하기에 매우 간단하다. balance-rr모드는 무선 링크의 bonding에도 유용하다.

그러나, bonding에 사용되는 모든 링크는 같은 대역폭을 필요로한다. 만약에 bonding된 slave중에 하나의 대역폭이 떨어지면, bonging링크의 총 대역폭은 slave 링크 중에서 가장 느린 것과 같아진다.

active-backup

이 모드는 오직 하나의 활성화된 slave를 통해 패킷을 전송한다.

추가적인 slave 포트는 활성화된 slave가 fail 상태에 빠진 경우에만 활성화된다.

Bonding 인터페이스의 MAC 주소는 스위칭 혼동을 피하기 위해 활성화된 포트의 MAC 주소로 사용한다.

Active-backup은 상호 연결된 다수의 스위치에서 고가용성 설정을 위한 가장 좋은 선택이다.

Icon-note.png

알림: 해당 모드에서는 ARP monitoring은 양쪽의 라우터가 바로 연결되어 있으면, 올바르게 동작하지 않는다. 이러한 설정에서는 mii-type1 또는 mii-type2 monitoring을 사용하거나 스위치를 라우터 사이에 두어야 한다.


balance-xor

이 모드는 외부로 나가는 패킷들을 프로토콜의 헤더정보로 얻은 해시값을 바탕으로 활성화된 포트들로 분산하고, 외부에서 들어오는 패킷들은 활성화된 어떤 포트에서도 받아들인다.

이 모드는 표준화 된 것이 아니고 layer-3-and-4 hash policy에서 동작하는 것을 제외하고 LACP와 매우 유사하다.

broadcast

포트들이 Broadcast mode로 설정되었을 때, fault tolerance를 위하여 모든 슬레이브 포트가 목적지로 같은 패킷을 보낸다. 이 모드는 부하분산을 제공하지 않는다.

balance-tlb

이 모드는 외부로 나가는 트래픽을 상대편에 따라 분산한다. 각 링크는 각기 다른 속도와 duplex모드로 사용할 수 있고, 다른 모드와는 다르게 특별한 스위치 설정이 필요하지 않다. 이 모드의 단점은 MII link monitoring 만을 지원한다는 것과 들어오는 트래픽이 분산되지 않고, 'primary'로 설정된 링크로 들어온다는 것이다.

tlb 설정 예제

최대 대역폭이 10Mbps(ether1) 최대 대역폭이 5Mbps(ether2)인 두개의 링크를 가진 라우터가 있다고 가정하자. 첫번째 링크의 최대 대역폭이 더 크므로 'primary' 링크로 지정하자.

/interface bonding add mode=balance-tlb slaves=ether1,ether2 primary=ether1
No additional configuration is required for the switch.

스위치에는 특별한 설정이 필요하지 않다.

Balance tlb.jpg

위의 이미지는 balance-tlb모드의 동작방법을 설명한다. 라우터는 스위치에 연결된 모든 클라이언트들과 양 링크의 총 대역폭인 15Mbps로 통신할 수 있으나, 앞에서 보았듯, balance-tlb모드는 들어오는 트래픽을 분산하지 않는다. 이 예제에서 클라이언트는 라우터에 설정된 primary링크의 10Mbps로 라우터와 통신하게 된다.

balance-alb

balance-alb모드는 기본적으로 balance-tlb와 같으나, 들어오는 트래픽을 분산시킬 수 있다. 이 모드의 유일한 단점은 MAC주소를 변경할 수 있는 디바이스 드라이버가 필요하다는 것이다. 대부분의 저가형 랜카드들은 이를 지원하지 않는다.

Property Description

Property Description
arp (disabled | enabled | proxy-arp | reply-only; Default: enabled) 인터페이스의 Address Resolution Protocol이다.
  • disabled - 인터페이스가 ARP를 사용하지 않는다.
  • enabled - 인터페이스가 ARP를 사용한다.
  • proxy-arp - 인터페이스가 ARP proxy 기능을 사용한다.
  • reply-only - 인터페이스는 "/ip arp" 테이블에서 정적으로 지정한 IP/MAC 주소에서 보낸 ARP요청에만 응답한다.
arp-interval (time; Default: 00:00:00.100) ARP 요청의 주기를 밀리초 단위로 지정한다.
arp-ip-targets (IP address; Default: ) link-monitoring이 arp로 지정 되었을 때 모니터링할 IP 타켓주소이다..","로 구분하여 여러 주소를 지정 할 수 있다.
down-delay (time; Default: 00:00:00) 링크가 fail 상태인 것을 감지하였을 때 down-delay 만큼 인터페이스를 비활성화 한다. mii-interval의 배수로 지정해야 한다.
lacp-rate (1sec | 30secs; Default: 30secs) Link Aggregation Control Protocol rate specifies how often to exchange with LACPDUs between bonding peer. Used to determine whether link is up or other changes have occurred in the network. LACP tries to adapt to these changes providing failover.
link-monitoring (arp | mii | none; Default: mii) link monitoring 방법. (링크가 up인지 down인지)
  • arp - ARP를 이용하여 상대편 인터페이스로 통신이 가능한지 확인하기 위해 사용.
  • mii - 링크 상태를 확인하기 위해 Media Independent Interface(MII)를 사용한다. 링크 상태 확인은 디바이스 드라이버에 의존한다.
  • none - link monitoring을 사용하지 않는다.
Note: 몇몇 bonding모드는 올바른 작동을 위하여 link monitoring을 요구한다.
mii-interval (time; Default: 00:00:00.100) 모니터링 주기를 설정한다.
mode (802.3ad | active-backup | balance-alb | balance-rr | balance-tlb | balance-xor | broadcast; Default: balance-rr) 본딩 정책 설정
  • 802.3ad -IEEE 802.3ad dynamic link aggregation. 이 모드에서 인터페이스들은 각기 같은 속도로 작동하는 그룹으로 묶인다. fault tolerance와 부하분산을 제공한다.transmit-hash-policy로 외부로 나가는 트래픽이 어느 slave로 통할 것인지 선택된다. more>
  • active-backup - 링크 백업을 제공한다. 한 번에 하나의 slave포트만 활성화되며 나머지는 active가 fail 상태일 때 active로 지정된다. more>
  • balance-alb - 적응형 부하분산으로 balance-tlb와 비슷하지만, MAC 주소를 바꿀 수 있는 디바이스 드라이버를 필요로 한다. more>
  • balance-rr - 라운드로빈 방식의 부하분산. bonding 인터페이스의 slave들은 데이터를 순차적으로 전송하고 받는다. 부하분산과 fault tolerance를 제공한다. more>
  • balance-tlb - 외부로 나가는 트래픽은 각 slave의 부하에 따라 분산되나, 들어오는 트래픽은 분산되지 않고 현재 slave로 들어온다. 만약 수신중인 slave가 fail상태에 빠지면 다른 slave가 fail상태에 빠진 slave의 MAC주소를 가지게 된다. more>
  • balance-xor - transmit-hash-policy에 따라 전송된다. 이 모드는 부하분산과 fault tolerance를 제공한다. more>
  • broadcast - 같은 데이터를 한 번에 모든 slave에서 송신한다. 이는 fault tolerance를 제공하나, 몇몇 느린 머신에서는 속도를 떨어뜨린다. more>
mtu (integer; Default: 1500) byte 단위의 Maximum Transmit Unit
name (string; Default: ) bonding 인터페이스의 이름
primary (string; Default: ) 'primary'로 사용할 인터페이스. 만약 primary인터페이스가 fail 상태에 빠지는 경우에만 다른 slave들을 사용한다. 이 옵션은 active-backup에서만 사용한다.
slaves (string; Default: none) bonding에 사용될 ','로 구분된 최소 2개의 이더넷 인터페이스류
up-delay (time; Default: 00:00:00) 링크가 up상태가 되면 bonding 인터페이스를 up-delay 만큼 비활성화하였다가 다시 활성화한다. mii-interval의 배수를 값으로 사용한다.
transmit-hash-policy (layer-2 | layer-2-and-3 | layer-3-and-4; Default: layer-2) balacne-xor 와 802.3ad 모드의 slave에 적용할 패킷 송신에 사용할 해시 정책.
  • layer-2 -802.3ad 에 호환되는 알고리즘으로, 하드웨어의 MAC주소를 XOR한 값으로 해시값을 생성한다. 이 알고리즘은 네트워크 상의 특정한 상대편에 같은 slave를 통하여 모든 트래픽을 보내도록 한다.
  • layer-2-and-3 - 802.3ad 에 호환되는 알고리즘으로, 2계층과 3계층 프로토콜 정보의 조합을 해시값을 만들기 위하여 사용한다. 하드웨어의 MAC주소와 IP주소를 XOR한 값으로 해시값을 생성한다. 이 알고리즘은 네트워크 상의 특정한 상대편에 같은 slave를 통하여 모든 트래픽을 보내도록 하며, 비 IP 트래픽에는 layer-2 정책과 같다. 이 정책은 대부분의 목적지에 도달하기 위하여 3계층 게이트웨이 장비가 필요한 환경에서 layer-2 정책만을 사용하는 것보다 더욱 균형잡인 분산을 위하여 사용한다.
  • layer-3-and-4 - 802.3ad 에 완벽하기 호환되는 알고리즘은 아니다. 가능하다면 더 상위계층의 프로토콜 정보를 사용하여 해시값을 생성하며, 특정한 상대편으로의 트래픽을 다수의 slave를 통하여 전송할 수 있도록 하지만, 하나의 connection이 다수의 slave를 통하여 전송되지 않는다. 단편화한 TCP 패킷이나 UDP패킷과 다른 모든 IP 프로토콜 트래픽에서 출발지와 목적지 포트 정보는 생략되며, 비 IP 트래픽에는 layer-2 정책과 같다.

Notes

링크의 fail상태 감지와 failover는 Intel의 제품과 같은 값나가는 랜카드가 저렴한 제품부도 확연하게 좋은 성능을 발휘한다. 예를 들어 Intel 랜카드는 failover가 링크 유실에서 1초안에 일어나지만, 몇몇 저렴한 제품에서는 20초이상 걸릴 수도 있다. 또한 저렴한 랜카드에서는 동적 부하분산(balance-alb)이 동작되지 않을 수도 있다.

bonding 인터페이스의 L2 MTU값은 모든 slave중에서 가장 작은 값으로 적용된다.