

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

# 線上叢集大小調整
<a name="best-practices-online-resharding"></a>

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

在初始化重新碎片前，我們建議以下內容：
+ **測試您的應用程式** - 在預備環境中測試應用程式於重新分片期間的行為 (若可能的話)。
+ **提早取得擴展問題的通知** - 重新分片是一項需要大量運算的操作。因此，我們建議在重新分片期間將多核心執行個體的 CPU 使用率保持在 80% 以下，並將單一核心執行個體的 CPU 使用率保持在 50% 以下。在應用程式開始觀察擴展問題之前，監控 ElastiCache for Redis OSS 指標並啟動重新分片。可進行追蹤的有用指標包括 `CPUUtilization`、`NetworkBytesIn`、`NetworkBytesOut`、`CurrConnections`、`NewConnections`、`FreeableMemory`、`SwapUsage` 及 `BytesUsedForCacheItems`。
+ **在向內擴展前確保有足夠的可用記憶體** - 若您要向內擴展，請確保碎片上保留的可用記憶體至少是待移除碎片所使用記憶體的 1.5 倍。
+ **在離峰時段期間起始重新分片程序** - 此做法有助於減少重新分片作業期間的延遲，以及對用戶端造成的輸送量影響。它也有助於更快完成重新碎片，因為有更多的資源可用於重新分配位置。
+ **檢閱用戶端逾時行為** - 有些用戶端可能會在線上叢集調整大小期間產生較高的延遲。使用較高的逾時設定您的用戶端程式庫，有助於解決該情況，即使伺服器上負載較高，系統仍有時間連線。在某些情況下，您可能想要對伺服器開啟大量連線。在這些情況下，請考慮將指數退避新增到重新連線邏輯。這麼做可幫助防止爆量的新連線同時衝擊伺服器。
+ **在每個碎片上載入函數** - 橫向擴展叢集時，ElastiCache 會自動將載入其中一個現有節點 (隨機選擇) 的函數複製到新節點。如果您的叢集具有 Valkey 7.2 及更高版本，或 Redis OSS 7.0 或更高版本，且您的應用程式使用 [函數](https://valkey.io/topics/functions-intro/)，建議您將所有函數載入所有碎片，然後再向外擴展，讓您的叢集不會在不同的碎片上最終產生不同的函數。

在重新碎片之後，請注意以下內容：
+ 若目標碎片上的可用記憶體不足，向內擴展可能會僅部分成功。若發生這種結果，請檢閱可用記憶體，並視需要重試操作。目標碎片上的資料不會遭刪除。
+ 在重新分片操作期間，Lua 指令碼內不支援 `FLUSHALL` 和 `FLUSHDB` 命令。在 Redis OSS 6 之前，如果命令在要遷移的插槽上操作，則不支援該`BRPOPLPUSH`命令。