本頁面說明各種錯誤情況,並提供解決錯誤的指引。
複製情境
本節說明叢集可能發生的複製問題。
如何監控複製延遲?
Memorystore for Redis Cluster 具有 /cluster/replication/maximum_offset_diff 指標。這項指標會監控主要叢集中節點的最大複製偏移差異 (以位元組為單位)。
只要將複寫偏移差異維持在較低的水準,副本就能以較低的成本,更頻繁地執行增量同步作業,而非完整同步作業。
建議您為 maximum_offset_diff 指標設定門檻。如果超過門檻,Memorystore for Redis Cluster 可以透過快訊通知您。
根據叢集的節點類型,建議您設定的門檻如下:
如果節點類型為
redis-shared-core-nano、redis-standard-small、redis-highmem-medium、redis-highcpu-medium或redis-standard-large,請將閾值設為小於 64 MB。如果節點類型為
redis-highmem-xlarge或redis-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 time、TCP keepalive interval和TCP keepalive probes參數,讓用戶端主動偵測並捨棄沒有回應的連線,即使連線處於閒置狀態也一樣。舉例來說,如果將TCP keepalive time參數設為 30 秒、TCP keepalive interval設為 10 秒,且TCP keepalive probes設為 3,則用戶端會在 1 分鐘內重設無回應的閒置連線。 - 設定 TCP 使用者逾時:在用戶端中設定這個逾時時間,即可重設有待處理要求且停止回應的連線。舉例來說,如果將逾時時間設為 15 秒,用戶端就會在 15 秒後重設有待處理要求但沒有回應的連線。
CPU 使用率情境
本節說明叢集可能遇到的 CPU 使用率問題。
叢集的輸出緩衝區空間不足
如果叢集的輸出緩衝區空間不足,請採取下列做法:
- 為
maxmemory參數設定較小的值。 - 使用
allkeys-lrumaxmemory政策。
當叢集的記憶體已滿,但有新的寫入作業要執行時,Memorystore for Redis Cluster 會根據叢集的 maxmemory 政策撤銷金鑰,以便釋出空間來執行寫入作業。allkeys-lru 政策會從整個鍵集逐出最近最少使用的 (LRU) 金鑰。
建議您監控叢集的 maxmemory 和已用記憶體。這有助於瞭解叢集是否達到佈建的叢集容量。此外,減少 maxmemory 參數的值,可為額外負荷爭取更多空間。
為什麼叢集可能缺少外部指標?
如果叢集的 CPU 使用率偏高,或是叢集資源耗盡 (例如連線過多),叢集可能會發生異常行為,且外部指標可能會遺失。
找出叢集延遲的來源
如要判斷您遇到的延遲時間是源自叢集,還是用戶端應用程式和網路環境,可以使用 redis-cli 工具執行持續延遲測試。
如要找出叢集延遲的來源,請執行下列操作:
連線至與叢集位於相同區域和虛擬私有雲網路的 Compute Engine VM。
選用:在 VM 上執行下列指令,安裝
redis-cli工具:sudo apt-get install redis-tools如要以毫秒為單位測量叢集的延遲時間,請執行下列指令:
redis-cli --latency -h DISCOVERY_ENDPOINT_ADDRESS -p PORT
如果叢集使用傳輸中加密,則必須附加
--tls旗標,並指定憑證授權單位 (CA) 才能連線。請將下列項目改為對應的值:
- DISCOVERY_ENDPOINT_ADDRESS:叢集探索端點的 IP 位址。
- PORT:為叢集探索端點保留的通訊埠號碼。這個通訊埠號碼通常為 6379。
讓指令執行幾分鐘。這項工具會持續對伺服器執行 Ping,並計算延遲時間的最小值、最大值和平均值。
選用:如要停止執行指令,請按
Ctrl+C。
如果指令輸出的是持續偏低的平均延遲時間 (通常為 1 毫秒以下),表示叢集運作正常,且回應速度很快。
如果指令顯示伺服器效能正常,但用戶端應用程式仍發生延遲問題,則可能是下列問題導致延遲:
- 網路:如果用戶端與叢集之間的流量在不同區域或可用區之間傳輸,可能會造成明顯的網路延遲。
- 用戶端:用戶端 CPU 或記憶體使用率偏高、連線集區耗盡,或是應用程式邏輯出現瓶頸,都可能導致用戶端體驗到的總封包往返時間增加。
保留情境
本節說明叢集可能發生的持續性問題。
您的寫入流量超過 Memorystore for Redis Cluster 的能力,無法透過 AOF 重寫來壓縮及回收空間
如果發生這種情況,則唯讀附加檔案 (AOF) 的成長速度會比重寫程序可管理的快。這會導致磁碟空間不足、寫入失敗,並封鎖需要建立副本和完整同步處理的作業。
Memorystore for Redis Cluster 實作了安全措施,可調控寫入處理量。確保 AOF 重寫作業能跟上持續的高寫入工作負載。