本文說明如何在虛擬機器 (VM) 和 Kubernetes 上部署、擴充、停用及監控 Spanner Omni 工作人員。
工作站是專用的無狀態運算節點,可從 Spanner Omni 伺服器卸載背景和耗用大量資源的作業。工作人員不會代管使用者資料,也不會參與領導者選舉、交易或其他核心資料庫活動。與伺服器不同,工作人員不會與特定可用區建立關聯。工作人員會向某個地點註冊,並可為該地點的任何區域執行工作。新增及移除工作站的負擔很小,而且可以立即完成,因為工作站是無狀態的,不需要移動資料或重新平衡。
工作人員必須針對大型資料表 (超過 100 萬列) 建立向量索引,才能執行近似最鄰近項目 (ANN) 搜尋查詢。詳情請參閱「Spanner Omni 向量搜尋總覽」。
Worker 僅適用於 Spanner Omni 的商業版,開發人員版不支援 Worker。系統會以與部署作業中伺服器相同的費率 (每 vCPU) 計收工作站的運算費用。詳情請參閱「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 加密,請為每個工作人員設定加密:
- 如果尚未涵蓋 worker 主機名稱,請更新伺服器憑證。
- 將包含
ca.crt、server.crt和server.key的憑證目錄複製到 worker VM。 執行
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 建立向量索引,因此只需要在必要時部署工作人員。如果沒有任何工作站處於啟用狀態,索引建立作業會無限期暫停,直到部署工作站為止。工作人員啟動並向部署作業註冊後,系統就會自動繼續建立索引。