部署作業設定

本文說明在虛擬機器 (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 副本。
  • 根伺服器:負責區域中繼資料和成員法定人數的專屬伺服器。
  • 副本類型:各區域的角色 (讀寫、見證或唯讀)。
  • 時鐘服務水準協議: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 通訊埠。 您必須在 [port_base + 1, port_base + 31] 範圍內預留連接埠 (例如 15001 到 15031),供內部 Spanner Omni 程序使用。

單一伺服器區域

區域層級的 single_server 欄位指定個別區域只包含單一伺服器。單一伺服器區域只能有一個根伺服器,且之後無法新增其他伺服器。這項設定可減少在該可用區內複製可用區中繼資料的負擔。

與頂層 single_server 欄位不同,後者會指定整個部署作業是由單一伺服器組成,而區域層級的 single_server 欄位只適用於該特定區域。

在多可用區部署中,您可以將個別可用區設定為單一伺服器可用區,其他可用區則包含多部伺服器。舉例來說,假設部署作業有兩個 READ_WRITE 副本區域和一個 WITNESS 副本區域:

  • 這兩個 READ_WRITE 區域包含多個伺服器 (single_server: false),可提供高可用性,並擴充使用者資料的運算和儲存空間容量。
  • 您可以根據 Paxos 投票量,將 WITNESS 區域設定為單一伺服器區域或多伺服器區域:
    • 中小型工作負載:如果單一 VM 或伺服器有足夠容量處理部署作業的所有 Paxos 投票流量,請設定 single_server: true。由於見證副本只會投票,不會儲存使用者資料,因此使用單一伺服器可消除區域內中繼資料的複製負擔。
    • 大規模部署:如果每個 READ_WRITE 區域的寫入處理量很高,或伺服器數量眾多 (例如數十或數百個節點),單一伺服器可能會過載,導致 Paxos 共識失敗。設定 WITNESS 區域,並使用多個伺服器 (single_server: false) 分散投票工作負載。

如需設定範例,請參閱「使用見證副本進行多位置部署」。

時鐘服務水準協議

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) 中定義的位置相符。
  • 指定位置必須包含至少一個 READ_WRITE 區域。

安全性設定

security_settings 物件會設定驗證和加密模式:

  • insecure_mode:布林值,如果設為 true,系統會停用連入連線的驗證和授權。這個模式僅供原型設計和評估。預設值為 false。
  • authentication_methods:已啟用驗證方式的清單。 如果 insecure_mode 為 false,則為必要欄位。支援的值:
    • AUTHENTICATION_METHOD_PASSWORD:啟用使用者名稱和密碼驗證。
    • AUTHENTICATION_METHOD_CLIENT_CERTIFICATE:啟用相互傳輸層安全標準 (mTLS) 用戶端憑證驗證。
  • password_authentication_protocol:用於密碼驗證的通訊協定。如果 AUTHENTICATION_METHOD_PASSWORD 包含在 authentication_methods 中,則為必要欄位。支援的值:
    • PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE:使用 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

後續步驟