VM에 배포 만들기

이 문서에서는 가상 머신(VM)에 Spanner Omni를 배포하는 방법을 설명합니다. 이 배포에는 암호화가 없습니다. Spanner Omni를 평가하기 위해 테스트 또는 개념 증명 환경을 빠르게 설정하려면 mTLS 또는 기타 보안 조치를 구성할 필요가 없으므로 안전하지 않은 배포를 만드는 것이 가장 빠른 시작 방법입니다. 하지만 암호화되지 않은 네트워크 트래픽 및 공개 액세스와 같은 보안 위험 때문에 프로덕션 환경에는 이 구성을 사용하지 않는 것이 좋습니다. 단일 서버 또는 여러 영역에 걸친 리전 배포 중에서 선택할 수 있습니다.

Spanner Omni의 미리보기 버전은 TLS 암호화를 지원하지 않습니다. TLS 암호화로 배포를 만들 수 있는 기능을 사용하려면 Google에 문의하여 Spanner Omni의 정식 버전에 대한 조기 액세스를 요청하세요.

시작하기 전에

안전하지 않은 배포를 설정하기 전에 다음 요구사항을 충족하는지 확인하세요.

  • SSH 액세스: Spanner Omni 바이너리를 다운로드하고 실행하려면 배포의 모든 머신에 SSH 액세스 권한이 있어야 합니다.

  • 연결: 배포의 모든 머신이 서로 연결할 수 있습니다.

  • 네트워킹: 네트워크 구성에서 포트 15000~15025에서 TCP 통신을 허용합니다.

  • 저장용량: 각 머신에는 배포에서 처리하는 데이터를 호스팅할 수 있는 충분한 저장용량이 있습니다.

  • 시스템 요구사항: 설정이 모든 시스템 요구사항을 충족하는지 확인합니다.

  • vSphere 구성: vSphere 가상화 플랫폼에서 Spanner Omni를 실행하는 경우 타임스탬프 카운터 (TSC)의 가상화를 사용 중지합니다. 가상 머신의 .vmx 구성 파일에 monitor_control.virtual_rdtsc = FALSE를 추가합니다.

1단계: 배포 토폴로지 결정

Spanner Omni는 위치, 영역, 서버의 계층 구조를 사용하여 배포 토폴로지를 정의합니다. 가용성 목표에 따라 다음 토폴로지 중에서 선택할 수 있습니다.

  • 단일 서버: 배포에 단일 머신에서 실행되는 단일 서버가 있습니다.

  • 단일 영역: 배포가 단일 영역에 분산된 여러 서버에서 실행됩니다.

  • 단일 위치, 여러 영역 (복제된 배포): 배포가 한 위치의 여러 영역에 분산된 여러 서버에서 실행됩니다.

  • 여러 위치, 여러 영역: 배포가 여러 위치와 여러 영역에 분산된 여러 서버에서 실행됩니다.

자세한 내용은 Spanner Omni 주요 용어Spanner Omni 배포 구성을 참조하세요.

단일 서버 이외의 배포의 경우 토폴로지를 정의하는 deployment.yaml이라는 YAML 구성 파일을 만듭니다. 이 파일에서 루트 서버만 지정합니다. 나중에 루트가 아닌 서버를 추가합니다.

예: 복제된 멀티 영역 배포

다음 예에서는 3개 영역에 걸친 리전 배포의 구성을 보여줍니다.

name: regional-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: us-central1-b
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver2
  - name: us-central1-c
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver3

예: 멀티 위치 배포

다음 예에서는 3개 위치에 걸친 배포의 구성을 보여줍니다.

name: multi-location-deployment
location:
  - name: us-central1
  - name: europe-west2
  - name: asia-southeast1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: europe-west2-a
    location: europe-west2
    single_server: false
    root_server:
      - host: rootserver2
  - name: asia-southeast1-a
    location: asia-southeast1
    single_server: false
    root_server:
      - host: rootserver3

2단계: 바이너리 다운로드 및 설정

배포의 각 머신에 대해 다음 단계를 반복합니다.

  1. 바이너리 디렉터리를 만들고 해당 디렉터리로 이동합니다.

  2. 바이너리를 다운로드합니다.

    gsutil cp gs://spanner-omni/VERSION/spanner-omni-VERSION-linux-x86_64.tar.gz .
    

    scp 또는 기타 파일 전송 도구를 사용하여 바이너리를 VM에 복사할 수도 있습니다.

  3. 바이너리를 추출합니다.

    tar -xvf spanner-omni-VERSION-linux-x86_64.tar.gz
    

3단계: 서버 시작

각 서버에 데이터, 메타데이터, 로그를 저장할 기본 디렉터리를 만듭니다. 서버를 다시 시작해야 하는 경우 연속성을 위해 동일한 디렉터리를 지정합니다.

옵션 A: 단일 서버 배포

단일 서버 배포의 경우 다음 명령어를 실행합니다.

spanner start-single-server --base-dir=SPANNER_BASE_DIR

서버가 시작되면 6단계: 배포와 상호작용으로 진행합니다.

옵션 B: 스케일 아웃 배포

스케일 아웃 배포의 경우 각 머신에서 서버를 시작합니다. --server-address--zone 플래그는 배포 구성의 값과 일치합니다. 네트워크에서 server_address를 확인합니다.

spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

예를 들면 다음과 같습니다.

spanner start --root --server-address=rootserver1 --zone=us-central-1a --base-dir=./spanbasedir

4단계: 배포 만들기

