~/network/concepts/vpc
스위칭

MC-LAG / vPC

Multi-Chassis LAG

LACP는 한 대의 스위치 안에서 여러 링크를 하나로 묶는 것이고, vPC는 두 대의 스위치를 하나처럼 묶어 그 위에서 LACP가 장비를 걸쳐 동작하게 하는 것이다. - LACP는 링크 묶기, vPC는 섀시(장비) 묶기.
vPC는 LACP가 두 스위치에 걸쳐 성립하도록 받쳐주는 상위 기술이다.

기본 LACP한 대 단말 ↔ 한 대 스위치 사이에서만 동작한다. 단말의 두 포트를 서로 다른 상위 스위치 두 대에 나눠 꽂아 이중화하려 해도, 단말 입장에선 서로 다른 두 장비에서 LACPDU가 오니까 한 LAG로 묶이지 않는다 — 양쪽 스위치의 System ID가 다르기 때문이다.

MC-LAG(Multi-Chassis LAG)는 두 대의 상위 스위치를 단말 시점에서 한 대처럼 보이게 만들어 이 문제를 해결한다. 두 스위치가 공통 System ID를 공유해 단말과의 LACP 협상이 성립하고, 한쪽 스위치가 다운돼도 나머지 한 대만으로 통신이 끊김 없이 이어진다.

MC-LAG는 IEEE 표준 LACP 자체의 기능이 아니라 벤더별 구현이지만, 캠퍼스 / DC 환경의 Distribution 또는 Aggregation 계층 이중화에서 사실상 표준이다.

벤더별 명칭은 다음과 같다.

  • Cisco Nexus — vPC (virtual Port-Channel)
  • Juniper — MC-LAG (Multi-Chassis LAG)
  • Arista / Cumulus — MLAG

루프프리와 대역폭

두 상위 스위치의 포트를 묶으면, 단말과 STP 양쪽에 그 두 회선이 하나의 논리 포트로 보인다. 그래서 물리 결선상으로는 두 스위치로 갈라지는 루프 구조여도, 단말은 이를 루프로 인식하지 않는다.

STP는 루프를 막기 위해 병렬 링크 중 일부를 Blocking으로 차단하는데, vPC로 묶인 링크는 논리적으로 루프가 아니므로 STP가 어떤 회선도 차단하지 않는다. 결과적으로 두 회선을 모두 active로 점유해 대역폭과 이중화를 동시에 얻는다. STP만 쓰던 구성에서 절반이 놀던 대역폭을 되찾는 것이 vPC를 쓰는 핵심 이유다.

두 스위치를 잇는 링크

MC-LAG를 이루는 두 스위치는 서로를 두 종류의 링크로 직접 연결해 하나의 논리 장비처럼 동작한다.

  • Peer Link — 상태·데이터 동기화 채널. MAC 테이블, LACP 상태, IGMP 스누핑 등을 맞추고, 한쪽에만 물린 단말(orphan) 트래픽이나 BUM(Broadcast/Unknown/Multicast) 트래픽이 넘어간다. 대역폭이 큰 포트채널로 구성한다.
  • Keepalive Link — 상대 스위치의 생존만 감시하는 L3 하트비트. 보통 관리(mgmt) 인터페이스 등 Peer Link와 분리된 경로로 둔다. 데이터는 흐르지 않는다.

이 둘을 나누는 이유는 장애를 구분하기 위해서다. Peer Link가 끊겨도 Keepalive로 상대가 살아있음을 알 수 있어야 뒤에 설명할 split-brain을 피할 수 있다.

역할과 장애 시나리오

vPC 두 스위치는 primary / secondary 역할을 가진다. 이 역할은 정상 상태에선 포워딩에 영향을 주지 않지만, Peer Link 장애 시 누가 살아남을지를 결정한다. (기본적으로 non-preemptive — 복구되어도 역할이 자동으로 뒤바뀌지 않는다.)

  • Peer Link 다운, Keepalive 정상 — secondary가 자신의 vPC 멤버 포트를 셧다운한다. primary만 단독으로 포워딩해 루프와 중복 전달을 막는다.
  • Keepalive만 다운, Peer Link 정상 — 데이터·상태 동기화는 유지되므로 포워딩에 영향 없음. 다만 이 상태에서 Peer Link까지 끊기면 감지가 늦어질 수 있어 조기 복구 대상이다.
  • Peer Link · Keepalive 동시 다운 (split-brain / dual-active) — 두 스위치가 서로를 죽은 것으로 오인해 각자 primary처럼 동작한다. 같은 System ID로 양쪽이 동시에 포워딩하면서 MAC 플래핑, 루프가 생긴다. Keepalive를 물리적으로 분리하는 이유가 이 상황을 막기 위해서다.

절체 테스트에서 인터링크를 내릴 때는 Keepalive Link를 먼저, Peer Link를 나중에 내린다. Peer Link를 먼저 내리면 secondary가 자신의 하단 vPC 멤버 포트를 suspend 시킨다 — Keepalive로 primary가 살아있음을 확인한 상태라, split-brain을 막기 위해 secondary가 스스로 물러나기 때문이다.

Orphan Port

vPC 도메인에 속하지만 한쪽 스위치에만 물린 단말(단일 연결 서버, 방화벽, 라우터 등)을 orphan이라 한다. vPC로 묶이지 않은 일반 포트다.

기본 동작에선 secondary가 vPC 멤버 포트를 셧다운할 때 orphan 포트는 함께 내려가지 않아, Peer Link 장애 시 orphan 트래픽이 격리될 수 있다. 이를 막으려면 orphan 포트도 Peer Link 상태에 연동해 함께 내리도록 설정한다 (Cisco: vpc orphan-port suspend).

Consistency Check

두 스위치의 설정이 어긋나면 vPC가 정상 동작하지 않으므로, 주요 파라미터를 서로 비교(consistency check)한다.

  • Type-1 — 반드시 일치해야 하는 값 (STP 모드, MTU, Allowed VLAN 등). 불일치 시 해당 vPC 또는 VLAN이 다운된다.
  • Type-2 — 일치가 권장되는 값. 불일치해도 vPC는 올라오지만 경고를 남기고, 상황에 따라 예기치 않은 동작을 유발할 수 있다.

show vpc consistency-parameters 로 불일치 항목을 확인한다. 운영 명령은 failover-test 참고.