Come posso ridurre al minimo i tempi di inattività durante il dimensionamento di ElastiCache?

Ultimo aggiornamento: 19/07/2022

Desidero ridurre al minimo i tempi di inattività mentre Amazon ElastiCache per Redis sta eseguendo il dimensionamento. Come posso farlo?

Risoluzione

Ecco alcuni accorgimenti per minimizzare i tempi di inattività:

  • Per ridurre al minimo l'impatto della sincronizzazione, evita di eseguire il dimensionamento in caso di un elevato carico di lavoro. Se il cluster è sottoposto a un carico di lavoro elevato e la procedura di dimensionamento sta impiegando molto tempo, riduci le richieste in entrata per Redis in modo da evitare errori di sincronizzazione. Durante il processo di dimensionamento, potrebbe attivarsi la sincronizzazione (salvataggio in background, con o senza fork). La sincronizzazione è un'operazione che richiede elevati volumi di calcolo e consuma maggiore memoria. Verifica il parametro SaveInProgress su Amazon CloudWatch per verificare quando è stata effettuata la sincronizzazione. È importante ricordare che questo parametro di misurazione raccoglie dati ogni minuto. Per questo motivo, può non acquisire la sincronizzazione che è stata effettuata in un arco temporale inferiore al minuto. Per ulteriori informazioni sul monitoraggio del carico di lavoro, consulta Monitoring best practice with Amazon ElastiCache for Redis using Amazon CloudWatch (Monitorare le migliori pratiche con Amazon ElastiCache per Redis utilizzando Amazon CloudWatch).
  • A seconda del tipo di operazione di dimensionamento, potrebbe aggiungersi un nuovo nodo oppure essere eliminato da un cluster, oppure l’IP del nodo può cambiare durante il processo. Amazon ElastiCache per Redis fornisce diversi tipi di endpoint di connessione per il collegamento con il cluster. La scelta del tipo di endpoint di connessione dipende dai requisiti dell'applicazione. Si consiglia di testare il dimensionamento in un ambiente di non produzione, così da poter identificare problemi inattesi causati da errori di configurazione dal lato client durante la connessione al cluster Redis.
  • Se il client si connette a una nuova replica in corso di sincronizzazione, compare il messaggio di errore LOADING: Redis is loading the dataset in memory (CARICAMENTO IN CORSO: Redis sta caricando il set di dati in memoria). Configura il client Redis o il codice di applicazione per ritentare la query su un’altra replica, oppure invia una query al nodo primario. Il tempo richiesto per caricare il set di dati dipende dalla dimensione dei dati stessi e dalle prestazioni del nodo. Effettua un test nel tuo ambiente di prova per stabilire se potrebbe rappresentare un problema.
  • È possibile configurare il cluster per effettuare il dimensionamento automaticamente, invece che manualmente. Il dimensionamento automatico previene problemi di prestazione causati da aumenti improvvisi del carico di lavoro in entrata. Per ulteriori informazioni, consulta Auto Scaling ElastiCache for Redis clusters (Dimensionamento automatico ElastiCache per cluster Redis).

Panoramica del tempo di inattività del processo di dimensionamento

Esistono quattro procedure di dimensionamento:

  • Dimensionamento verticale.
  • Dimensionamento orizzontalmente.
  • Modifica dei tipi di nodi.
  • Modifica del numero di gruppi di nodi. Questa caratteristica è supportata solo per i cluster Redis (modalità cluster disabilitata).

Per ulteriori informazioni, consulta Scaling ElastiCache for Redis clusters (Dimensionamento di cluster ElastiCache per Redis).

Solitamente il tempo di inattività non supera qualche secondo, in base alla procedura di dimensionamento e della configurazione del cluster. Di seguito sono indicate le spiegazioni dei tempi di inattività per ogni tipo di cluster e azione di dimensionamento:

Cluster Redis (modalità cluster disabilitata)

Dimensionamento verticale: rimuove un nodo replicato dai cluster. Si può attuare per ridurre i costi. Ricordiamo che la riduzione orizzontale riduce anche la durabilità dei dati. Se le applicazioni utilizzano solo un endpoint primario per connettersi al cluster, la rimozione dei nodi di replica non causa tempo di inattività. Questo perché l'endpoint primario punta al nodo primario.

Tuttavia, se per connettersi a quel nodo di replica le applicazioni utilizzano endpoint di lettura o singoli endpoint, la connessione originale al nodo di replica rimosso si interrompe, e l'applicazione deve stabilire una nuova connessione TCP ad altri nodi di replica. L’applicazione deve anche effettuare una nuova ricerca DNS per evitare di connettersi con il nodo di replica rimosso. La propagazione DNS degli endpoint di lettura potrebbe causare alcuni secondi di tempo di inattività se il client li sta utilizzando.

