如何避免常見的 Databases for Redis 錯誤?
Databases for Redis 是記憶體內資料庫。 它在接受、處理及儲存資料的方式與傳統持續性資料庫不同。 下列資訊強調顯示您可能遇到的一般錯誤、那些錯誤的部分原因,以及您可以套用以修正那些錯誤的解決方案。
錯誤: Connection to master lost message
Databases for Redis 使用兩個成員 (主要及抄本) 及三個 sentinel。 下列原因可能是 connection to master lost 訊息的原因:
a. 由於每秒輸入/輸出作業數 (IOPS) 較低,主要伺服器忙碌且未回應 sentinels,這會在 LogDNA中傳回此錯誤訊息。
b. 由於網路延遲,sentinels 無法與主要伺服器通訊。
c. 排程維護活動。
d. 次要版本升級。
解決方案
請嘗試下列解決方案來修正錯誤:
a. 增加磁碟大小。1 GB 等於 10 IOPS。
b. 移至隔離運算,以進行專用資源配置。
c. 增加 RAM 大小。
d. 需要 RETRY 邏輯,因此請確定已實作此邏輯。
e. 在幾秒鐘之後,抄本會自動升級至主要伺服器。
f. 在 Redis 實例中實作 memory eviction 或 TTL 原則。
IBM® Cloud Databases 不會在主要節點上執行任何活動。 必要的話,會在抄本節點上完成所有活動,然後將其升級至主要節點。 在進行抄本升級之前,資料庫會設為等待 30 秒,以尋找主要節點。
錯誤: 非同步 AOF fsync 花費太長時間 (磁碟忙碌?)
AOF 是「僅附加檔案」。 這是在開啟持續性設定時寫入 Redis 持續性磁碟的日誌。
Redis 使用 AOF 及 RDB 檔案來寫入其日誌及 RDB 以進行 Snapshot。
您可能會看到此錯誤的部分原因如下:
a. 由於 IOPS 不足,Redis 無法寫入磁碟。
b. 可能有 Databases for Redis 備份在批次執行的同時執行。
c. 您的應用程式可能將不明 API 呼叫放置到 Redis 實例。
除了用於度量值的 PSYNC 之外,我們不要求您實例中的任何其他 API。
解決方案:
請嘗試下列解決方案來修正錯誤:
a. 增加磁碟大小。 Ballpark 推薦比預期的數量高出 30%。
b. 如果 Redis 達到容量上限,請將單一 Redis 實例分割成多個實例,並調整應用程式架構。
c. 如果不需要持續性,請關閉持續性。 改為變更為快取模式。
磁碟大小無法縮減,但記憶體可以縮減。 因為 Redis 是記憶體內資料儲存庫,所以建議您先評估進行中的資料大小,然後再縮減實例的記憶體,因為大幅縮減可能會導致錯誤。
錯誤: 調整實例的大小停留或花費的時間超過預期
使用 IBM Cloud,您可以隨著資料需求成長來調整實例的大小。 我們從使用者介面、CLI 和 API 提供自動調整和手動調整。 不過,在調整實例大小時請小心。 如果調整大小所花費的時間超過預期,則可能是下列其中一個原因:
a. 您的實例已在最大實例 (cores*rams) 中,且沒有更大的叢集可用來將工作量移至。 在此情況下,會形成新的叢集並移動您的實例,這可能需要幾分鐘時間。
b. 您已大幅減少其記憶體 (例如,從 16 GB RAM 到 10 GB RAM)。 不過,您的資料儲存庫大小 (磁碟) 較高,例如 11 GB。 在這些情況下,RAM 中沒有足夠空間來從磁碟讀取資料,形成可能停滯。
解決方案:
請嘗試下列解決方案來修正錯誤:
a. Redis 為其主要作業的單一執行緒。 您預期會使用較少核心及更多記憶體。 這會增加叢集可用性的可能性。
b. 根據您的 I/O 需求來增加您的 RAM 和磁碟。
c. 請勿大幅減少您的 RAM。 建議您逐步減少。
請確保留有浮水印記憶體,供 Redis 執行其固有程序。
錯誤 :READONLY 您無法針對唯讀從屬節點進行寫入
Databases for Redis 有兩個節點: 主要節點和抄本節點。 使用者只能連接至主要節點,且抄本節點用於確保高可用性,使用者通常無法存取高可用性。 不過,如同任何遠端連線,在將抄本升級至主要伺服器的情況下,可能會發生切換。 您可以在服務中遇到瞬間的脣緣,如果正確配置節點,則預期不會有其他影響。
a. 由於 IOPS 較低,主要伺服器忙碌且未回應 sentinels,這會在 LogDNA中傳回此錯誤訊息。
b. 由於網路延遲,sentinels 無法與主要伺服器通訊。
c. 排程維護。
d. 次要版本升級。
解決方案:
請嘗試下列解決方案來修正錯誤:
a. 在應用程式設計中包括重試及重新連接邏輯。 您可以使用 ioredis 和 noderedis 之類的程式庫。 如需詳細資料,請參閱 Redis 部落格文章的錯誤偵測及處理。
b. 某些用戶端具有內建的重試及重新連接邏輯。 您也可以使用這些用戶端。
c. 強烈建議對任何雲端服務進行重試及重新連接邏輯。