Condivisione della tecnologia

[Installazione di K8s Redis] Installazione di K8s versione standalone di Redis per ottenere prestazioni elevate ed elevata disponibilità

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

introduzione

Questo articolo si baserà sulla creazione di una [pseudo] istanza Redis in modalità autonoma nell'ambiente k8s. Poiché le prestazioni I/O dell'archiviazione condivisa sono relativamente basse, l'archiviazione condivisa viene utilizzata per il backup dei dati e i dati Redis vengono archiviati sotto forma di percorso host. Ciò aiuta a migliorare le prestazioni I/O di Redis. Questo articolo spiegherà come utilizzare due contenitori la forma master-slave di Redis per implementare un Redis autonomo e altamente disponibile.

1. Condizioni e descrizione dell'ambiente:

Versione K8s k8s-1.29.4, l'ambiente è costruito in una sala computer per telecomunicazioni, con un totale di sei nodi Ciascun nodo ha un disco SSD non di sistema montato sul percorso /data/. È presente uno spazio di archiviazione condiviso NAS, che utilizza Alibaba Cloud NAS e utilizza una linea dedicata con una larghezza di banda di linea dedicata di 500 Mb.

2. Descrizione dei requisiti:

  • Crea un'istanza Redis: autonoma o master-slave.
  • Elevata disponibilità: anche se un nodo k8s muore, l'utilizzo non sarà influenzato per molto tempo.
  • Prestazioni elevate: è richiesto un iO elevato. Viene utilizzato lo spazio di archiviazione condiviso o distribuito Ceph e la lettura e la scrittura di iO saranno notevolmente scontate.
  • Sicurezza dei dati: dopo aver effettuato uno switch, i dati devono essere quanto più completi possibile
  • Installazione semplice, facile gestione e manutenzione

3. Principi e istruzioni attuative

1. Configurare Redis in modalità master-slave. La lettura e la scrittura dei dati del Redis master ricade sul disco SSD locale, mentre i dati del Redis slave risiedono nell'archivio NAS condiviso esterno.
2. Quindi creare una configurazione statefulset, posizionare due contenitori, un contenitore come Redis principale, montarlo su hostpath, creare una directory con il nome host e archiviare il file rdb. Un altro contenitore funge da redis slave e il percorso NAS viene montato per creare una directory con il nome host e archiviare il file rdb.
3. Regolare il parametro di persistenza dei dati salvato da redis e regolare il tempo di download dei dati su un parametro più piccolo per garantire che i dati aggiornati vengano archiviati nel file rdb il prima possibile.
4. Ogni volta che il pod viene pianificato o riavviato, copia il file rdb archiviato in nas nel percorso host e avvia redis.

Nota: questa operazione viene eseguita per consentire al redis master di ottenere un'elaborazione ad alte prestazioni dei dati aziendali e il redis slave è responsabile della persistenza dei dati. Potrebbero verificarsi i seguenti problemi: 1. Quando l'IO dei dati di lettura e scrittura del master è troppo elevato , lo slave redis monta il nas. Il tempo di download dei dati sarà più lungo.

4. Passaggi dettagliati

4.1 Creare il file di configurazione della mappa di configurazione

La configurazione contiene tre file: il file di configurazione Redis master, il file di configurazione Redis slave e un semplice script che esegue diverse operazioni in base al ruolo di esecuzione. La configurazione specifica è la seguente:
redis-master:conf è il file di configurazione principale di Redis. La memoria è configurata su 256 M, la porta di configurazione è 6379, la password di configurazione è redis#123 e il percorso di archiviazione è /data/redis.
redis.conf: dal file di configurazione redis, configurare la memoria su 256M, configurare la porta su 6380, configurare la password: redis#123, il percorso di archiviazione è /data/redis-2 e configurare i dati da sincronizzare dal porta 6379 e regolare il tempo di memorizzazione su Se vengono apportate 10 modifiche ai dati entro 60 secondi, verrà eseguita la memorizzazione.
run.sh: la funzione principale è determinare il ruolo e creare una directory in base al nome host, quindi connettersi dolcemente alla directory di archiviazione. Questo passaggio consiste principalmente nell'archiviare i dati Redis di ciascun servizio nella propria directory. Quando si crea un nuovo Redis, non causerà conflitti di directory sul nodo.

apiVersion: v1
kind: ConfigMap
metadata:
  name: defaultapp-redis-standalone-config
  namespace: default
  labels:
    appname: default-app
    app: defaultapp-redis-standalone-config
data:
  redis-master.conf: |
    port 6379
    maxmemory 256mb
    requirepass redis#123
    dir /data/redis
  redis.conf: |
    port 6380
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 5 60 10
    dir /data/redis-2
    replicaof 127.0.0.1 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        ls /etc/redis/ -l
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        if [ -f /home/redis-2/$hname/dump.rdb ];then
                cp -vf /home/redis-2/$hname/dump.rdb /data/redis/
        else
                echo "[info] no bak dump.rdb"
        fi
        redis-server /etc/redis/redis-master.conf
    else
        echo "run redis slave"
        ls /etc/redis/ -l
        [ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis-2/$hname /data/redis-2
        redis-server /etc/redis/redis.conf
    fi