본문 바로가기

MLAG - Cisco vPC

 

MLAG (Multi-chassis Link Aggregation) : 2 or more 장비의 링크를 묶는 것으로 (상/하단 장비에서도 LAG 필요하고, 그들에게 단일 장비로 인식된다), public protocol 이기 때문에 여러 벤더에서 제공하고 있다. Extreme, Arista 등에서는 그대로 MLAG 라고 하고 Cisco Nexus 에서는 Virtual PortChannel 이라고 한다. Redundancy + Loop-free 둘 다 할 수 있어서 많이 사용되는 것 같다. 

 


<Cisco vPC> 

 

* Terminology 

- vPC: vPC peer devices 피어 디바이스들 <> 다운스트림 장비 간 구성된 포트 채널 

- vPC peer device : vPC Peer-link 라고 하는 포트채널로 연결된 장비 

- vPC Peer-link : vPC peer device 간 상태를 싱크하기 위한 링크, 10G 또는 40G 이더넷이어야 함

- vPC member port : vPC에 포함된 인터페이스

- vPC domain : vPC peer devices, vPC peer-keepalive link, 그리고 다운스트림 장비들과 연결된 vPC 포트들을 모두 포함하는 단위(영역)로, conf t # vpc domain <1-1000> 로 지정하는 숫자(global parameter, vPC domain ID 라고 부름)로 구분됨

- vPC Peer keepalive link : vPC peer device 끼리 서로의 헬스체크를 위해 해당 링크를 통해 (설정을 통해 조정할 수 있는) periodic keepalive 메세지를 보냄. 

   -- 디폴트로 mgmt vrf에 생성되는데, mgmt가 아니더라도 별도의 vrf instance를 생성해서 구성하는 것을 권고함

   -- vPC Peer keepalive link 에는 헬스체크를 위한 메세지 트래픽만 O, 싱크를 위한 트래픽은 X

- Dual-active : vPC peer device 둘 다 Primary(기본 스위치) 로 동작하는 경우를 말하며, peer-keepalive, peer-link 둘 다 죽어서 secondary vPC가 primary 스위치가 죽은 것으로 판단하고 primary로 동작하는 경우에 발생

- Recovery: peer-keepalive, peer-link가 다시 올라와서 둘 중 하나가 secondary가 되는 상황을 말하며, 이 경우 secondary vPC의 vPC 링크는 down -> up 

 

 

* vPC Peer-link 

 

- 각 장비에서 포트 채널을 vPC Peer-link 로 설정할 수 있고, 동일한 vPC domain ID를 사용하면 된다.

   -- vPC에 들어가는 모든 인터페이스들은 compatiblity를 위해 일부 매개변수들을 모두 같은 값으로 맞춰야 하는데, show vpc consistency-parameters 명령어로 어긋나는 설정을 확인할 수 있다. (일반 포트채널의 compatibility check와는 메커니즘이 약간 다르다고 한다) i.e. port-channel mode, link speed per channel, duplex mode per channel, trunk mode-native VLAN/VLANs allowed on trunk/Tagging, STP settings, MTU, ,,,

   -- L2 trunk mode로 설정하기를 권고한다고 한다.  

- 구성 시 장비 당 두 개 이상의 dedicated port 사용, 그리고 모듈 이원화를 권고한다고 한다.

- 로컬 링크를 통해 들어온 패킷은 로컬 링크를 사용한다. (vPC Peer-link를 타고 peer device를 통해 나가기보다는) 

- unknown unicast, multicast, broadcast(BPDU 포함) 트래픽은 vPC Peer-link를 통해 flooding 된다.

- vPC peer devices 피어 디바이스 <> 다운스트림 장비 간 트래픽은 표준 로드밸런싱 방식으로 설정할 수 있다. 

- 두 디바이스 모두에 설정된 VLAN의 MAC Addr 들은 싱크된다. (CFSoE..라는..것.을 사용한다고 한다. Cisco Fabic Services over Ethernet 이라고 한다.) 

 

- vPC Peer-link가 죽으면 vPC peer-keepalive link를 통해 상대 피어 디바이스의 상태를 확인하고, 살아있다면 Secondary vPC는 모든 vPC 포트를 죽인다. loop 또는 트래픽의 유실이나 flooding을 막기 위함이다. (vPC peer-keepalive 메세지는 vPC Peer-link만 죽은 것인지, vPC peer device가 죽은 것인지를 판별하며, vPC Peer-link 에 속한 모든 링크가 죽었을 경우에 사용된다.) ##

 

* vPC Peer-Keepalive Link, Messages

- vPC Peer-keepalive link가 구성되고 잘 돌아가야 vPC Peer-link 를 구성할 수 있다. 

- keepalive 메세지를 주고받기 위해서는 피어 디바이스 간 L3 연결이 필요하다.

- (위에도 적었지만)

   -- 디폴트로 mgmt vrf에 생성되는데, mgmt가 아니더라도 별도의 vrf instance를 생성해서 구성하는 것을 권고함

   -- vPC Peer keepalive link 에는 헬스체크를 위한 메세지 트래픽만 O, 싱크를 위한 트래픽은 X

 

