このドキュメントでは、仮想マシン(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 に設定すると、デプロイ全体が単一サーバーのデプロイであることを指定し、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ゾーンを構成して、投票ワークロードを分散します。
- 小規模から中規模のワークロード: 単一の VM またはサーバーにデプロイのすべての Paxos 投票トラフィックを処理するのに十分な容量がある場合は、
構成例については、監視レプリカを使用したマルチロケーション デプロイをご覧ください。
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