本頁面說明各種錯誤情況,並提供解決錯誤的指引。
複製情境
本節說明執行個體可能發生的複製問題。
如何監控複製延遲?
Memorystore for Valkey 具有 /instance/replication/maximum_offset_diff 指標。這項指標會監控主要執行個體中節點的複製偏移差異上限 (以位元組為單位)。
只要將複寫偏移差異維持在較低的水準,副本就能以較低的成本,更頻繁地執行增量同步作業,而非完整同步作業。
建議您為 maximum_offset_diff 指標設定門檻。如果超過門檻,Memorystore for Valkey 可以透過快訊通知您。
根據執行個體的節點類型,建議您設定的門檻如下:
如果節點類型為
shared-core-nano、custom-pico、custom-micro、custom-mini、standard-small、highmem-medium、highcpu-medium或standard-large,請將閾值設為小於 64 MB。如果節點類型為
highmem-xlarge或highmem-2xlarge,請將門檻設為小於 1 GB。
如果主要執行個體與備用資源之間出現複製延遲,該怎麼辦?
如果主要執行個體有太多寫入作業,而備用資源無法趕上複製這些作業,就可能會出現明顯的複製延遲。如要解決這個問題,建議您增加執行個體的分片數量,藉此擴充執行個體的容量。
CPU 使用率情境
本節說明執行個體可能遇到的 CPU 使用率問題。
如果執行個體的輸出緩衝區空間不足,該怎麼辦?
如果 Memorystore for Valkey 執行個體的輸出緩衝區空間不足,請執行下列操作:
- 為
maxmemory參數設定較小的值。 - 使用
allkeys-lrumaxmemory政策。
當執行個體的記憶體已滿,但有新的寫入作業要執行時,Memorystore for Valkey 會根據執行個體的 maxmemory 政策撤銷金鑰,以便釋出空間來執行寫入作業。allkeys-lru 政策會從整個鍵集逐出最近最少使用的 (LRU) 金鑰。
建議您監控執行個體的 maxmemory 和已用記憶體。這有助於瞭解執行個體是否達到佈建的執行個體容量。此外,減少 maxmemory 參數的值,可為額外負荷爭取更多空間。
為什麼執行個體可能缺少外部指標?
如果執行個體的 CPU 使用率偏高,或資源耗盡 (例如連線數過多),執行個體可能會發生異常行為,且外部指標可能會遺失。
如何找出執行個體延遲的來源?
如要判斷您遇到的延遲問題是源自於執行個體、用戶端應用程式還是網路環境,請使用 valkey-cli 工具執行持續延遲測試。
如要找出執行個體延遲的來源,請按照下列步驟操作:
連線至與執行個體位於相同區域和虛擬私有雲網路的 Compute Engine VM。
如果尚未安裝,請在 VM 上安裝
valkey-cli工具。如為 Debian 或 Ubuntu 型 VM,請執行下列指令:
sudo apt-get install valkey-tools如為以 RHEL 或 CentOS 為基礎的 VM,請執行下列指令:
sudo yum install valkey-tools
如要以毫秒為單位測量執行個體的延遲時間,請執行下列指令:
redis-cli --latency -h ENDPOINT_ADDRESS -p PORT
如果執行個體使用傳輸中資料加密,請附加
--tls旗標,並指定憑證授權單位 (CA) 以進行連線。請將下列項目改為對應的值:
- ENDPOINT_ADDRESS:執行個體端點的 IP 位址。
- PORT:為執行個體端點保留的通訊埠號碼。這個通訊埠號碼通常為 6379。
讓指令執行幾分鐘。這項工具會持續對伺服器執行 Ping,並計算延遲時間的最小值、最大值和平均值。
如要停止指令並查看結果,請按
Ctrl+C。
如果指令輸出結果的平均延遲時間持續偏低 (通常為 1 毫秒以下),表示執行個體運作正常,且回應速度很快。
如果指令顯示的延遲時間一向很短,但用戶端應用程式仍會延遲,則可能是下列問題導致延遲:
- 網路:在用戶端和執行個體之間,流量可能會在不同區域或可用區之間傳輸,導致網路延遲時間大幅增加。
- 用戶端:用戶端 CPU 或記憶體使用率偏高、連線集區耗盡,或是應用程式邏輯出現瓶頸,都可能導致用戶端體驗到的總封包往返時間增加。
記憶體管理情境
本節說明執行個體可能遇到的記憶體管理問題。
您可以使用哪項指標,判斷執行個體是否處於記憶體壓力狀態?
如要監控 Memorystore for Valkey 執行個體的記憶體用量,建議您查看 /instance/memory/maximum_utilization 指標。如果執行個體的記憶體用量接近 80%,且您預期數據用量會增加,請擴充執行個體的大小,以提升效能並為新資料騰出空間。
監控情境
本節說明執行個體可能遇到的監控問題。
如何為 Memorystore for Valkey 設定快訊?
您可以透過 Cloud Monitoring 設定快訊,在任何指標超過您為執行個體設定的門檻時收到通知。如要進一步瞭解如何在 Cloud Monitoring 中設定快訊,請參閱「設定記憶體用量的 Monitoring 快訊」。
連線管理情境
本節說明執行個體可能遇到的連線管理問題。
如果達到連線上限或連線逾時,該怎麼辦?
達到連線上限時,用戶端就無法連線至伺服器。這就是所謂的「連線遭拒」。
如果發生這種情況,請按照下列步驟操作:
- 使用
/instance/node/stats/rejected_connections_count指標,判斷 Memorystore for Valkey 拒絕的連線數量,因為執行個體節點已達用戶端上限。 - 使用
/instance/node/clients/connected_clients指標判斷連線至執行個體節點的用戶端數量。這樣一來,您就能確認執行個體中的所有節點是否都未超出限制。 - 使用
client kill指令停止任何洩漏或不必要的連線。 - 在用戶端應用程式中減少連線數量或集區大小。詳情請參閱用戶端應用程式相關說明文件。
- 調整用戶端數量上限。詳情請參閱「設定執行個體」。
- 將執行個體擴展至較大的節點類型,這樣執行個體就能有較高的連線限制。
逾時情境
本節說明執行個體可能遇到的逾時問題。
如果收到 I/O 逾時訊息,該怎麼辦?
如果 Memorystore for Valkey 的讀取或寫入作業未在指定時間內完成,就會發生 I/O 逾時。逾時的原因有很多,舉例來說,執行個體的一或多個節點可能過載。
如果收到 I/O 超時訊息,請按照下列步驟操作:
- 使用
instance/cpu/maximum_utilization指標判斷執行個體中節點的 CPU 使用率,範圍從 0.0 (0%) 到 1.0 (100%)。建議所有節點的 CPU 使用率百分比都低於 80%。詳情請參閱「CPU 使用率最佳做法」。 - 如果伺服器逾時導致用戶端與伺服器中斷連線,請使用指數輪詢和 Jitter 重試。以免多個用戶端同時對伺服器造成負擔。
連線錯誤情境
本節說明執行個體可能遇到的連線問題。
防火牆規則導致連線錯誤
防火牆規則可能會封鎖 Memorystore for Valkey 使用的通訊埠,導致連線錯誤。您必須將執行個體 Private Service Connect 端點的所有通訊埠加入允許清單。如要進一步瞭解端點,請參閱「保留的網路位址」。
機構政策導致連線錯誤
您可能設有機構政策,禁止 Private Service Connect 連線至 Memorystore for Valkey 執行個體。
如果貴機構政策使用 .restrictPrivateServiceConnectProducer
policy,請將 672235397475 資料夾編號加入允許清單,這個資料夾專門用於 Memorystore for Valkey。例如:
name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
rules:
- values:
allowedValues:
- under:folders/672235397475
如果貴機構政策使用 .disablePrivateServiceConnectCreationForConsumers 政策,請將 allowlist SERVICE_PRODUCERS。例如:
name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
rules:
- values:
allowedValues:
- SERVICE_PRODUCERS
連線無回應導致連線錯誤
我們強烈建議您設定用戶端應用程式,偵測與 Memorystore for Valkey 的連線是否沒有回應。系統偵測到連線沒有回應時,用戶端必須重設連線。如要建構彈性應用程式,建議採用下列用戶端設定:
- 設定 TCP keep-alive 參數:設定
TCP keepalive time、TCP keepalive interval和TCP keepalive probes參數,讓用戶端主動偵測並捨棄沒有回應的連線,即使連線處於閒置狀態也一樣。舉例來說,如果將TCP keepalive time參數設為 30 秒、TCP keepalive interval設為 10 秒,且TCP keepalive probes設為 3,則用戶端會在 1 分鐘內重設無回應的閒置連線。 - 設定 TCP 使用者逾時:在用戶端中設定這個逾時時間,即可重設有待處理要求且停止回應的連線。舉例來說,如果將逾時時間設為 15 秒,用戶端就會在 15 秒後重設有待處理要求但沒有回應的連線。
處理已停用叢集模式執行個體的錯誤
如果應用程式連線至沒有讀取副本的執行個體讀取端點,連線就會關閉,並顯示
ERR no replicas found錯誤訊息。在這種情況下,請嘗試將應用程式連線至主要端點,或在執行個體中新增讀取副本。發生容錯移轉時,應用程式的現有連線會關閉,並顯示
ERR role change occurred錯誤訊息。如果應用程式連線至執行個體的讀取端點,且執行個體的所有讀取副本都失敗,您也會看到這則錯誤訊息。在這種情況下,應用程式必須以指數輪詢方式重試連線。
保留情境
本節說明執行個體可能發生的持續性問題。
您的寫入流量超過 Memorystore for Valkey 的能力,無法透過 AOF 重寫壓縮及回收空間
如果發生這種情況,則唯讀附加檔案 (AOF) 的成長速度會比重寫程序可管理的快。這會導致磁碟空間不足、寫入失敗,並封鎖需要建立副本和完整同步處理的作業。
Memorystore for Valkey 實作了防護措施,可調控寫入輸送量。 確保 AOF 重寫作業能跟上持續的高寫入工作負載。