[ACSA 교육#31] Static & Dynamic LAG

지난 포스팅에서 LAG(Link Aggregation Group)에 대해 간단히 알아보았습니다.
LAG는 두 가지 운영 모드를 갖고 있습니다. Static LAG와 Dynamic LAG가 그것입니다.

그럼 차례대로 한 번 알아보겠습니다.

Static LAG

Static Link Aggregation 모드에서는 장치 간에 서로 어떠한 제어 정보(Control Information)을 교환하지 않습니다. 즉, 스위치 피어 간 LAG 관련 신호를 주고 받지 않습니다. 각각의 피어에서 독립적으로 링크 애그리게이션(LAG)을 구성하기만 하면 됩니다. 정상적으로 구성이 완료되면, LAG가 작동하게 됩니다.

하지만, 각 스위치는 자신이 누구에게 연결되어 있는지, 또는 동일한 피어에 연결되어 있는지 등 정보를 알지 못합니다.
한 쪽에서 잘못 구성하더라도 피어에서 감지되지 않기 때문에 이 모드는 권장되진 않습니다.
이로 인해 예기치 않은 동작이 발생할 수도 있고, 탐지나 트러블슈팅이 어려울 수도 있습니다.

아래 그림을 살펴보면, Core-1 스위치가 LAG 멤버 포트를 서로 다른 피어 스위치에 연결된 것을 탐지하지 못하고 있음을 알 수 있습니다.

Static LAG 구성

AOS-CX 스위치에서 Layer 2 Static LAG 구성하는 방법은 아래와 같습니다.

1. 먼저 LAG 인터페이스를 생성합니다. 인터페이스를 식별할 수 있는 ID 숫자와 함께 생성합니다. ID는 1부터 256까지 설정할 수 있습니다.

Switch(config)# interface lag <id>

2. 새로운 LAG 인터페이스에 대해 라우팅 기능을 비활성화(disable)합니다.

Switch(config-lag-if)# no routing

3. 물리 인터페이스 포트를 LAG의 멤버 포트로 매핑합니다.

Switch(config)# interface {member/slot/port}
Switch(config-if)# lag <id>

이렇게 각각의 스위치에 동일한 작업을 수행하면 두 스위치간에 LAG 구성이 완료됩니다.
다음 두 스위치 간 LAG 구성 예제를 한 번 살펴보겠습니다.

Core-1(config)# interface lag 20
Core-1(config-lag-if)# no routing
Core-1(config)# interface 1/1/43
Core-1(config-if)# lag 20
Core-1(config)# interface 1/1/44
Core-1(config-if)# lag 20
Core-2(config)# interface lag 20
Core-2(config-lag-if)# no routing
Core-2(config)# interface 1/1/43
Core-2(config-if)# lag 20
Core-2(config)# interface 1/1/44
Core-2(config-if)# lag 20

802.3ad – Dynamic LAG

802.3ad 표준에서, Dynamic LAG를 사용하는 피어 장치들은 LAG를 맺고 유지하기 위해 제어 메시지(control message)를 교환합니다. 이러한 메커니즘은 링크의 장애를 감지하고 LAG 멤버 포트가 동일한 장치에서 구성되도록 합니다.

이 표준은 일반적으로 LACP(Link Aggregation Control Protocol)이라고 합니다. LACP는 LACP Data Unit이라는 메시지를 주기적으로 교환합니다. 이 메시지에는 다음이 포함되어 있습니다.

  • System ID: 스위치 식별자
  • Operational Key: LAG(Link Aggregation Group) 식별자

또한, LACP-DU(LACP Data Unit)에는 아래와 같이 몇 가지 Flag를 포함하고 있습니다.

  • LACP_Activity
  • LACP_Timeout
  • Aggregate
  • Synchronization
  • Collecting
  • Distributing

예상치 못한 네트워크 문제를 방지하기 위해서는 Dynamic LAG 또는 LACP로 링크 애그리게이션을 적용하는 것을 권장합니다.

802.3ad 표준에서 최대 16개의 포트까지 묶을 수 있지만, 동시에 사용 가능한 포트는 8개입니다.

802.3ad 운영 모드

LACP는 두 가지 모드 중 하나를 선택하여 구성할 수 있습니다.

Passive 모드에서, 장치는 LAG(Link Aggregation Group)을 자동으로 생성하기 위해서 다른 피어로부터 LACP-DU(LACP Data Unit) 메시지를 받을 때까지 기다립니다. 이 모드는 LAG를 수신 상태(Listening State)로 놔두게 됩니다. 마치, “여기 앉아서 내 피어로부터 연락을 받을 때까지 기다려야지.”라고 하는 것처럼 말입니다. 따라서, 만약 다른 피어 스위치 역시 Passive 모드로 구성이 된다면 두 스위치 모두 같은 생각을 하게 됩니다. 서로 누군가 메시지를 보낼 때까지 앉아서 기다리고 있기 때문에 LAG 연결과 구성이 이뤄지지 않게 됩니다.
즉, 적어도 피어 하나는 Active 모드가 되어야만 합니다.

Active모드에서는 장치가 스스로 LACP Data Unit 메시지를 멤버 포트를 통해서 보내게 됩니다. “LAG 구성합시다!!”라고 말입니다. 피어가 Passive 모드이든 Active모드이든 관계없이 메시지에 대해 응답하고 Negotiation을 이어갑니다. 결국에는 LAG가 성공적으로 구성됩니다.

자, 그럼 AOS-CX 스위치에서는 어떻게 구성하는지 알아보겠습니다.

Dynamic LAG 구성 방법

Dynamic LAG 구성 방법은 Static LAG 구성 방법과 비슷합니다. 단지 LACP 모드를 선택하는 명령어가 추가됩니다.

Switch(config-lag-if)# lacp mode {active | passive}

아래와 같이 스위치에 Dynamic LAG 구성하는 예시를 한 번 살펴보겠습니다.

이 이미지에 대체 속성이 비어있습니다
Core-1(config)# interface lag 20
Core-1(config-lag-if)# no routing
Core-1(config-lag-if)# lacp mode active
Core-1(config)# interface 1/1/43
Core-1(config-if)# lag 20
Core-1(config)# interface 1/1/44
Core-1(config-if)# lag 20
Core-2(config)# interface lag 20
Core-2(config-lag-if)# no routing
Core-2(config-lag-if)# lacp mode active
Core-2(config)# interface 1/1/43
Core-2(config-if)# lag 20
Core-2(config)# interface 1/1/44
Core-2(config-if)# lag 20
LAG 인터페이스 확인

“show interface lag” 명령어를 통해 구성한 내용을 확인할 수 있습니다.

Switch# show interface lag
 Aggregate lag1 is up
 Admin state is up
 Description :
 MAC Address                 : 88:3a:30:97:59:c0
 Aggregated-interfaces       : 1/1/25 1/1/26 2/1/25 2/1/26
 Aggregation-key             : 1
 Aggregation-mode            : active
 Speed                       : 40000 Mb/s
 L3 Counters: Rx Disabled, Tx Disabled
 <<<<Omitted output>>>>

또한, “show interface lag brief”를 통해 LAG의 전체 사용 가능한 대역폭을 확인할 수도 있습니다.

Switch# show interface lag brief
------------------------------------------------------------------------------
Port      Native   Mode    Type         Enabled Status  Reason          Speed
          VLAN                                                          (Mb/s)
------------------------------------------------------------------------------
lag1      1        trunk   --           yes     up      --              40000

Load Sharing (로드 쉐어링)

LAG 구성을 하게 되면 각 피어 장치는 멤버 포트인 물리적 인터페이스에 대해 트래픽 부하 분산을 조정해야 합니다. 스위치는 해시 알고리즘(Hash Algorithm)을 사용하여 주어진 패킷에 대해서 사용할 멤버 포트를 결정합니다.

해시 알고리즘은 입력 값(x)에 따라 적용되는 수학점 함수입니다. 출력 값(y)만 보고서는 입력 값(x)을 예상하거나 추론할 수 없습니다. 단방향 함수라고도 합니다. 해시의 또 다른 특징은 동일한 입력 값(x)인 경우에는 출력 값(y)이 항상 동일하다는 특징을 갖고 있습니다.

스위치는 패킷 헤더 정보를 해시 알고리즘의 입력 값(x)으로 사용하며 결과(y)는 해당 특정 패킷에 사용할 멤버 포트입니다. 사용된 스위치 알고리즘에 따라 해시 입력값은 다음이 해당될 수 있습니다.

  • Layer 4 TCP/UDP 포트
  • Layer 3 출발지 및 목적지 IP주소
  • Layer 2 출발지 및 목적지 MAC주소

다음 그림은 Layer 2 출발지 및 목적지 MAC주소가 알고리즘의 입력 값으로 사용되는 방법을 보여줍니다.

항상 해당 출발지 및 목적지 MAC주소 조합에 대한 모든 패킷에 대해 출력 값으로 물리적 포트 1을 사용하는 것입니다. 링크에 문제가 생기면 이 패킷은 물리적 포트 2를 사용합니다.

AOS-CX 스위치는 기본적으로 해시 알고리즘의 입력 값으로 출발지와 목적지 IP주소를 사용합니다.
“show lacp aggregates” 명령어를 통해 확인 가능합니다.

Switch# show lacp aggregates
Aggregate Time   : lag1
Interfaces       : 2/1/26 1/1/25 2/1/25 1/1/26
Heartbeat rate   : Fast
Hash             : l3-src-dst
Aggregate mode   : Active

Hash 정보에서 “l3-src-dst”가 기본값이고 이는 Layer 3, 즉 IP주소를 의미합니다.

하지만, 출발지와 목적지 IP주소로 해시 알고리즘을 사용하는 것은 적절치 못하는 경우도 있습니다. 멤버 포트간 부하를 동일하고 적절하게 배분하지 못할 수 있습니다. 그럴 경우 트래픽이 혼잡해지고 전반적으로 성능이 저하될 수 있습니다.
이럴 때는, 입력 값을 수정하면 됩니다. 아래와 같이 Layer 2 출발지 및 목적지 MAC주소를 해시 함수의 입력 값으로 사용할 수 있습니다. 이럴 경우 멤버 포트의 Oversubscription을 예방할 수 있습니다.

Switch(config)# interface lag <ID>
Switch(config-lag-if)# hash l2-src-dst

이렇게 링크 애그리게이션에 대해 알아보았습니다.
링크 애그리게이션은 스위치와 스위치간에만 사용하는 것이 아니라 서버나 스토리지, 라우터간 연결에도 사용하는 기술이기 때문에 구성하고 확인하는 명령어를 정확히 알아두는 것이 중요합니다.