Salta al contenuto

Perché c'è uno squilibrio di memoria tra gli shard nel mio cluster autogestito ElastiCache per Valkey o ElastiCache per Redis OSS?

6 minuti di lettura
0

Il mio cluster autogestito Amazon ElastiCache per Valkey o Amazon ElastiCache per Redis con modalità cluster abilitata ha un utilizzo non uniforme della memoria tra gli shard.

Breve descrizione

Per impostazione predefinita, i cluster OSS Valkey e Redis con modalità cluster abilitata cercano di distribuire uniformemente lo spazio delle chiavi della cache tra gli shard di un cluster. Per ulteriori informazioni, consulta How to work with Cluster Mode on Amazon ElastiCache for Redis (Utilizzo della modalità cluster in Amazon ElastiCache per Redis).

I seguenti motivi possono causare un utilizzo non equilibrato della memoria per cui alcuni shard memorizzano più dati di altri:

  • Distribuzione irregolare delle chiavi
  • Chiavi di dimensioni troppo grandi
  • Chiavi o shard "caldi"
  • Utilizzo irregolare degli hash tag
  • Buffer di output del client aumentati

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Distribuzione irregolare delle chiavi

Se non distribuisci uniformemente gli hash slot tra gli shard, alcuni shard potrebbero gestire più chiavi di altri. Per risolvere il problema, riequilibra gli slot nel cluster.

Nota: l'opzione Slot rebalance (Riequilibrio slot) cerca di distribuire uniformemente i 16.384 hash slot tra gli shard disponibili. L'opzione non riequilibra in base all'utilizzo della memoria o al volume di dati in ogni shard.

Chiavi di dimensioni troppo grandi

Se alcune chiavi hanno dimensioni molto più grandi di altre, gli shard che le ospitano potrebbero richiedere un maggiore utilizzo della memoria. Per risolvere il problema, puoi suddividere le chiavi di grandi dimensioni in coppie chiave-valore più piccole. Oppure rimuovi le chiavi di grandi dimensioni che non sono necessarie per liberare spazio.

Per scansionare il set di dati in modo da individuare le chiavi di grandi dimensioni, utilizza il comando valkey-cli --bigkeys o valkey-cli --memkeys. Per ulteriori informazioni, consulta Scanning for big keys (Scansione di chiavi di grandi dimensioni) sul sito web di Valkey.

È consigliabile utilizzare strategie di denominazione delle chiavi, strutture di dati e tecniche di compressione efficienti per ottimizzare l'utilizzo della memoria delle chiavi.

Chiavi o shard "caldi"

Quando accedi frequentemente ad alcune chiavi più di altre, il carico si distribuisce in modo non uniforme e limita l'utilizzo della memoria dell'host di servizio. Le chiavi a cui accedi di frequente sono chiamate chiavi o shard "caldi".

Per individuare le chiavi "calde", esamina i modelli di accesso alle chiavi eseguendo il comando valkey-cli --hotkeys. In alcuni casi, anche una sola chiave di cache "calda" può creare un punto caldo che sovraccarica il nodo di cache. Il punto caldo può influire sulla CPU, sulla memoria e sulle risorse di rete del nodo.

Nota: il comando hotkeys funziona solo quando l'impostazione di maxmemory-policy è *lfu.

Per risolvere l’errore, intraprendi le seguenti azioni:

  • Aumenta verticalmente il cluster e fornisci più risorse.
  • Distribuisci il traffico di lettura alle repliche in lettura. Per ulteriori informazioni, consulta READONLY sul sito web di Valkey.
  • Modifica l'applicazione client per ridurre il volume delle scritture sulle chiavi.

Utilizzo irregolare degli hash tag

In un ambiente con modalità cluster abilitata, devi utilizzare hash tag per implementare operazioni multi-chiave in un cluster Valkey. Quando aumenti l'uso degli hash tag, alcuni hash slot memorizzano più chiavi di altri e si verifica uno squilibrio di memoria tra gli shard.

