고가용성

고가용성 (High availability)

Vault는 여러 Vault 서버를 실행해 장애로부터 보호하는 고가용성(HA) 모드로 실행할 수 있습니다.

출처: 문서

본문

설계 개요 (Design overview)

Vault를 고가용성(HA)으로 만드는 주요 설계 목표는 수평 확장성에 영향을 주지 않으면서 가동 중지 시간을 최소화하는 것입니다. Vault는 컴퓨팅 요구 사항보다는 스토리지 백엔드의 IO 한계에 의해 제약을 받습니다. IO 한계에 의해 제약되는 것은 HA 접근 방식을 단순화하고 복잡한 조정을 피하게 해줍니다.

인터그레이티드 스토리지(Integrated Storage) 같은 스토리지 백엔드는 Vault가 HA 구성으로 실행될 수 있게 해주는 추가적인 조정 기능을 제공합니다. 백엔드가 지원하면 Vault는 추가 구성 없이 자동으로 HA 모드로 실행됩니다.

HA 모드로 실행할 때 Vault 서버는 standby와 active라는 두 상태를 가질 수 있습니다. 스토리지 백엔드를 공유하는 여러 Vault 서버의 경우, 어느 시점이든 인스턴스 하나만 active입니다. 모든 standby 인스턴스는 핫 대기(hot standby)로 배치됩니다.

active 서버만 모든 요청을 처리하며, standby 서버는 모든 요청을 active Vault 서버로 리디렉션합니다. 한편 active 서버가 봉인되거나, 실패하거나, 네트워크 연결이 끊기면 standby Vault 서버 중 하나가 active 인스턴스가 됩니다.

봉인 해제되지 않은 Vault 서버만 standby로 작동할 수 있다는 점을 유의하세요. 서버가 봉인된 상태이면 standby로 작동할 수 없습니다. 봉인된 상태의 서버는 active 서버가 실패할 경우 어떤 요청도 처리할 수 없습니다.

성능 대기 노드 (Performance standby nodes, Enterprise)

성능 대기(Performance Standby) 노드는 사용자나 애플리케이션의 읽기 전용 요청을 처리합니다. 읽기 전용 요청은 Vault의 스토리지를 수정하지 않는 요청입니다. Vault는 이러한 작업을 처리하는 능력을 빠르게 확장해, 대부분의 시나리오와 KV, Transit 같은 시크릿 엔진에서 거의 선형적인 초당 요청 수 확장을 제공합니다. 트래픽은 성능 대기 노드에 분산되므로 클라이언트는 이 IOPS를 수평으로 확장하고 높은 트래픽 워크로드를 제어할 수 있습니다.

성능 대기 노드에 스토리지 쓰기를 일으키는 요청이 들어오면 그 요청은 active 서버로 전달됩니다. 읽기 전용 요청은 성능 대기 노드에서 로컬로 처리됩니다.

전통적인 HA standby처럼 성능 대기 노드도 active 노드가 봉인되거나, 실패하거나, 네트워크 연결이 끊기면 active 인스턴스가 됩니다.

active 노드가 되는 과정 (Becoming an active node)

HA 구성의 active 노드는 HA 잠금(lock)을 보유합니다. active 노드가 사용 불가해지거나 운영자가 vault operator step-down 을 호출해 물러나면, 클러스터의 모든 노드는 HA 잠금을 잡으려 시도합니다. 잠금을 잡고 유지하는 데 성공한 첫 번째 노드가 새 active 노드가 됩니다.

HA 잠금 경쟁 과정은 클러스터의 HA 스토리지 백엔드에 따라 달라집니다. 예를 들어 raft 기반 인터그레이티드 스토리지의 경우, Vault는 Raft 리더십 선거에서 승리한 노드에 항상 HA 잠금을 부여합니다.

HA 잠금을 얻은 후 노드는 클러스터의 active 노드가 되기 위해 일련의 취임(inauguration) 단계를 거칩니다:

  1. 로컬 Vault 인스턴스를 봉인합니다.
  2. 봉인 구성을 다시 로드합니다.
  3. 필요하면 봉인을 마이그레이션합니다.
  4. 암호화 키를 다시 로드합니다.
  5. 새 HA 클러스터 내부 TLS 인증서를 생성합니다.
  6. 자신의 active 노드 상태를 알리는 항목을 스토리지에 씁니다.
  7. 로컬 Vault 인스턴스를 봉인 해제합니다.
  8. 클러스터의 다른 노드에서 오는 연결을 받기 시작합니다.

취임 단계를 완료한 후 새 active 노드는 새 클라이언트 요청에 응답하기 시작합니다.

HA standby 노드는 2.5초마다 active 노드 업데이트를 확인합니다. active 노드가 변경되면 standby 노드는 포워딩 연결을 갱신하고 새 active 노드에 연결을 엽니다. 새 active 노드가 클러스터의 다른 노드에서 오는 연결을 받기 시작할 때까지 그 연결은 실패하므로, standby 노드는 하트비트로 5초마다 또는 전달이 필요한 새 클라이언트 요청이 도착할 때마다 연결을 재시도합니다.

성능 standby가 활성화되면 standby 노드는 active 노드 업데이트에 따라 스스로를 성능 standby로 승격합니다. standby는 복제 데이터를 받기 위해 active 노드에서 인증서와 키 쌍을 요청합니다. standby 노드가 봉인되고, 필요한 설정 작업을 수행하고, post-unseal 설정을 완료하면 새 클라이언트 요청을 처리할 수 있습니다.

튜토리얼 (Tutorial)

다음 튜토리얼을 참고해 더 알아보세요.

  • Vault with Integrated Storage Reference Architecture
  • Vault HA Cluster with Integrated Storage
  • Vault High Availability with Consul
  • Performance Standby Nodes

더 알아보기 (Learn more)