2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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.
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.
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.
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