Technologieaustausch

[k8s-Installation von Redis] k8s-Installation der eigenständigen Version von Redis, um hohe Leistung und hohe Verfügbarkeit zu erreichen

2024-07-11

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

Einführung

Dieser Artikel basiert auf dem Aufbau einer [Pseudo]-Redis-Instanz im Standalone-Modus in der k8s-Umgebung. Da die E/A-Leistung von gemeinsam genutztem Speicher relativ gering ist, wird gemeinsam genutzter Speicher für die Datensicherung verwendet und Redis-Daten werden in Form von Hostpfaden gespeichert. Dies trägt dazu bei, die E/A-Leistung von Redis zu verbessern Die Master-Slave-Form von Redis zur Implementierung eines eigenständigen und hochverfügbaren Redis.

1. Bedingungen und Umgebungsbeschreibung:

K8s-Version k8s-1.29.4, die Umgebung ist in einem Telekommunikationscomputerraum aufgebaut, mit insgesamt sechs Knoten. Jeder Knoten verfügt über eine Nicht-Systemfestplatte, eine SSD-Festplatte, die im /data/-Pfad montiert ist. Es gibt einen gemeinsam genutzten NAS-Speicher, der Alibaba Cloud NAS nutzt und eine Standleitung mit einer Standleitungsbandbreite von 500 MB nutzt.

2. Anforderungsbeschreibung:

  • Erstellen Sie eine Redis-Instanz: Standalone oder Master-Slave.
  • Hohe Verfügbarkeit: Selbst wenn ein k8s-Knoten ausfällt, wird die Nutzung für lange Zeit nicht beeinträchtigt.
  • Hohe Leistung: Es wird ein gemeinsamer Speicher oder ein verteilter Ceph-Speicher verwendet, und das Lesen und Schreiben von iO wird stark reduziert.
  • Datensicherheit: Nach einem Wechsel müssen die Daten möglichst vollständig sein
  • Einfache Installation, einfache Verwaltung und Wartung

3. Umsetzungsgrundsätze und -anweisungen

1. Richten Sie Redis im Master-Slave-Modus ein. Das Lesen und Schreiben von Daten des Master-Redis erfolgt auf der lokalen SSD-Festplatte, und die Daten des Slave-Redis fallen auf den externen gemeinsam genutzten NAS-Speicher.
2. Erstellen Sie dann eine Statefulset-Konfiguration, platzieren Sie zwei Container, einen Container als Haupt-Redis, mounten Sie ihn im Hostpfad, erstellen Sie ein Verzeichnis mit dem Hostnamen und speichern Sie die RDB-Datei. Ein weiterer Container dient als Slave-Redis, und der NAS-Pfad wird gemountet, um ein Verzeichnis mit dem Hostnamen zu erstellen und die RDB-Datei zu speichern.
3. Passen Sie den Datenpersistenzparameter zum Speichern von Redis an und stellen Sie die Datendownloadzeit auf einen kleineren Parameter ein, um sicherzustellen, dass die aktualisierten Daten so schnell wie möglich in der RDB-Datei gespeichert werden.
4. Kopieren Sie jedes Mal, wenn der Pod geplant oder neu gestartet wird, die in NAS gespeicherte RDB-Datei in den Hostpfad und starten Sie Redis.

Hinweis: Dies geschieht, um dem Master-Redis eine leistungsstarke Verarbeitung von Geschäftsdaten zu ermöglichen, und der Slave-Redis ist für die Datenpersistenz verantwortlich. Es können die folgenden Probleme auftreten: 1. Wenn die Lese- und Schreibdaten-E/A des Masters zu hoch ist , die Slave-Redis mounten NAS. Die Daten-Download-Zeit wird länger sein.

4. Detaillierte Schritte

4.1. Configmap-Konfigurationsdatei erstellen

Die Konfiguration enthält drei Dateien: die Master-Redis-Konfigurationsdatei, die Slave-Redis-Konfigurationsdatei und ein einfaches Skript, das je nach Ausführungsrolle unterschiedliche Vorgänge ausführt. Die spezifische Konfiguration lautet wie folgt:
redis-master:conf ist die Hauptkonfigurationsdatei von Redis. Der Speicher ist auf 256 MB konfiguriert, der Konfigurationsport ist 6379, das Konfigurationskennwort ist redis#123 und der Speicherpfad ist /data/redis.
redis.conf: Konfigurieren Sie in der Redis-Konfigurationsdatei den Speicher auf 256 MB, konfigurieren Sie den Port auf 6380, konfigurieren Sie das Kennwort: redis # 123, den Speicherpfad lautet /data/redis-2 und konfigurieren Sie die zu synchronisierenden Daten Port 6379 und stellen Sie die Speicherzeit auf ein. Bei 10 Datenänderungen innerhalb von 60 Sekunden wird die Speicherung durchgeführt.
run.sh: Die Hauptfunktion besteht darin, die Rolle zu bestimmen, ein Verzeichnis basierend auf dem Hostnamen zu erstellen und dann sanft eine Verbindung zum Speicherverzeichnis herzustellen. Dieser Schritt dient hauptsächlich dazu, die Redis-Daten jedes Dienstes in einem eigenen Verzeichnis zu speichern. Beim Erstellen eines neuen Redis kommt es nicht zu Verzeichniskonflikten auf dem Knoten.

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