デプロイ構成

このドキュメントでは、仮想マシン(VM)またはベアメタル サーバーでの Spanner Omni のデプロイ構成について説明します。ここでは、Spanner Omni CLI を使用して VM デプロイ トポロジとランタイム パラメータを定義する際に使用される YAML デプロイ構成ファイル(deployment.yaml)の構造と構成オプションについて説明します。

デプロイを作成する方法については、次のいずれかをご覧ください。

デプロイ構成の概要

VM またはベアメタル サーバーにデプロイを作成する場合は、この構成ファイルを Spanner Omni CLI の spanner deployment create コマンドに渡します。

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

デプロイ構成では、次の主要な要素を定義します。

構成ファイルの構造

次の例は、デプロイ構成ファイルの最上位構造を示しています。

# 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 に設定すると、デプロイ全体が単一サーバーのデプロイであることを指定し、1 つのゾーンと 1 つのサーバーに制限します。single_server: true で作成されたデプロイでは、作成後にゾーンやサーバーを追加できません。Spanner Omni をシングル サーバー モードで実行する場合は、spanner start-single-server コマンドを実行すると Spanner Omni によって自動的に生成されるため、この構成を手動で作成する必要はありません。デフォルトは false です。
location オブジェクトのリスト デプロイ内の物理的または論理的な場所(リージョン)。
location_distance オブジェクトのリスト 省略可。ロケーションのペア間のネットワーク レイテンシ。
zone オブジェクトのリスト 必須。デプロイを構成するゾーン。少なくとも 1 つのゾーンを指定する必要があります。
clock_sla オブジェクト 省略可。ソフトウェア TrueTime のクロック同期サービスレベル契約(SLA)パラメータ。
deployment_settings オブジェクト 省略可。優先リーダーの配置とセキュリティ認証のランタイム設定。

デプロイ名

name フィールドには、ユーザーが選択したデプロイの名前を指定します。デプロイを識別する任意の文字列(prod、staging、regional-deployment など)を使用できます。

単一サーバー モード

最上位の single_server フィールドは、デプロイ全体が単一サーバーのデプロイであることを指定します。true に設定すると、この設定によりデプロイが 1 つのゾーンと 1 つのサーバーに制限され、ローカル開発環境とテスト環境のリソース オーバーヘッドが削減されます。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: ネットワーク レイテンシ(ミリ秒単位)。0 または正の整数にしてください。省略すると、Spanner Omni はレイテンシが無視できる(ミリ秒未満)と想定します。

物理ネットワークのネットワーク レイテンシは、必ずしも対称ではありません。(src, dest) と (dest, src) の両方を指定すると、Spanner Omni は両方の測定値を尊重します。1 つの方向のみを指定した場合、Spanner Omni は逆方向のレイテンシも同じであると想定します。

ゾーン

ゾーンは、ロケーション内の 1 つ以上のサーバーの論理グループです。データ レプリケーションの場合、各ゾーンは Paxos レプリカを表します。デプロイには少なくとも 1 つのゾーンが必要です。

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 に設定すると、このゾーンにサーバーが 1 つしかない(ルートサーバーが 1 つだけで、他のサーバーがない)ことを示します。ゾーン内のゾーン メタデータ レプリケーションのオーバーヘッドを排除します。マルチゾーン デプロイでは、ユーザーデータを保存しない WITNESS レプリカ ゾーンなどの特定のゾーンに対して true に設定できます。他のゾーンには複数のサーバーがあります。デフォルトは false です。
replica_type 列挙型文字列 Paxos 定足数におけるゾーンのレプリカの役割。サポートされている値は、READ_WRITE、WITNESS、READ_ONLY です。デフォルトは READ_WRITE です。
root_server オブジェクトのリスト 必須。ゾーン内のルートサーバーのリスト。

レプリカの種類

Spanner Omni は、ゾーンに対して次の 3 種類のレプリカタイプをサポートしています。

  • READ_WRITE: ユーザーデータの完全なコピーを保存し、読み取りリクエストを処理し、Paxos 定足数で投票します。読み書きレプリカは、Paxos リーダーになって書き込みを提案できます。
  • WITNESS: Paxos 定足数で投票してコンセンサスの達成を支援しますが、リーダーになることはできません。ウィットネス レプリカはユーザーデータを保存せず、読み取りリクエストを処理できません。これにより、遠隔地の完全なレプリカのストレージ オーバーヘッドや書き込みレイテンシなしでクォーラムを実現できます。
  • READ_ONLY: リーダーから非同期で複製されたユーザーデータの完全なコピーを保存します。読み取り専用レプリカはリーダーになることができず、Paxos クォーラムで投票することもありません。読み取り / 書き込みレプリカから読み取りトラフィックをオフロードします。

