이 문서에서는 가상 머신 (VM) 또는 베어메탈 서버에서 Spanner Omni의 배포 구성을 설명합니다. Spanner Omni CLI를 사용할 때 VM 배포 토폴로지 및 런타임 매개변수를 정의하는 데 사용되는 YAML 배포 구성 파일(deployment.yaml)의 구조와 구성 옵션을 설명합니다.
배포를 만드는 방법은 다음 중 하나를 참고하세요.
배포 구성 개요
VM 또는 베어메탈 서버에 배포를 만들 때 Spanner Omni CLI의 spanner deployment create 명령어에 이 구성 파일을 전달합니다.
spanner deployment create --config-file=deployment.yaml
배포 구성은 다음 주요 요소를 정의합니다.
- 단일 서버 모드: 개발 및 테스트를 위해 전체 배포를 단일 서버로 제한하는 최적화 모드입니다.
- 위치: 서버가 있는 실제 사이트 또는 클라우드 리전입니다.
- 위치 간 거리: 위치 쌍 간의 네트워크 지연 시간입니다.
- 영역: Paxos 복제본을 나타내는 서버의 논리적 그룹입니다.
- 루트 서버: 영역 메타데이터 및 멤버십 쿼럼을 담당하는 전용 서버입니다.
- 복제본 유형: 각 영역의 역할 (읽기-쓰기, 감시 또는 읽기 전용)입니다.
- 시계 SLA: 시계 지터 및 드리프트 비율 오류를 비롯한 TrueTime 동기화 매개변수입니다.
- 배포 설정: 기본 리더 위치, 인증 보안 설정과 같은 전역 설정입니다.
구성 파일 구조
다음 예에서는 배포 구성 파일의 최상위 구조를 보여줍니다.
# Deployment name
name: regional-deployment
# Restrict the entire deployment to a single server (optional, default: false)
single_server: false
# Physical or logical locations (regions)
location:
- name: us-central1
# Network distances between locations (optional)
location_distance:
- src: us-central1
dest: us-east1
latency_ms: 30
# Zones and root servers in the deployment
zone:
- name: us-central1-a
location: us-central1
single_server: false
replica_type: READ_WRITE
root_server:
- host: rootserver1.example.internal
port_base: 15000
# Clock synchronization SLA parameters (optional)
clock_sla:
jitter_in_s: 0.005
rate_error_in_ppm: 200
# Deployment settings (optional)
deployment_settings:
preferred_leader_location: us-central1
security_settings:
insecure_mode: true
최상위 필드
배포 구성은 다음 최상위 필드를 지원합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
name |
문자열 | 배포 이름입니다(예: prod, staging, regional-deployment). |
single_server |
불리언 | (선택사항) true로 설정된 경우 전체 배포가 단일 서버 배포임을 지정하여 하나의 영역과 하나의 서버로 제한합니다. single_server: true로 만든 배포는 생성 후 영역이나 서버를 추가할 수 없습니다. 단일 서버 모드에서 Spanner Omni를 실행하려면 spanner
start-single-server 명령어를 실행할 때 Spanner Omni에서 자동으로 생성하므로 이 구성을 수동으로 만들 필요가 없습니다. 기본값은 false입니다. |
location |
객체 목록 | 배포의 물리적 또는 논리적 위치 (리전)입니다. |
location_distance |
객체 목록 | (선택사항) 위치 쌍 간의 네트워크 지연 시간입니다. |
zone |
객체 목록 | 필수 항목입니다. 배포를 구성하는 영역입니다. 하나 이상의 영역을 지정해야 합니다. |
clock_sla |
객체 | (선택사항) 소프트웨어 TrueTime의 시계 동기화 서비스수준계약 (SLA) 매개변수입니다. |
deployment_settings
|
객체 | (선택사항) 기본 리더 배치 및 보안 인증을 위한 런타임 설정입니다. |
배포 이름
name 필드는 사용자가 선택한 배포 이름을 지정합니다. prod, staging, regional-deployment 등 배포를 식별하는 문자열을 사용할 수 있습니다.
단일 서버 모드
최상위 single_server 필드는 전체 배포가 단일 서버 배포임을 지정합니다. true로 설정하면 이 설정은 배포를 하나의 영역과 하나의 서버로 제한하여 로컬 개발 및 테스트 환경의 리소스 오버헤드를 줄입니다. single_server:true로 만든 배포는 생성 후 영역이나 서버를 추가할 수 없습니다.
단일 서버 모드에서 Spanner Omni를 실행하려면 이 구성을 수동으로 만들지 않아도 됩니다. spanner
start-single-server 명령어를 실행하면 Spanner Omni가 이 구성을 자동으로 생성합니다. 자세한 내용은 옵션 A: 단일 서버 배포를 참고하세요.
최상위 single_server 필드는 영역 수준 single_server 필드와 다릅니다.
- 최상위
single_server필드는 전체 배포에 적용됩니다. - 영역 수준
single_server필드는 배포 내의 개별 영역에만 적용됩니다. 자세한 내용은 단일 서버 영역을 참고하세요.
위치
위치는 머신이 있는 실제 데이터 센터 또는 클라우드 리전을 나타냅니다 ( Google Cloud의 리전과 동일).
location 목록에서 위치를 정의합니다.
location:
- name: us-central1
- name: europe-west2
위치 이름은 다음 요구사항을 충족해야 합니다.
- 문자로 시작하고 문자나 숫자로 끝나야 합니다.
- 문자, 숫자, 밑줄 (
_), 대시 (-)만 포함할 수 있습니다. - 선택적으로 콜론이 뒤에 오는 도메인 접두사를 포함할 수 있습니다 (예:
cloud.google.com:us-east1또는onprem:datacenter1). - 예약된 이름
default을 사용할 수 없습니다. - 배포 전체에서 고유해야 합니다.
위치 거리
location_distance 목록은 위치 쌍 간의 네트워크 지연 시간을 지정합니다. Spanner Omni는 이 정보를 사용하여 복제 및 쿼리 라우팅을 최적화합니다.
location_distance:
- src: us-central1
dest: europe-west2
latency_ms: 105
- src: europe-west2
dest: us-central1
latency_ms: 110
각 위치 거리 객체에는 다음 필드가 포함됩니다.
src: 필수입니다. 소스 위치의 이름입니다.location목록에 정의된 위치와 일치해야 합니다.dest: 필수입니다. 대상 위치의 이름입니다. 정의된 위치와 일치해야 하며src와 동일할 수 없습니다.latency_ms: 네트워크 지연 시간(밀리초)입니다. 음이 아닌 정수여야 합니다. 생략하면 Spanner Omni는 지연 시간이 무시할 수 있다고 가정합니다 (밀리초 미만).
실제 네트워크의 네트워크 지연 시간이 항상 대칭인 것은 아닙니다. (src, dest) 및 (dest, src)을 모두 제공하면 Spanner Omni는 두 측정값을 모두 적용합니다. 한 방향만 제공하면 Spanner Omni는 역방향의 지연 시간이 동일하다고 가정합니다.
영역
영역은 위치 내에 있는 하나 이상의 서버를 논리적으로 그룹화한 것입니다. 데이터 복제의 경우 각 영역은 Paxos 복제본을 나타냅니다. 배포에는 하나 이상의 영역이 있어야 합니다.
zone:
- name: us-central1-a
location: us-central1
single_server: false
replica_type: READ_WRITE
root_server:
- host: rootserver1.example.internal
port_base: 15000
- host: rootserver2.example.internal
port_base: 15000
- host: rootserver3.example.internal
port_base: 15000
각 영역 객체는 다음 필드를 지원합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
name |
문자열 | 필수 항목입니다. 영역의 이름입니다. 위치 이름과 동일한 이름 지정 규칙을 따릅니다. 배포 전체에서 고유해야 합니다. |
location |
문자열 | 영역이 있는 위치의 이름입니다. location 목록에 정의된 위치와 일치해야 합니다. 생략하면 Spanner Omni가 default 위치에 영역을 할당합니다. |
single_server
|
불리언 | (선택사항) true로 설정된 경우 이 영역에 단일 서버만 있음을 나타냅니다 (루트 서버 하나만 있을 수 있고 다른 서버는 있을 수 없음). 영역 내에서 영역 메타데이터 복제 오버헤드를 제거합니다.
멀티 영역 배포에서는 사용자 데이터를 저장하지 않는 WITNESS 복제본 영역과 같은 특정 영역에 대해 이 값을 true로 설정할 수 있습니다. 다른 영역에는 여러 서버가 있습니다. 기본값은 false입니다. |
replica_type |
열거형 문자열 | Paxos 쿼럼에서 영역의 복제본 역할입니다. 지원되는 값은 READ_WRITE, WITNESS, READ_ONLY입니다. 기본값은 READ_WRITE입니다. |
root_server |
객체 목록 | 필수 항목입니다. 영역의 루트 서버 목록입니다. |
복제본 유형
Spanner Omni는 영역에 대해 세 가지 복제본 유형을 지원합니다.
READ_WRITE: 사용자 데이터의 전체 사본을 저장하고, 읽기 요청을 처리하고, Paxos 쿼럼에서 투표합니다. 읽기-쓰기 복제본은 쓰기를 제안하는 Paxos 리더가 될 수 있습니다.WITNESS: 합의를 달성하기 위해 Paxos 쿼럼에서 투표하지만 리더가 될 수는 없습니다. 감시 복제본은 사용자 데이터를 저장하지 않으며 읽기 요청을 처리할 수 없습니다. 원격 위치에 있는 전체 복제본의 스토리지 오버헤드나 쓰기 지연 시간 없이 쿼럼을 달성하는 데 도움이 됩니다.READ_ONLY: 리더에서 비동기식으로 복제된 사용자 데이터의 전체 사본을 저장합니다. 읽기 전용 복제본은 리더가 될 수 없으며 Paxos 쿼럼에서 투표하지 않습니다. 읽기-쓰기 복제본에서 읽기 트래픽을 오프로드합니다.
복제본 유형을 구성할 때는 배포가 다음 규칙을 충족해야 합니다.
- 배포에는 하나 이상의
READ_WRITE영역이 포함되어야 합니다. READ_WRITE영역 수는WITNESS영역 수보다 엄격하게 커야 합니다.
루트 서버
루트 서버는 Spanner Omni에서 특별한 책임을 갖습니다. 영역 메타데이터를 저장하고 영역의 다른 서버에 대한 멤버십을 관리합니다. 루트 서버의 쿼럼을 사용할 수 없게 되면 전체 영역을 사용할 수 없게 됩니다.
deployment.yaml에서 루트 서버를 구성할 때는 다음 가이드라인을 참고하세요.
- 일관성을 위해 쿼럼을 보장하려면 영역당 루트 서버 수가 1~9 사이의 홀수여야 합니다. 서버 수가 짝수이면 배포가 실패할 수 있습니다. 영역을 구성할 때 서버를 루트 서버로 지정합니다. 개발 또는 테스트에는 하나를 사용하고 가용성이 높은 프로덕션 영역에는 세 개를 사용하는 것이 좋습니다.
- 초기 배포 생성 중에
deployment.yaml파일에 루트 서버만 지정하세요. 나중에 루트가 아닌 서버를 추가하여 컴퓨팅 및 스토리지 용량을 확장할 수 있습니다.
각 루트 서버 객체는 다음 필드를 지원합니다.
host: 필수입니다. 서버를 실행하는 머신의 호스트 이름 또는 IP 주소입니다.port_base: (선택사항) 서버의 시작 포트 번호입니다. 기본값은15000입니다. 이 포트는 클라이언트 연결을 위한 공개 gRPC 포트가 됩니다. 내부 Spanner Omni 프로세스용으로[port_base + 1, port_base + 31]범위 (예:15001~15031)의 포트를 예약해야 합니다.
단일 서버 영역
영역 수준 single_server 필드는 개별 영역에 단일 서버만 포함되어 있음을 지정합니다. 단일 서버 영역에는 루트 서버가 하나만 있을 수 있으며 나중에 추가 서버를 추가할 수 없습니다. 이 설정을 사용하면 해당 영역 내에서 영역 메타데이터를 복제하는 오버헤드가 제거됩니다.
전체 배포가 단일 서버로 구성되어 있음을 나타내는 최상위 single_server 필드와 달리, 영역 수준 single_server 필드는 해당 특정 영역에만 적용됩니다.
다중 영역 배포에서 다른 영역에 여러 서버가 포함된 반면 개별 영역을 단일 서버 영역으로 구성할 수 있습니다. 예를 들어 READ_WRITE 복제본 영역이 2개 있고 WITNESS 복제본 영역이 1개인 배포를 생각해 보겠습니다.
- 두
READ_WRITE영역에는 고가용성을 제공하고 사용자 데이터의 컴퓨팅 및 스토리지 용량을 확장하기 위해 여러 서버 (single_server: false)가 포함되어 있습니다. - Paxos 투표량에 따라
WITNESS영역을 단일 서버 영역 또는 다중 서버 영역으로 구성할 수 있습니다.- 소규모~중규모 워크로드: 단일 VM 또는 서버가 배포의 모든 Paxos 투표 트래픽을 처리할 수 있는 충분한 용량을 갖는 경우
single_server: true를 설정합니다. 증인 복제본은 투표만 하고 사용자 데이터를 저장하지 않으므로 단일 서버를 사용하면 영역 내 메타데이터 복제 오버헤드가 제거됩니다. - 대규모 배포: 쓰기 처리량이 높거나 각
READ_WRITE영역에 서버가 많은 경우 (예: 노드가 수십 개 또는 수백 개) 단일 서버에 과부하가 걸려 Paxos 합의가 실패할 수 있습니다. 투표 워크로드를 분산하기 위해 여러 서버(single_server: false)로WITNESS영역을 구성합니다.
- 소규모~중규모 워크로드: 단일 VM 또는 서버가 배포의 모든 Paxos 투표 트래픽을 처리할 수 있는 충분한 용량을 갖는 경우
구성 예시는 증인 복제본을 사용한 다중 위치 배포를 참고하세요.
시계 SLA
Spanner Omni는 특수 GPS 하드웨어나 원자 시계 없이 외부 일관성을 제공하기 위해 소프트웨어 TrueTime을 사용합니다. clock_sla 객체는 배포 전반에서 서버 시계의 예상 동기화 경계를 정의합니다.
clock_sla:
jitter_in_s: 0.005
rate_error_in_ppm: 200
clock_sla 구성에는 다음 필드가 포함됩니다.
jitter_in_s: 예상되는 최대 시계 지터(초)입니다. 음수가 아닌 부동 소수점 수 (>= 0)여야 합니다.rate_error_in_ppm: 백만당 최대 클럭 드리프트 비율 오류 (ppm)입니다.0에서10000사이의 값이어야 합니다.
시간 동기화에 관한 자세한 내용은 TrueTime 및 외부 일관성을 참고하세요.
배포 설정
deployment_settings 객체는 리더 위치 기본 설정 및 네트워크 보안을 비롯한 전역 배포 동작을 구성합니다.
deployment_settings:
preferred_leader_location: us-central1
security_settings:
insecure_mode: false
authentication_methods:
- AUTHENTICATION_METHOD_PASSWORD
- AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE
선호하는 리더 위치
preferred_leader_location 필드는 Paxos 리더가 우선적으로 배치되는 위치를 지정합니다. 기본 애플리케이션 워크로드 근처에서 리더를 선택하면 추가 네트워크 왕복을 방지하여 쓰기 지연 시간이 줄어듭니다.
preferred_leader_location를 구성할 때는 다음 사항을 확인하세요.
- 지정된 위치는
location목록 (또는default)에 정의된 위치와 일치해야 합니다. - 지정된 위치에는 하나 이상의
READ_WRITE영역이 포함되어야 합니다.
보안 설정
security_settings 객체는 인증 및 암호화 모드를 구성합니다.
insecure_mode: 불리언입니다.true로 설정하면 수신 연결에 대한 인증 및 승인이 사용 중지됩니다. 이 모드는 프로토타입 제작 및 평가 목적으로만 사용해야 합니다. 기본값은false입니다.authentication_methods: 사용 설정된 인증 방법 목록입니다.insecure_mode이false인 경우에 필요합니다. 지원되는 값:AUTHENTICATION_METHOD_PASSWORD: 사용자 이름 및 비밀번호 인증을 사용 설정합니다.AUTHENTICATION_METHOD_CLIENT_CERTIFICATE: 상호 TLS (mTLS) 클라이언트 인증서 인증을 사용 설정합니다.
password_authentication_protocol: 비밀번호 확인에 사용되는 프로토콜입니다.AUTHENTICATION_METHOD_PASSWORD이authentication_methods에 포함된 경우 필수입니다. 지원 값:PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: 불투명 비대칭 비밀번호 인증 키 교환 프로토콜을 사용합니다.
암호화 및 사용자 인증 정보 설정에 대한 자세한 내용은 VM에서 TLS 암호화로 배포 만들기를 참고하세요.
배포 구성 예
다음 예에서는 일반적인 배포 패턴을 보여줍니다.
리전 멀티 영역 배포
다음 구성은 단일 위치의 세 영역에 걸쳐 고가용성 리전 배포를 만듭니다.
name: regional-prod
location:
- name: us-central1
zone:
- name: us-central1-a
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-a1.example.internal
- host: root-a2.example.internal
- host: root-a3.example.internal
- name: us-central1-b
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-b1.example.internal
- host: root-b2.example.internal
- host: root-b3.example.internal
- name: us-central1-c
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-c1.example.internal
- host: root-c2.example.internal
- host: root-c3.example.internal
감시 복제본이 있는 다중 위치 배포
다음 구성은 두 데이터 센터와 감시 부지에 걸쳐 있는 다중 위치 배포를 기본 리더 배치와 함께 만듭니다. location_distance 목록은 각 위치 쌍 간의 현실적이고 비대칭적인 네트워크 지연 시간을 지정합니다. 두 READ_WRITE 영역은 각각 고가용성을 위해 세 개의 루트 서버를 사용하는 반면 WITNESS 영역은 증인 복제본이 사용자 데이터를 저장하지 않으므로 단일 루트 서버와 함께 single_server:
true를 사용합니다.
name: multi-site-deployment
location:
- name: datacenter-east
- name: datacenter-west
- name: datacenter-central
location_distance:
- src: datacenter-east
dest: datacenter-central
latency_ms: 25
- src: datacenter-central
dest: datacenter-east
latency_ms: 27
- src: datacenter-central
dest: datacenter-west
latency_ms: 30
- src: datacenter-west
dest: datacenter-central
latency_ms: 32
- src: datacenter-east
dest: datacenter-west
latency_ms: 55
- src: datacenter-west
dest: datacenter-east
latency_ms: 58
zone:
- name: east-zone-1
location: datacenter-east
replica_type: READ_WRITE
root_server:
- host: east-root-1.example.internal
- host: east-root-2.example.internal
- host: east-root-3.example.internal
- name: west-zone-1
location: datacenter-west
replica_type: READ_WRITE
root_server:
- host: west-root-1.example.internal
- host: west-root-2.example.internal
- host: west-root-3.example.internal
- name: central-witness-zone
location: datacenter-central
single_server: true
replica_type: WITNESS
root_server:
- host: witness-root-1.example.internal
deployment_settings:
preferred_leader_location: datacenter-east
TLS 및 인증으로 안전하게 배포
다음 구성은 mTLS 및 비밀번호 인증이 사용 설정된 배포를 정의합니다.
name: secure-deployment
location:
- name: us-central1
zone:
- name: us-central1-a
location: us-central1
replica_type: READ_WRITE
root_server:
- host: server-1.example.internal
port_base: 15000
- host: server-2.example.internal
port_base: 15000
- host: server-3.example.internal
port_base: 15000
deployment_settings:
security_settings:
insecure_mode: false
authentication_methods:
- AUTHENTICATION_METHOD_PASSWORD
- AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE