部署及管理工作站

本文說明如何在虛擬機器 (VM) 和 Kubernetes 上部署、擴充、停用及監控 Spanner Omni 工作人員。

工作站是專用的無狀態運算節點,可從 Spanner Omni 伺服器卸載背景和耗用大量資源的作業。工作人員不會代管使用者資料,也不會參與領導者選舉、交易或其他核心資料庫活動。與伺服器不同,工作人員不會與特定可用區建立關聯。工作人員會向某個地點註冊,並可為該地點的任何區域執行工作。新增及移除工作站的負擔很小,而且可以立即完成,因為工作站是無狀態的,不需要移動資料或重新平衡。

工作人員必須針對大型資料表 (超過 100 萬列) 建立向量索引,才能執行近似最鄰近項目 (ANN) 搜尋查詢。詳情請參閱「Spanner Omni 向量搜尋總覽」。

Worker 僅適用於 Spanner Omni 的商業版,開發人員版不支援 Worker。系統會以與部署作業中伺服器相同的費率 (每 vCPU) 計收工作站的運算費用。詳情請參閱「Spanner Omni 版本總覽」。

事前準備

將工作人員新增至現有的 Spanner Omni 部署作業前,請確認您的環境符合下列需求:

  • 下載並設定 Spanner Omni 二進位檔。

  • 現有部署作業:確認您已部署並執行 Spanner Omni (不是單一伺服器部署作業),且狀態為 READY,並已設定 Commercial 版。開發人員版不支援 Worker。工作人員的運算費用與部署中的伺服器相同。詳情請參閱「Spanner Omni 版本總覽」。請確認您已備妥下列資訊:

    • 部署設定中定義的目標位置名稱 (例如 us-central1)。
    • 部署端點 (HOST:PORT,例如 my-spanner-deployment:15003),或叢集探索的根伺服器位址清單 (ROOT_HOST_1:PORT、ROOT_HOST_2:PORT,例如 root-server-1:15000、root-server-2:15000)。
  • 系統和硬體資源:請確保您分配給工作者的運算資源充足,可在可接受的時間內執行必要作業。

  • vSphere 設定:如果您在 vSphere 虛擬化平台上執行 Spanner Omni,請停用時間戳記計數器 (TSC) 的虛擬化功能。將 monitor_control.virtual_rdtsc = FALSE 新增至虛擬機器的 .vmx 設定檔。

  • 網路和防火牆設定:除了標準伺服器通訊埠 (15000 至 15025) 之外,工作人員還會使用通訊埠 15027。請確保網路設定允許通訊埠 15000 至 15027 的通訊。

在 VM 上部署工作站

如要在虛擬機器 (VM) 上部署工作站,請使用部署端點或根伺服器清單啟動工作站程序。

選項 A:開始使用部署端點

如要使用部署作業端點啟動工作人員,請執行 spanner workers start 指令:

spanner workers start \
  --location=LOCATION_NAME \
  --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
  --deployment=DEPLOYMENT_ENDPOINT \
  --base-dir=BASE_DIR \
  --license-file-path=LICENSE_FILE_PATH

更改下列內容:

  • LOCATION_NAME:目標位置名稱,例如 us-central1。
  • WORKER_HOSTNAME:可解析的 worker VM 主機名稱或 IP 位址。
  • WORKER_PORT_BASE:啟動工作站的基礎通訊埠,例如 15000 或 20000。
  • DEPLOYMENT_ENDPOINT:部署端點的主機和通訊埠,例如 my-spanner-deployment:15003。
  • BASE_DIR:工作站資料和記錄的基底目錄,例如 /var/spanner。
  • LICENSE_FILE_PATH:Spanner Omni 授權檔案的路徑。

方法 B:開始使用根伺服器清單

如要使用根伺服器清單啟動工作站,請執行 spanner workers start 指令:

spanner workers start \
  --location=LOCATION_NAME \
  --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
  --join-servers=ROOT_SERVER_1_HOST:ROOT_SERVER_PORT_BASE,\
ROOT_SERVER_2_HOST:ROOT_SERVER_PORT_BASE \
  --base-dir=BASE_DIR \
  --license-file-path=LICENSE_FILE_PATH

更改下列內容:

  • LOCATION_NAME:目標位置名稱,例如 us-central1。
  • WORKER_HOSTNAME:可解析的 worker VM 主機名稱或 IP 位址。
  • WORKER_PORT_BASE:啟動工作站的基礎通訊埠,例如 15000 或 20000。
  • ROOT_SERVER_1_HOST、ROOT_SERVER_2_HOST:部署作業中根伺服器的主機名稱或 IP 位址。
  • ROOT_SERVER_PORT_BASE:根伺服器的基本通訊埠,例如 15000。
  • BASE_DIR:工作站資料和記錄的基底目錄,例如 /var/spanner。
  • LICENSE_FILE_PATH:Spanner Omni 授權檔案的路徑。