レプリカタイプを構成するときは、デプロイが次のルールを満たしていることを確認してください。

  • デプロイには、少なくとも 1 つの READ_WRITE ゾーンが含まれている必要があります。
  • READ_WRITE ゾーンの数は、WITNESS ゾーンの数よりも厳密に大きくなければなりません。

ルートサーバー

ルートサーバーには、Spanner Omni で特別な役割があります。ゾーン メタデータを保存し、ゾーン内の他のサーバーのメンバーシップを管理します。ルートサーバーのクォーラムが利用できなくなると、ゾーン全体が利用できなくなります。

deployment.yaml でルートサーバーを構成する際は、次のガイドラインに留意してください。

  • ゾーンあたりのルートサーバーの数は、整合性のクォーラムを確保するために、1 ~ 9 の奇数にする必要があります。サーバーの数が偶数の場合、デプロイが失敗することがあります。ゾーンを構成するときに、サーバーをルートサーバーとして指定します。開発またはテスト用に 1 つ、高可用性の本番環境ゾーン用に 3 つ使用することをおすすめします。
  • 最初のデプロイ作成時に deployment.yaml ファイルでルートサーバーのみを指定します。非ルート サーバーは、コンピューティング容量とストレージ容量をスケーリングするために後で追加できます。

各ルートサーバー オブジェクトは、次のフィールドをサポートしています。

  • host: 必須。サーバーを実行しているマシンのホスト名または IP アドレス。
  • port_base: 省略可。サーバーの開始ポート番号。デフォルトは 15000 です。このポートは、クライアント接続用の公開 gRPC ポートになります。内部 Spanner Omni プロセス用に、[port_base + 1, port_base + 31] の範囲(15001~15031 など)のポートを予約する必要があります。

単一サーバー ゾーン

ゾーンレベルの single_server フィールドは、個々のゾーンに単一のサーバーのみが含まれることを指定します。シングルサーバー ゾーンにはルートサーバーを 1 つだけ配置でき、後でサーバーを追加することはできません。この設定により、そのゾーン内のゾーン メタデータの複製によるオーバーヘッドがなくなります。

デプロイ全体が単一のサーバーで構成されていることを指定する最上位の single_server フィールドとは異なり、ゾーンレベルの single_server フィールドは、その特定のゾーンにのみ適用されます。

マルチゾーン デプロイでは、他のゾーンに複数のサーバーが含まれている場合でも、個々のゾーンを単一サーバー ゾーンとして構成できます。たとえば、2 つの READ_WRITE レプリカ ゾーンと 1 つの WITNESS レプリカ ゾーンがあるデプロイについて考えてみましょう。

  • 2 つの READ_WRITE ゾーンには、高可用性を提供し、ユーザーデータのコンピューティング容量とストレージ容量をスケーリングするための複数のサーバー(single_server: false)が含まれています。
  • Paxos 投票量に応じて、WITNESS ゾーンをシングル サーバー ゾーンまたはマルチ サーバー ゾーンとして構成できます。
    • 小規模から中規模のワークロード: 単一の VM またはサーバーにデプロイのすべての Paxos 投票トラフィックを処理するのに十分な容量がある場合は、single_server: true を設定します。Witness レプリカは投票のみを行い、ユーザーデータを保存しないため、単一のサーバーを使用すると、ゾーン内のメタデータ レプリケーションのオーバーヘッドがなくなります。
    • 大規模なデプロイ: 書き込みスループットが高い場合や、各 READ_WRITE ゾーンに多数のサーバーがある場合(数十または数百のノードなど)、単一のサーバーが過負荷になり、Paxos コンセンサス エラーが発生する可能性があります。複数のサーバー(single_server: false)で WITNESS ゾーンを構成して、投票ワークロードを分散します。

構成例については、監視レプリカを使用したマルチロケーション デプロイをご覧ください。

Clock SLA

Spanner Omni は、ソフトウェア TrueTime を使用して、専用の GPS ハードウェアや原子時計を必要とせずに外部整合性を提供します。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)で定義されたロケーションと一致する必要があります。
  • 指定されたロケーションには、少なくとも 1 つの 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: OPAQUE 非対称パスワード認証鍵交換プロトコルを使用します。

暗号化と認証情報のセットアップの詳細については、VM で TLS 暗号化を使用してデプロイを作成するをご覧ください。

デプロイ構成の例

次の例は、一般的なデプロイ パターンを示しています。

リージョン マルチゾーン デプロイ

次の構成では、単一のロケーション内の 3 つのゾーンに高可用性リージョン デプロイを作成します。

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

ウィットネス レプリカを使用したマルチロケーション デプロイ

次の構成では、2 つのデータセンターと監視サイトにまたがるマルチロケーション デプロイを作成し、優先リーダーの配置を行います。location_distance リストには、各ペアのロケーション間の現実的な非対称ネットワーク レイテンシを指定します。2 つの READ_WRITE ゾーンはそれぞれ高可用性のために 3 つのルートサーバーを使用しますが、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

次のステップ