Teknologian jakaminen

[k8s install redis] k8s-asennuksen erillinen versio redisistä korkean suorituskyvyn ja korkean käytettävyyden saavuttamiseksi

2024-07-11

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

Johdanto

Tämä artikkeli perustuu [pseudo]-erillisen tilan redis-esiintymän rakentamiseen k8s-ympäristöön. Koska jaetun tallennustilan IO-suorituskyky on suhteellisen alhainen, jaettua tallennustilaa käytetään tietojen varmuuskopiointiin, ja redis-tiedot tallennetaan isäntäpolun muodossa. Tämä auttaa parantamaan rediksen IO-suorituskykyä isäntä-orja-muoto redis toteuttaa erillinen ja erittäin saatavilla redis.

1. Olosuhteet ja ympäristön kuvaus:

K8s-versio k8s-1.29.4, ympäristö on rakennettu tietoliikenteen tietokonehuoneeseen, jossa on yhteensä kuusi solmua. NAS-tallennustilassa on jaettu tallennustila, joka käyttää Alibaba Cloud NAS:ia ja omaa linjaa, jonka kaistanleveys on 500 Mt.

2. Vaatimusten kuvaus:

  • Rakenna redis-esiintymä: erillinen tai master-slave.
  • Korkea saatavuus: Vaikka k8s-solmu kuolisi, käyttö ei vaikuta pitkään aikaan.
  • Korkea suorituskyky: Jaettua tallennustilaa tai hajautettua Ceph-tallennustilaa käytetään, ja iO:n lukeminen ja kirjoittaminen on huomattavasti alennettua.
  • Tietoturva: Siirron jälkeen tietojen on oltava mahdollisimman täydellisiä
  • Yksinkertainen asennus, helppo hallinta ja huolto

3. Toteutusperiaatteet ja -ohjeet

1. Aseta redis isäntä-slave-tilaan. Isäntä-redis:n tiedot kuuluvat paikalliselle SSD-levylle ja orja-redis-tiedot ulkoiselle jaetulle nas-muistille.
2. Luo sitten statefulset-kokoonpano, sijoita kaksi säilöä, yksi säilö pääredisiksi, liitä se isäntäpolkuun, luo hakemisto isäntänimellä ja tallenna rdb-tiedosto. Toinen säilö toimii orja-redis-palvelimena, ja nas-polku liitetään hakemiston luomiseksi isäntänimellä ja rdb-tiedoston tallentamiseksi.
3. Säädä datan pysyvyysparametrin tallennus redisistä ja säädä tietojen latausaika pienemmäksi parametriksi varmistaaksesi, että päivitetyt tiedot tallennetaan rdb-tiedostoon mahdollisimman pian.
4. Joka kerta kun pod ajoitetaan tai käynnistetään uudelleen, kopioi nas:iin tallennettu rdb-tiedosto isäntäpolulle ja käynnistä redis.

Huomautus: Tämä tehdään, jotta isäntä-redis voi saavuttaa tehokkaan liiketoimintatietojen käsittelyn, ja orja-redis on vastuussa tietojen pysyvyydestä. Seuraavia ongelmia voi ilmetä: 1. Kun isäntälaitteen luku- ja kirjoitusdata on liian korkea , orja uudelleenliittää nas. Tietojen latausaika on pidempi.

4. Yksityiskohtaiset vaiheet

4.1. Luo konfigurointitiedosto

Kokoonpano sisältää kolme tiedostoa: master-redis-määritystiedoston, orja-redis-määritystiedoston ja yksinkertaisen komentosarjan, joka suorittaa erilaisia ​​toimintoja suoritusroolin mukaan.
redis-master:conf on tärkein redis-määritystiedosto. Muisti on 256M, konfigurointiportti on 6379, konfigurointisalasana on redis#123 ja tallennuspolku on /data/redis.
redis.conf: Määritä redis-määritystiedostosta muistiksi 256M, määritä portiksi 6380, määritä salasana: redis#123, tallennuspolku on /data/redis-2 ja määritä tiedot synkronoitavaksi portti 6379 ja säädä tallennusaika arvoon Jos datamuutoksia tapahtuu 10 60 sekunnin sisällä, tallennus suoritetaan.
run.sh: Päätoiminto on määrittää rooli ja luoda hakemisto isäntänimen perusteella ja muodostaa sitten pehmeä yhteys tallennushakemistoon. Tämä vaihe on pääasiassa kunkin palvelun redis-tietojen tallentaminen omaan hakemistoonsa. Uutta redis-ohjelmaa luotaessa se ei aiheuta hakemistoristiriitoja solmuun.

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