設定加密機制

如果 Spanner Omni 部署作業使用 TLS 或 mTLS 加密,請為每個工作人員設定加密:

  1. 如果尚未涵蓋 worker 主機名稱,請更新伺服器憑證。
  2. 將包含 ca.crt、server.crt 和 server.key 的憑證目錄複製到 worker VM。
  3. 執行 spanner workers start 時新增 --certificate-directory 旗標:

    spanner workers start \
      --location=LOCATION_NAME \
      --address=WORKER_HOSTNAME:WORKER_PORT_BASE \
      --deployment=DEPLOYMENT_ENDPOINT \
      --base-dir=BASE_DIR \
      --certificate-directory=CERTIFICATE_DIRECTORY \
      --license-file-path=LICENSE_FILE_PATH
    

    將 CERTIFICATE_DIRECTORY 替換為包含 ca.crt、server.crt 和 server.key 的目錄。

如要進一步瞭解如何設定憑證和安全部署,請參閱「在 VM 上建立安全部署」。

在 Kubernetes 上部署工作站

在 Kubernetes 環境 (例如 Google Kubernetes Engine (GKE) 或 Amazon Elastic Kubernetes Service (Amazon EKS)) 中,您會將工作人員部署為現有 Spanner Omni Helm 版本的一部分,並與叢集位於相同命名空間。Helm 資訊套件會將 worker 部署為 Kubernetes StatefulSet,並搭配無頭的服務,為每個 worker Pod 提供穩定的網路身分和PersistentVolumeClaims (PVC),讓根伺服器與每個 worker 都能穩定通訊。

根據預設,Helm 圖表只會在標示為 spanner-role=workers 的節點上排定工作站 Pod,容許 spanner-role=workers:NoSchedule 汙染,且每個節點最多執行一個工作站 Pod。啟用 worker 前,請先新增具有這個標籤和汙點的節點集區,且節點數量至少為 workers.replicas。每個節點都需要足夠的可分配 CPU 和記憶體,才能容納一個工作站 Pod,如 workers.resources.cpu 和 workers.resources.memory 所設定。Kubernetes 會保留每個節點的部分容量供系統元件使用,因此請選擇大於這些值的節點。如要使用其他標籤,請設定 workers.nodeLabelKey 和 workers.nodeLabelValue。如要移除標籤規定,請設定 workers.nodeLabelKey=""。如要取代預設排程規則,請設定 workers.affinity。

如要在現有部署作業中啟用 worker,請執行 helm upgrade 指令:

helm upgrade spanner-omni HELM_CHART_PATH \
  --reuse-values \
  --set workers.enabled=true \
  --namespace NAMESPACE

更改下列內容:

  • HELM_CHART_PATH:Spanner Omni Helm 圖表的路徑。
  • NAMESPACE:部署 Spanner Omni 叢集的 Kubernetes 命名空間,例如 spanner-ns。

如要讓工作站在任何有足夠可分配 CPU 和記憶體的節點上執行,請將 workers.nodeLabelKey 設為空字串。這會移除節點標籤需求和汙點容許:

helm upgrade spanner-omni HELM_CHART_PATH \
  --reuse-values \
  --set workers.enabled=true \
  --set workers.nodeLabelKey="" \
  --namespace NAMESPACE

選用設定包括:

  • --set workers.replicas=WORKER_REPLICAS:要部署的 worker 副本數量。預設值為 1。

  • --set workers.resources.cpu=CPU_CORES:每個 worker 的 CPU 上限和要求。預設值為 6。

  • --set workers.resources.memory=MEMORY_LIMIT:每個 worker 的記憶體限制和要求。預設值為 24Gi。

  • --set workers.storage.size=STORAGE_SIZE:每位工作人員的儲存空間容量。預設值為 20Gi。

  • --set workers.storage.storageClassName=STORAGE_CLASS:用於 worker 儲存空間的儲存空間級別,例如 GKE 上的 hyperdisk-balanced-rwo 或 Amazon EKS 上的 aws-gp3。預設值為空字串,會沿用叢集預設儲存空間類別。

  • --set workers.port=WORKER_PORT:工作人員接聽的網路通訊埠。預設值為 deployment.basePort,也就是 15000。

  • --set workers.joinServers={ROOT_HOST_1:PORT,ROOT_HOST_2:PORT}:以半形逗號分隔的根伺服器位址清單,用於加入。預設值為空白清單 ([]),會從部署拓撲探索所有有效的根伺服器。

  • --set workers.nodeLabelKey=NODE_LABEL_KEY:用於節點親和性和容許條件的 Kubernetes 節點標籤鍵,可將工作站隔離到專屬節點集區。預設值為 spanner-role。設為空白字串 "" 即可停用節點親和性和容許度。

  • --set workers.nodeLabelValue=NODE_LABEL_VALUE:用於節點相依性和容錯的 Kubernetes 節點標籤值。預設值為 workers。

  • --set workers.pdbMaxUnavailable=MAX_UNAVAILABLE:PodDisruptionBudget 發生自願性中斷時,可無法使用的 worker Pod 數量上限。預設值為 1。

  • workers.affinity:工作站 Pod 的自訂 Kubernetes 親和性規則。如未指定,系統會套用預設節點親和性 (使用 workers.nodeLabelKey 和 workers.nodeLabelValue),以及跨主機名稱的 Pod 反親和性 (kubernetes.io/hostname)。由於這是巢狀物件,請使用 -f 旗標在 values.yaml 檔案中指定。