배포를 만들려면 다음 단계를 따르세요.

  1. 1단계: 배포 토폴로지 결정에서 만든 deployment.yaml 파일을 루트 서버 중 하나에 복사합니다.

  2. 해당 루트 서버에서 다음 명령어를 실행하여 배포를 만듭니다.

    spanner deployment create --config-file=deployment.yaml
    

    각 머신의 콘솔에 배포가 준비되었음을 나타내는 메시지가 표시됩니다.

  3. 영역을 나열하여 배포를 검증합니다.

    spanner deployment zones list
    

    출력에 deployment.yaml에서 지정한 위치, 영역, 서버가 나열됩니다.

5단계: (선택사항) 부하 분산기 구성

다음 세부정보로 TCP 부하 분산기를 설정합니다.

설정
프로토콜 TCP
백엔드 IP 서버의 IP 주소
포트 15000 또는 --server-address 플래그에서 사용하는 포트
상태 점검 URL http://SERVER_IP:15012/healthz
균형 조정 전략 라운드 로빈

멀티 위치 배포의 경우 위치당 하나의 부하 분산기와 모든 위치에 트래픽을 분산하는 기본 부하 분산기를 설정할 수 있습니다.

6단계: 배포와 상호작용

배포가 준비되면 VM 또는 로컬 머신에서 CLI를 사용하여 배포와 상호작용할 수 있습니다. 개발자 노트북과 같은 별도의 머신에서 CLI를 실행하는 경우 CLI 패키지를 다운로드하고 압축을 풉니다. 자세한 내용은 다음 Spanner Omni CLI를 사용한 빠른 시작을 참조하세요.

배포와 상호작용하려면 다음 단계를 따르세요.

  1. 데이터베이스를 만듭니다.

    spanner --deployment-endpoint=LOAD_BALANCER_IP_OR_SERVER_IP databases create DATABASE_NAME
    
  2. SQL 셸을 엽니다.

    spanner sql --database=DATABASE_NAME
    
  3. 테이블을 만들고 데이터를 삽입합니다.

    CREATE TABLE names (
      nameId INT64 NOT NULL,
      name STRING(100)
    ) PRIMARY KEY (nameId);
    
    INSERT INTO names (nameId, name) VALUES (1, "Jack");
    
  4. 데이터베이스와 데이터를 확인합니다.

    데이터베이스를 나열하려면 bash spanner databases list

    결과는 다음과 유사합니다.

    NAME 상태 VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME ENABLE_DROP_PROTECTION
    DATABASE_NAME READY 1시간 2025-02-07T12:25:30Z 거짓

    테이블을 쿼리하려면: bash spanner sql --database=DATABASE_NAME

  5. 다음 SQL 명령어를 실행합니다.

    SHOW TABLES;
    SELECT * FROM names;
    

7단계: (선택사항) 배포 확장

영역 내에서 용량을 확장하려면 루트가 아닌 서버를 추가하면 됩니다. 각 새 서버에서 다음 명령어를 실행합니다.

spanner start --server-address=NON_ROOT_HOSTNAME --join-servers=SERVER1:PORT1,SERVER2:PORT2,SERVER3:PORT3 --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

8단계: (선택사항) 배포 관찰

배포의 상태와 성능을 모니터링하려면 측정항목 수집, 시각화, 알림을 설정하면 됩니다. 분산 트레이스를 수집하여 요청 지연 시간을 분석할 수도 있습니다.

Prometheus 설정

Spanner Omni 서버는 포트 15012에서 Prometheus 형식으로 측정항목을 내보냅니다. prometheus.ymlscrape_configs에 다음을 추가합니다.

scrape_configs:
  - job_name: 'spanner'
    static_configs:
      - targets: ['HOST1:15012', 'HOST2:15012', 'HOSTN:15012']

Grafana 설정

Grafana에서 모니터링 데이터를 보려면 다음 단계를 따르세요.

  1. provisioning/datasources에서 파일을 만들어 Prometheus 데이터 소스를 프로비저닝합니다.

    apiVersion: 1
    datasources:
      - name: Prometheus
        uid: prometheus
        type: prometheus
        access: proxy
        url: http://PROMETHEUS_HOST:PROMETHEUS_PORT
        jsonData:
          httpMethod: POST
          manageAlerts: false
          prometheusType: Prometheus
          prometheusVersion: PROMETHEUS_VERSION
          cacheLevel: 'High'
          disableRecordingRules: false
          incrementalQueryOverlapWindow: 10m
    
  2. Grafana UI에서 대시보드를 만들거나 provisioning/dashboards를 사용하여 프로비저닝합니다.

알림 설정

Grafana UI 또는 구성 파일을 사용하여 알림을 구성합니다. 예를 들어 트랜잭션 지연 시간의 95번째 백분위수 (p95)가 100밀리초를 초과하면 알림을 트리거할 수 있습니다. 사용 가능한 알림 목록은 Prometheus 알림을 사용하여 Spanner Omni 모니터링을 참조하세요.

트레이스 수집 및 분석

OTLP 형식으로 분산 추적 정보를 수집하고 Jaeger와 같은 도구로 시각화합니다.

  1. OTLP 호환 트레이스 수집기를 설정합니다. Jaeger의 경우:

    export COLLECTOR_OTLP_ENABLED=true
    jaeger-all-in-one
    

    OTLP 포트에서 Spanner Omni와 수집기 간의 네트워크 트래픽을 허용하는지 확인합니다.

  2. SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT 환경 변수를 설정하고 Spanner Omni 서버를 시작합니다.

    export SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT=COLLECTOR_HOST:COLLECTOR_PORT
    spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR
    

다음 단계