- 관련해 설정할 수 있는 변수가 세 가지가 있다. 

 (1) keepalive message interval : 헬스체크 주기. 400ms~10s 범위 내에서 조정할 수 있고 디폴트는 1초.

 (2) hold-timeout value : vPC peer-link가 죽으면 타이머가 시작된다. 해당 타이머 시간동안 secondary vPC peer device는 vPC peer-keepalive 메세지를 무시한다. (false positive failover를 막기 위함이며, 해당 시간 동안은 정말 아무런 액션을 취하지 않는다) 3~10초로 설정 가능, 디폴트는 3초

 (3) timeout value : 3~20초, 디폴트는 5초. hold-timeout 타이머 땡 하면 이 타이머가 시작된다. timeout 기간 동안, secondary vPC peer device는 primary에서 온 vPC peer-keepalive hello 메세지가 있는지 확인한다. 만약 받은게 있다면 secondary vPC peer device의 모든 vPC 링크를 죽인다. -- ## 위에 적은 내용이다! secondary 기준으로 primary가 살아있으니 혹시 모를 상황에 대비해 자신의 링크를 죽이는 것. 없다면 primary가 죽은 것으로 판단하고 자신이 primary가 되는 것이다. 

 

 

 

* vPC 도메인 

- (위에도 적었지만) conf t # vpc domain <1-1000> 로 지정하는 숫자(global parameter, vPC domain ID 라고 부름)

- vPC peer 당 vPC 도메인은 딱 하나만 만들 수 있다. 

 

- 쓰면서 vPC number와 헷갈릴 뻔 했다.

 

* vPC Nubmer

- vPC 도메인 ID, vPC Peer-link를 만들고 나면 다운스트림 디바이스와 연동할 포트채널을 생성하는데, 이 단위라고 보면 된다. 헷갈리지 않도록 포트채널 ID와 같은 숫자로 설정하도록 권고하고 있다. 

 

* vPC Peer-Gateway

- vPC 도메인에 구성된 스위치는 기본적으로 vPC 피어가 스위치에 구성된 HSRP(or VRRP) 그룹에 속한 MAC 주소가 있는 패킷을 수신하면 스위치는 HSRP/VRRP 컨트롤 플레인 상태와 상관없이 로컬 라우팅 테이블에 따라 패킷을 라우팅한다. 즉 secondary vPC가 HSRP/VRRP 가상 MAC 주소로 향하는 패킷을 라우팅할 수 있는 것이다. 이 경우, 소스 MAC 주소가 VLAN 내에서 vPC 피어의 SVI MAC 주소가 되고, 목적지 MAC 주소는 . . . . . . .

- 즉, 로컬 트래픽이 peer-link로 가는 것을 막는 기능이라고 보면 되겠다. 

- 언제든 아무 영향 없이 설정 가능하고, 설정 시 고려할 사이드이펙이 없기 때문에 설정하는 것이 권고된다고 한다. 그냥 vPC domain에 # peer-gateway 명령어만 넣어주면 된다. 

 

 

 

* vPC role election : vPC Primary, vPC Secondary

 

vPC 가 설정된 두 스위치는 연동되는 디바이스에 단일 스위치로 인식되긴 하지만

- vPC Primary (기본 스위치) : BPDU 처리 및 ARP 응답 

- vPC Secondary (보조 스위치) 

두 가지로 나뉘며, non-preemptive 비선제적으로 동작한다.

preemption 설정은 vpc role preempt 명령어로 변경 가능하고, 이 경우 role priority 값(1~65636, default 32667, 숫자가 낮을수록 우선순위 높음, 변경 후 포트 shut - no shut 해야함)을 기준으로 한다. 

 

- elecion process 는 순서대로 아래와 같다. 

 

 (1) vPC Sticky bits (두 스위치의 값이 같으면 pass, 다르면 TRUE -> primary)

    : role change가 불필요하게 자주 발생하는 것을 막기 위한 보호 메커니즘으로, show system internal vpcm info global | inc ignore-case sticky 명령어로 확인할 수 있다. 기본값은 FALSE 이다. 죽은 스위치가 살아나더라도 살아있던 스위치가 계속 기본 스위치로 동작하도록 하기 위함인 것 같다.

 

    - TRUE로 설정되는 경우 

       a. 기존 primary (1호기라 함) 가 죽어서 secondary (2호기라 함) -> primary 로 역할이 전환된 경우에 물려받은 스위치가 TRUE가 된다. -- 다시 살아난 1호기가 role priority가 높더라도 해당 스티키 비트 때문에 다시 전환되지 않는 것. 해당 상황에서 1호기에는 스티키 비트가 설정되지 않는다.

       b. reload restore timer (재부팅 후 복구 타이머, 디폴트는 240초) 땡 이후 None establish -> vPC Primary  

 

    - FALSE로 설정되는 경우

       a. vPC 설정된 스위치가 재부팅되는 경우 

       b. vPC role priority가 변경되거나 다시 입력되는 경우 

 

 (2) role priority (lower priority number -> primay) 

 (3) MAC Addr (lower mac addr -> primary)

 

 

 

+ 일부 내용을 추가로 작성했다  https://not-a-d.tistory.com/12

 

 


 

아래 링크를 보고 공부했다. 실습 없이 문서를 이해하는 것을 목적으로 했다.. 

https://www.cisco.com/c/en/us/td/docs/dcn/nx-os/nexus9000/101x/configuration/interfaces/cisco-nexus-9000-nx-os-interfaces-configuration-guide-101x/b-cisco-nexus-9000-nx-os-interfaces-configuration-guide-93x_chapter_01000.html#concept_59F5916C050A4EDA8FF9C677298AF998

https://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/nx-os-software/212589-understanding-vpc-election-process.html

https://www.cisco.com/c/dam/en/us/td/docs/switches/datacenter/sw/design/vpc_design/vpc_best_practices_design_guide.pdf

'' 카테고리의 다른 글

MLAG - Cisco vPC (2)  (0) 2023.02.07
ALU channelized E1  (0) 2022.02.22
LACP in N9K  (0) 2021.04.04