메뉴얼: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
링크 모니터링
링크 모니터링 옵션 중 하나를 활성화하는 것은 중요하다.
위의 예시에서, 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 파라메터에 따라 해싱 방법이 달라진다.
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은 상호 연결된 다수의 스위치에서 고가용성 설정을 위한 가장 좋은 선택이다.
알림: 해당 모드에서는 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모드의 동작방법을 설명한다. 라우터는 스위치에 연결된 모든 클라이언트들과 양 링크의 총 대역폭인 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이다.
|
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인지)
|
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) | 본딩 정책 설정
|
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에 적용할 패킷 송신에 사용할 해시 정책.
|
Notes
링크의 fail상태 감지와 failover는 Intel의 제품과 같은 값나가는 랜카드가 저렴한 제품부도 확연하게 좋은 성능을 발휘한다. 예를 들어 Intel 랜카드는 failover가 링크 유실에서 1초안에 일어나지만, 몇몇 저렴한 제품에서는 20초이상 걸릴 수도 있다. 또한 저렴한 랜카드에서는 동적 부하분산(balance-alb)이 동작되지 않을 수도 있다.
bonding 인터페이스의 L2 MTU값은 모든 slave중에서 가장 작은 값으로 적용된다.