Dimensionamento orizzontale: aggiunge un nodo di replica a un cluster esistente. Il nodo primario si sincronizza con i nuovi nodi. Per evitare tempi di inattività durante la sincronizzazione, consigliamo di procedere con il dimensionamento orizzontale negli orari in cui il carico di lavoro è al minimo.

Modifica dei tipi di nodi: si creano nuovi nodi del tipo specificato. Il vecchio nodo primario si sincronizza con il nuovo nodo primario, e il nuovo nodo primario con i nuovi nodi di replica. Durante questo processo di dimensionamento, presta attenzione ai seguenti elementi:

  • Verifica che la sincronizzazione non fallisca a causa di un carico di lavoro troppo elevato.
  • L'IP dei nuovi nodi potrebbe non essere lo stesso dei vecchi nodi. L'applicazione potrebbe dover eseguire nuovamente la ricerca DNS sull'endpoint primario o sull'endpoint di lettura e stabilire nuove connessioni al nuovo nodo. La propagazione DNS impiega qualche secondo: potrebbe verificarsi un interruzione al servizio mentre il client raggiunge il nuovo nodo.
    Nelle versioni di Redis 5.0.5 o successive, l'interruzione è ridotta al minimo. Il client Redis effettua nuovamente la richiesta a un nuovo nodo nel caso in cui la precedente non sia andata a buon fine a causa dell'eliminazione del vecchio nodo. Raccomandiamo come best practice di eseguire l'aggiornamento alla nuova versione di Redis per sfruttare le ottimizzazioni sul servizio ElastiCache.

Cluster Redis (modalità cluster abilitata)

Dimensionamento verticale: rimuove una partizione da un cluster. Prima che la partizione sia rimossa, i dati presenti nella partizione sono migrati ad altri nodi. La procedura è chiamata "resharding". Il resharding comporta un carico di lavoro più pesante sul cluster, e il client deve supportare il cluster Redis. Per informazioni su come ridurre al minimo i tempi di inattività durante il dimensionamento verticale, consulta Best practice: Online cluster resizing (Best practice: ridimensionamento dei cluster online).

Consigliamo una procedura graduale per ridurre al minimo i problemi di performance dovuti alla procedura di dimensionamento verticale. Ad esempio, se l'obiettivo è ridurre orizzontalmente da 12 a 6 partizioni, è opportuno scalare prima da 12 a 9 partizioni. Dopo avere ridotto orizzontalmente per prima volta, controllare le prestazioni del cluster durante i periodi di punta prima di effettuare una nuova procedura.

Dimensionamento orizzontale: aggiunge una partizione a un cluster. I dati in altre partizioni vengono migrate nella nuova partizione. La procedura è chiamata "resharding". Il resharding causa un carico di lavoro aggiuntivo sul cluster, e il client deve supportare il cluster Redis. Per informazioni su come ridurre al minimo i tempi di inattività durante la procedura di dimensionamento orizzontale, consulta Best practice: online cluster resizing (Best practice: ridimensionamento dei cluster online).

Modifica dei tipi di nodo: durante questa procedura, per ogni partizione, il vecchio nodo primario si sincronizza con il nuovo nodo primario. Successivamente, i nuovi nodi primari si sincronizzano con i nuovi nodi di replica. Durante questo processo di dimensionamento, presta attenzione ai seguenti elementi:

  • Verifica che la sincronizzazione non fallisca a causa di un carico di lavoro troppo elevato.
  • L'IP dei nuovi nodi potrebbe non essere lo stesso dei vecchi nodi. Per stabilire l'indirizzo IP, l'applicazione potrebbe utilizzare il comando nodi del clustero slot del cluster per ottenere informazioni aggiornate sulla topologia dal cluster. La maggior parte dei client Redis che supportano i cluster Redis possono aggiornare la topologia del cluster. Tuttavia, per farlo potrebbe essere necessario configurare il client Redis. Per informazioni su come configurare il client Redis, consulta la documentazione specifica per il tipo di client utilizzato.

Modifica del numero di gruppi di nodi: modifica il numero di nodi di replica in ogni partizione. Quando il numero di nodi di replica aumenta, i nuovi nodi di replica entrano nel cluster e il nodo primario si sincronizza con il nuovo nodo. Verifica quindi le prestazioni dei nodi primari prima di aggiungere altri nodi di replica. Quando il numero di nodi di replica diminuisce, e se il client deve leggere da un nodo di replica rimosso, deve inviare la richiesta a uno dei nuovi nodi di replica. Il client deve inoltre aggiornare la topologia del cluster per impedire che vengano inviate altre richieste al nodo rimosso.