2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este artículo se basará en la creación de una instancia de Redis en modo [pseudo] independiente en el entorno k8s. Dado que el rendimiento de IO del almacenamiento compartido es relativamente bajo, el almacenamiento compartido se utiliza para la copia de seguridad de los datos y los datos de Redis se almacenan en forma de ruta de host. Esto ayuda a mejorar el rendimiento de IO de Redis. Este artículo explicará cómo utilizar dos funciones de contenedor. la forma maestro-esclavo de redis para implementar un redis independiente y de alta disponibilidad.
K8s versión k8s-1.29.4, el entorno está construido en una sala de computadoras de telecomunicaciones, con un total de seis nodos, cada nodo tiene un disco SSD que no es del sistema montado en la ruta / datos /. Hay almacenamiento compartido NAS, que utiliza Alibaba Cloud NAS y se utiliza a través de una línea dedicada con un ancho de banda de línea dedicado de 500 Mb.
1. Configure Redis en modo maestro-esclavo. La lectura y escritura de datos del redis maestro recaen en el disco SSD local y los datos del redis esclavo recaen en el almacenamiento nas externo compartido.
2. Luego cree una configuración con estado, coloque dos contenedores, un contenedor como redis principal, móntelo en la ruta del host, cree un directorio con el nombre del host y almacene el archivo rdb. Otro contenedor sirve como redis esclavo y la ruta nas se monta para crear un directorio con el nombre del host y almacenar el archivo rdb.
3. Ajuste el parámetro de persistencia de datos guardado desde redis y ajuste el tiempo de descarga de datos a un parámetro más pequeño para garantizar que los datos actualizados se almacenen en el archivo rdb lo antes posible.
4. Cada vez que se programe o reinicie el pod, copie el archivo rdb almacenado en nas en la ruta del host e inicie redis.
Nota: Esto se hace para permitir que el redis maestro logre un procesamiento de datos comerciales de alto rendimiento, y el redis esclavo es responsable de la persistencia de los datos. Puede haber los siguientes problemas: 1. Cuando el IO de lectura y escritura del maestro es demasiado alto. , el redis esclavo monta nas y el tiempo de descarga de datos será mayor.
La configuración contiene tres archivos: el archivo de configuración de Redis maestro, el archivo de configuración de Redis esclavo y un script simple que realiza diferentes operaciones según la función de ejecución. La configuración específica es la siguiente:
redis-master: conf es el archivo de configuración principal de redis. La memoria está configurada en 256 M, el puerto de configuración es 6379, la contraseña de configuración es redis # 123 y la ruta de almacenamiento es /data/redis.
redis.conf: desde el archivo de configuración de redis, configure la memoria a 256 M, configure el puerto a 6380, configure la contraseña: redis#123, la ruta de almacenamiento es /data/redis-2 y configure los datos que se sincronizarán desde el puerto 6379 y ajuste el tiempo de almacenamiento a Si hay 10 cambios de datos en 60 segundos, se realizará el almacenamiento.
run.sh: la función principal es determinar la función y crear un directorio basado en el nombre del host y luego conectarse suavemente al directorio de almacenamiento. Este paso es principalmente para almacenar los datos de Redis de cada servicio en su propio directorio. Al crear un nuevo Redis, no causará conflictos de directorio en el 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