Per risolvere il problema, controlla l'utilizzo dello spazio delle chiavi e degli hash tag e distribuisci i dati su più hash slot. Per ulteriori informazioni, consulta la sezione Hash tags (Hash tag) in Cluster specification (Specifica del cluster) sul sito web di Valkey.

Buffer di output del client aumentati

Quando i comandi di un client producono un output più velocemente di quello che Valkey può inviare al client, il buffer di output del client aumenta e utilizza più memoria. Per ulteriori informazioni, consulta Output Buffer Limits (Limiti del buffer di output) sul sito web di Valkey.

Per identificare la causa dei problemi relativi al buffer, connettiti al nodo interessato e identifica i client che utilizzano lo spazio nel buffer eseguendo il comando CLIENT LIST. Per ulteriori informazioni, consulta CLIENT LIST sul sito web di Redis.

Per determinare la causa di un buffer di output del client elevato, rivedi i seguenti parametri chiave nell'output:

  • obl: lunghezza del buffer di output
  • omem: utilizzo della memoria del buffer di output
  • tot-mem: memoria totale utilizzata dal client

Puoi anche esaminare le metriche DatabaseMemoryUsageCountedForEvictPercentage e DatabaseMemoryUsagePercentage in Amazon CloudWatch. Se riscontri una differenza significativa nell'utilizzo della memoria tra le due metriche, la causa dell'utilizzo della memoria sono i buffer di output del client.

Nota: la metrica DatabaseMemoryUsagePercentage include anche il sovraccarico di connessioni e l'utilizzo della memoria del buffer di output del client.

Best practice

Per ridurre i problemi di squilibrio della memoria, utilizza le seguenti best practice.

Configura le impostazioni TTL

Imposta i valori Time to Live (TTL) appropriati per le chiavi. Quando configuri i valori TTL appropriati, il nodo Valkey rimuove automaticamente le chiavi che esauriscono il TTL e ottimizza l'utilizzo della memoria. Per ulteriori informazioni, consulta TTL sul sito web di Redis.

Rivedi le metriche della memoria

È consigliabile rivedere regolarmente le seguenti metriche chiave della memoria negli shard per identificare precocemente gli squilibri e adottare misure proattive:

  • DatabaseMemoryUsagePercentage: monitora l'utilizzo complessivo della memoria sul nodo.
  • DatabaseMemoryUsageCountedForEvictPercentage: consente di rilevare condizioni di sovraccarico e utilizzo elevato del buffer sulla base del confronto con DatabaseMemoryUsagePercentage.
  • BytesUsedForCache: monitora la memoria effettiva utilizzata dai dati nella cache.
  • CurrItems: monitora il numero di oggetti memorizzati in ogni shard.
  • SwapUsage: monitora la quantità di swap utilizzata su un host.
    Nota: è normale che ElastiCache mostri un certo valore per SwapUsage. Un utilizzo nella norma non causa problemi di latenza. Se **SwapUsage ** supera i 300 MB, controlla la pressione della memoria. Per ulteriori informazioni, consulta Qual è la quantità di memoria prenotata necessaria?

Aggiorna i nodi

Per gestire chiavi di grandi dimensioni e accessi frequenti, aumenta verticalmente il cluster ElastiCache per mettere a disposizione ulteriori risorse a livello di CPU e memoria .

Informazioni correlate

Come posso controllare l'utilizzo della memoria nel mio cluster autoprogettato ElastiCache per Redis e implementare le best practice per controllare l'uso elevato della memoria?

Key distribution model (Modello di distribuzione delle chiavi) sul sito web di Valkey

Amazon ElastiCache Update - Online Resizing for Redis Clusters (Aggiornamento Amazon ElastiCache: ridimensionamento online dei cluster Redis)

Come posso risolvere il problema dell'aumento dell'attività di scambio nelle istanze ElastiCache?

AWS UFFICIALEAggiornata 8 mesi fa