驗證 Worker 部署作業

如要確認工作站 Pod 正在執行且已準備就緒,請執行下列指令:

kubectl get pods --namespace NAMESPACE -l app.kubernetes.io/component=spanner-worker

擴充及停用工作站

Worker 不會儲存使用者資料,也不會參與資料庫共識。工作人員的擴充和停用作業會立即完成。您可以在啟動向量索引建立作業之前或之後啟動工作站,並在索引建立完成後立即停用工作站。

自動調整 worker 資源配置

如要自動建立及調度工作站,請監控 spanner_box_compute_heavy_workers_required 指標。如果指標值大於 0,部署作業就需要一或多個 worker 完成待處理的背景作業,例如在大型資料表上建立向量索引。當指標值返回 0 時,所有待處理作業都會完成,您可以停用工作人員。

停用 VM 工作人員

如要停止在 VM 上執行的 worker 程序,請在執行 worker 程序的終端機中按下 Control+C,或使用程序 ID (PID) 停止程序:

kill -TERM PID

將 PID 替換為spanner workers程序的程序 ID。或者,關閉工作站 VM。

停用 Kubernetes 工作站

如要在 Kubernetes 上停用 worker,請在 Helm 版本中停用 worker,或使用 kubectl 直接縮減 worker 副本:

  • 停用工作人員:如要從叢集中移除工作人員 StatefulSet 和服務,同時保留其餘部署作業,請執行 helm upgrade 指令並加上 workers.enabled=false:

    helm upgrade spanner-omni HELM_CHART_PATH \
      --reuse-values \
      --set workers.enabled=false \
      --namespace NAMESPACE
    

    更改下列內容:

    • HELM_CHART_PATH:Spanner Omni Helm 圖表的路徑。
    • NAMESPACE:部署 Spanner Omni 叢集的 Kubernetes 命名空間,例如 spanner-ns。
  • 縮減工作站副本數量:如要將工作站 Pod 縮減至零個副本,同時在叢集中保持工作站設定處於啟用狀態,請執行 kubectl scale 指令:

    kubectl scale statefulset spanner-worker \
      --replicas=0 \
      --namespace NAMESPACE
    

    將 NAMESPACE 替換為部署 Spanner Omni 叢集的 Kubernetes 命名空間,例如 spanner-ns。

監控及排解 worker 問題

如果部署作業已啟用監控功能,您可以使用 Prometheus 或 Grafana 資訊主頁監控工作人員。工作站會公開與 Spanner Omni 伺服器類似的指標。Grafana 資訊主頁包含「Worker Insights」資訊主頁,可監控每個工作人員的資源用量。

工作人員會將記錄檔寫入 --base-dir 指定的基底目錄中的 logs 子目錄:

BASE_DIR/logs

spanner admin diagnostics create 指令不會從工作站收集記錄或診斷資訊。如要檢查 worker 記錄檔,請直接在 worker 機器或 Pod 上查看 BASE_DIR/logs 中的檔案,或是針對 Kubernetes worker Pod 執行 kubectl logs。

如要進一步瞭解如何監控及設定資訊主頁,請參閱「監控簡介」和「使用 Grafana 資訊主頁進行監控」。

向量索引建立作業沒有進度

如果在大資料表上建立向量索引,且索引建立作業仍處於待處理狀態,沒有進度,請確認至少有一個工作人員正在執行作業,並連線至部署作業。

即使沒有任何工作人員處於活動狀態,您也能使用 Spanner Omni 建立向量索引,因此只需要在必要時部署工作人員。如果沒有任何工作站處於啟用狀態,索引建立作業會無限期暫停,直到部署工作站為止。工作人員啟動並向部署作業註冊後,系統就會自動繼續建立索引。