最佳實務:線上叢集大小調整 - Amazon MemoryDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳實務:線上叢集大小調整

「重新碎片」涉及將碎片或節點新增到您的叢集或從叢集移除碎片或節點,並重新分配鍵的空間。多項事物會對重新碎片操作造成影響,例如叢集上的負載、記憶體使用率,以及整體資料大小。為了取得最佳體驗,我們建議您遵循統一工作負載模式分佈的整體叢集最佳實務。此外,我們建議您採取以下步驟。

在初始化重新碎片前,我們建議以下內容:

  • 測試您的應用程式 - 在預備環境中測試應用程式於重新分片期間的行為 (若可能的話)。

  • 提早取得擴展問題的通知 - 重新分片是一項需要大量運算的操作。因此,我們建議在重新分片期間,將多核心執行個體的 CPU 使用率保持在 80% 以下,在單核心執行個體上保持低於 50%。在應用程式開始觀察擴展問題之前,監視 MemoryDB 指標並啟動重新分片。可進行追蹤的有用指標包括 CPUUtilizationNetworkBytesInNetworkBytesOutCurrConnectionsNewConnectionsFreeableMemorySwapUsageBytesUsedForMemoryDB

  • 在向內擴展前確保有足夠的可用記憶體 - 若您要向內擴展,請確保碎片上保留的可用記憶體至少是待移除碎片所使用記憶體的 1.5 倍。

  • 在離峰時段期間起始重新分片程序 - 此做法有助於減少重新分片作業期間的延遲,以及對用戶端造成的輸送量影響。它也有助於更快完成重新碎片,因為有更多的資源可用於重新分配位置。

  • 檢閱用戶端逾時行為 - 有些用戶端可能會在線上叢集調整大小期間產生較高的延遲。使用較高的逾時設定您的用戶端程式庫,有助於解決該情況,即使伺服器上負載較高,系統仍有時間連線。在某些情況下,您可能想要對伺服器開啟大量連線。在這些情況下,請考慮將指數退避新增到重新連線邏輯。這麼做可幫助防止爆量的新連線同時衝擊伺服器。

在重新碎片期間,我們建議以下內容:

  • 避免費時命令 -避免執行任何需要大量運算或輸入/輸出的操作,例如 KEYSSMEMBERS 命令。我們建議此方法,因為這些操作會增加叢集上的負載,並會影響叢集的效能。請改為使用 SCANSSCAN 命令。

  • 遵循 Lua 最佳實務 - 避免長時間執行的 Lua 指令碼,並且一律預先宣告用於 Lua 指令碼的索引鍵。我們建議此方法來判斷 Lua 指令碼並未使用跨位置命令。確認用於 Lua 指令碼中的鍵屬於相同位置。

在重新碎片之後,請注意以下內容:

  • 若目標碎片上的可用記憶體不足,向內擴展可能會僅部分成功。若發生這種結果,請檢閱可用記憶體,並視需要重試操作。

  • 擁有大量項目的位置不會進行遷移。特別是擁有大於 256 MB 項目位置的後序列化不會進行遷移。

  • 在重新分片操作期間,Lua 指令碼內不支援 FLUSHALLFLUSHDB 命令。