`operator migrate` — 스토리지 백엔드 간 데이터 마이그레이션

operator migrate — 스토리지 백엔드 간 데이터 마이그레이션

vault operator migrate은 스토리지 백엔드 간에 데이터를 복사해 Vault를 다른 구성으로 마이그레이션하는 것을 돕는 명령어예요. 스토리지 수준에서 직접 동작하며, 해독 과정은 없어요. 대상 스토리지 백엔드의 키는 덮어써지며, 마이그레이션 작업 전에 대상을 초기화하지 않아야 해요. 마이그레이션 중 추가되는 작은 락 키를 제외하고 원본 데이터는 수정되지 않아요.

이것은 데이터 일관성을 보장하기 위한 오프라인 작업으로 의도된 것이며, 마이그레이션이 진행 중이면 Vault는 서버 시작을 허용하지 않아요.

출처: 문서

본문

예시 (Examples)

모든 키를 마이그레이션해요:

$ vault operator migrate -config migrate.hcl

2018-09-20T14:23:23.656-0700 [INFO ] copied key: data/core/seal-config
2018-09-20T14:23:23.657-0700 [INFO ] copied key: data/core/wrapping/jwtkey
2018-09-20T14:23:23.658-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/archive/metadata
2018-09-20T14:23:23.660-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/metadata/5kKFZ4YnzgNfy9UcWOzxxzOMpqlp61rYuq6laqpLQDnB3RawKpqi7yBTrawj1P
...

마이그레이션은 일관된 정렬된 순서로 진행돼요. 마이그레이션이 완료 전에 중단되거나 종료되면(예: 스토리지 백엔드 연결 오류), 임의의 키 접두사에서 재개할 수 있어요:

$ vault operator migrate -config migrate.hcl -start "data/logical/fd"

구성 (Configuration)

operator migrate 명령어는 소스와 대상 스토리지 백엔드를 지정하는 전용 구성 파일을 사용해요. 스토리지 스탠자의 형식은 Vault를 구성할 때 쓰는 것과 동일하며, 유일한 차이는 storage_sourcestorage_destination 두 개의 스탠자가 필요하다는 점이에요.

storage_source "mysql" {
  username = "user1234"
  password = "secret123!"
  database = "vault"
}

storage_destination "consul" {
  address = "127.0.0.1:8500"
  path    = "vault/"
}

통합 래프트 스토리지로 마이그레이션 (Migrating to integrated raft storage)

예시 구성 (Example configuration)

아래 구성은 Consul 스토리지에서 통합 래프트(raft) 스토리지로 마이그레이션해요. 래프트 데이터는 정의된 경로의 로컬 파일시스템에 저장돼요. node_id는 선택적으로 이 노드를 식별하도록 설정할 수 있어요. cluster_addr는 이 노드의 클러스터 호스트네임으로 설정해야 해요. 더 많은 구성 옵션은 래프트 스토리지 구성 문서를 참고하세요.

원래 구성이 ha_storage"raft"를 사용한다면, storage_destinationpath와 마이그레이션 후 노드의 새 구성에 다른 경로를 선언해야 해요.

storage_source "consul" {
  address = "127.0.0.1:8500"
  path    = "vault"
}

storage_destination "raft" {
  path = "/path/to/raft/data"
  node_id = "raft_node_1"
}
cluster_addr = "http://127.0.0.1:8201"

마이그레이션 실행 (Run the migration)

마이그레이션 과정 동안 Vault는 오프라인이어야 해요. 먼저 Vault를 중지하세요. 그런 다음 새 Vault 노드가 되길 원하는 서버에서 마이그레이션을 실행해요.

$ vault operator migrate -config migrate.hcl

2018-09-20T14:23:23.656-0700 [INFO ] copied key: data/core/seal-config
2018-09-20T14:23:23.657-0700 [INFO ] copied key: data/core/wrapping/jwtkey
2018-09-20T14:23:23.658-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/archive/metadata
2018-09-20T14:23:23.660-0700 [INFO ] copied key: data/logical/fd1bed89-ffc4-d631-00dd-0696c9f930c6/31c8e6d9-2a17-d98f-bdf1-aa868afa1291/metadata/5kKFZ4YnzgNfy9UcWOzxxzOMpqlp61rYuq6laqpLQDnB3RawKpqi7yBTrawj1P
...

마이그레이션이 완료된 후 데이터는 로컬 파일시스템에 저장돼요. 새 스토리지 백엔드를 Vault와 함께 사용하려면, 래프트 스토리지 구성 문서에 설명된 대로 Vault의 구성 파일을 업데이트해요. 그런 다음 Vault 서버를 시작하고 언실해요.

추가 노드 조인 (Join additional nodes)

마이그레이션 후 래프트 클러스터에는 노드가 하나만 있어요. 추가 피어들은 이 노드에 조인해야 해요.

클러스터가 이전에 ha_storage"raft"를 사용해 HA가 활성화되어 있었다면, 노드들은 언실하기 전에 마이그레이션된 노드에 다시 조인해야 해요.

사용법 (Usage)

operator migrate 명령어에 사용할 수 있는 플래그는 다음과 같아요.

  • -config (string: <필수>) — 마이그레이션 구성 파일 경로.
  • -start (string: "") — 마이그레이션 시작 키 접두사. 이 값 이상의 키만 복사돼요.
  • -reset — 마이그레이션 락을 리셋해요. 마이그레이션 중에 Vault 서버나 다른 마이그레이션의 시작을 막기 위해 락 파일이 추가돼요. -reset 옵션으로 남아 있는 오래된 락 파일을 제거할 수 있어요.
  • -max-parallel (int: 10) — 데이터를 병렬로 마이그레이션하는 데 사용할 수 있는 경량 스레드(goroutine)의 최대 수를 지정할 수 있게 해요. 느린 백엔드에서 마이그레이션을 더 빠르게 할 수 있지만 더 많은 리소스(예: CPU, 메모리)를 소모해요. 허용 값은 1(동기)부터 정수 최대값까지예요. 제공하지 않으면 기본값 10개의 병렬 goroutine이 사용돼요. 참고: 스토리지 백엔드가 처리하는 최대 동시 요청 수는 궁극적으로 최대 동시 요청 수(max_parallel)를 강제하는 스토리지 백엔드 구성 설정에 따르게 돼요.

더 알아보기 (Learn more)

  • 래프트 스토리지 구성 문서
  • vault operator raft — 래프트 클러스터 관리
  • 스토리지 백엔드 문서