排解問題

本頁面說明各種錯誤情況,並提供解決錯誤的指引。

複製情境

本節說明叢集可能發生的複製問題。

如何監控複製延遲?

Memorystore for Redis Cluster 具有 /cluster/replication/maximum_offset_diff 指標。這項指標會監控主要叢集中節點的最大複製偏移差異 (以位元組為單位)。

只要將複寫偏移差異維持在較低的水準,副本就能以較低的成本,更頻繁地執行增量同步作業,而非完整同步作業。

建議您為 maximum_offset_diff 指標設定門檻。如果超過門檻,Memorystore for Redis Cluster 可以透過快訊通知您。

根據叢集的節點類型,建議您設定的門檻如下:

  • 如果節點類型為 redis-shared-core-nanoredis-standard-smallredis-highmem-mediumredis-highcpu-mediumredis-standard-large,請將閾值設為小於 64 MB。

  • 如果節點類型為 redis-highmem-xlargeredis-highmem-2xlarge,請將門檻設為小於 1 GB。

連線錯誤情境

本節說明叢集可能遇到的連線問題。

防火牆規則導致連線錯誤

防火牆規則可能會封鎖 Memorystore for Redis Cluster 使用的通訊埠,導致連線錯誤。針對叢集的兩個 Private Service Connect 端點,允許使用 TCP 通訊埠 11000 至 13047。如要進一步瞭解這些端點,請參閱「保留的網路位址」。

機構政策導致連線錯誤

您可能設有組織政策,禁止 Private Service Connect 連線連往叢集。

如果貴機構政策使用 .restrictPrivateServiceConnectProducer 政策,請允許 961333125034 資料夾,這個資料夾專供 Memorystore for Redis Cluster 使用。例如:

name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
    rules:
      - values:
          allowedValues:
          - under:folders/961333125034

如果機構政策使用 .disablePrivateServiceConnectCreationForConsumers 政策,請允許 SERVICE_PRODUCERS。例如:

name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
    rules:
      - values:
          allowedValues:
          - SERVICE_PRODUCERS

連線無回應導致連線錯誤

強烈建議您設定用戶端應用程式,偵測與 Memorystore for Redis Cluster 的連線是否沒有回應。系統偵測到連線沒有回應時,用戶端必須重設連線。如要建構彈性應用程式,建議採用下列用戶端設定:

  • 設定 TCP keep-alive 參數:設定 TCP keepalive timeTCP keepalive intervalTCP keepalive probes 參數,讓用戶端主動偵測並捨棄沒有回應的連線,即使連線處於閒置狀態也一樣。舉例來說,如果將 TCP keepalive time 參數設為 30 秒、TCP keepalive interval 設為 10 秒,且 TCP keepalive probes 設為 3,則用戶端會在 1 分鐘內重設無回應的閒置連線。
  • 設定 TCP 使用者逾時:在用戶端中設定這個逾時時間,即可重設有待處理要求且停止回應的連線。舉例來說,如果將逾時時間設為 15 秒,用戶端就會在 15 秒後重設有待處理要求但沒有回應的連線。

CPU 使用率情境

本節說明叢集可能遇到的 CPU 使用率問題。

叢集的輸出緩衝區空間不足

如果叢集的輸出緩衝區空間不足,請採取下列做法:

當叢集的記憶體已滿,但有新的寫入作業要執行時,Memorystore for Redis Cluster 會根據叢集的 maxmemory 政策撤銷金鑰,以便釋出空間來執行寫入作業。allkeys-lru 政策會從整個鍵集逐出最近最少使用的 (LRU) 金鑰。

建議您監控叢集的 maxmemory 和已用記憶體。這有助於瞭解叢集是否達到佈建的叢集容量。此外,減少 maxmemory 參數的值,可為額外負荷爭取更多空間。

為什麼叢集可能缺少外部指標?

如果叢集的 CPU 使用率偏高,或是叢集資源耗盡 (例如連線過多),叢集可能會發生異常行為,且外部指標可能會遺失。

找出叢集延遲的來源

如要判斷您遇到的延遲時間是源自叢集,還是用戶端應用程式和網路環境,可以使用 redis-cli 工具執行持續延遲測試。

如要找出叢集延遲的來源,請執行下列操作:

  1. 連線至與叢集位於相同區域和虛擬私有雲網路的 Compute Engine VM。

  2. 選用:在 VM 上執行下列指令,安裝 redis-cli 工具:

    sudo apt-get install redis-tools
    
  3. 如要以毫秒為單位測量叢集的延遲時間,請執行下列指令:

    redis-cli --latency -h DISCOVERY_ENDPOINT_ADDRESS -p PORT
    

    如果叢集使用傳輸中加密,則必須附加 --tls 旗標,並指定憑證授權單位 (CA) 才能連線。

    請將下列項目改為對應的值:

    • DISCOVERY_ENDPOINT_ADDRESS:叢集探索端點的 IP 位址。
    • PORT:為叢集探索端點保留的通訊埠號碼。這個通訊埠號碼通常為 6379。
  4. 讓指令執行幾分鐘。這項工具會持續對伺服器執行 Ping,並計算延遲時間的最小值、最大值和平均值。

  5. 選用:如要停止執行指令,請按 Ctrl+C

如果指令輸出的是持續偏低的平均延遲時間 (通常為 1 毫秒以下),表示叢集運作正常,且回應速度很快。

如果指令顯示伺服器效能正常,但用戶端應用程式仍發生延遲問題,則可能是下列問題導致延遲:

  • 網路:如果用戶端與叢集之間的流量在不同區域或可用區之間傳輸,可能會造成明顯的網路延遲。
  • 用戶端:用戶端 CPU 或記憶體使用率偏高、連線集區耗盡,或是應用程式邏輯出現瓶頸,都可能導致用戶端體驗到的總封包往返時間增加。

保留情境

本節說明叢集可能發生的持續性問題。

您的寫入流量超過 Memorystore for Redis Cluster 的能力,無法透過 AOF 重寫來壓縮及回收空間

如果發生這種情況,則唯讀附加檔案 (AOF) 的成長速度會比重寫程序可管理的快。這會導致磁碟空間不足、寫入失敗,並封鎖需要建立副本和完整同步處理的作業。

Memorystore for Redis Cluster 實作了安全措施,可調控寫入處理量。確保 AOF 重寫作業能跟上持續的高寫入工作負載。