Compartir tecnología

[instalación de k8s redis] Instalación de k8s versión independiente de redis para lograr un alto rendimiento y alta disponibilidad

2024-07-11

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

Introducción

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.

1. Condiciones y descripción del entorno:

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.

2. Descripción de requisitos:

  • Cree una instancia de Redis: independiente o maestro-esclavo.
  • Alta disponibilidad: incluso si un nodo k8s muere, el uso no se verá afectado durante mucho tiempo.
  • Alto rendimiento: se requiere un alto iO. Se utiliza almacenamiento compartido o almacenamiento distribuido ceph, y la lectura y escritura de iO tendrá un gran descuento.
  • Seguridad de los datos: después de que se produce un cambio, los datos deben ser lo más completos posible
  • Instalación sencilla, fácil gestión y mantenimiento.

3. Principios e instrucciones de implementación.

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.

4. Pasos detallados

4.1. Crear archivo de configuración del mapa de configuración

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