Teknologian jakaminen

[K8s-asennus redis] Asenna redis sentinel -klusteri k8s-ympäristöön ilman pvc:tä

2024-07-11

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

Johdanto

Tilallisten palveluiden rakentaminen k8s-klusterissa on suhteellisen hankalaa. Nykyinen tavanomainen lähestymistapa rediksen rakentamiseen on käyttää jaettua tallennustilaa, jotta voidaan saavuttaa pysyvä data varastointi. Tämä artikkeli käyttää painotettuja useita kopioita isäntäpolun affiniteetista uudelleendis-klusterin rakentamiseen olemassa olevan ympäristön ja erilaisten tarpeiden perusteella, jotta saavutetaan tietojen pysyvyys ja redis-palvelun korkea käytettävyys.

1. Olosuhteet ja ympäristön kuvaus:

K8s-versio k8s-1.29.4, ympäristö on rakennettu tietoliikenteen tietokonehuoneeseen, jossa on kuusi työsolmua Käytössä ei ole operaattoria Tällä hetkellä redis-operaattori käyttää periaatteessa jaettua tallennustilaa.

2. Vaatimusten kuvaus:

  • Rakenna redis sentinel -klusteri.
  • Korkea saatavuus: Jos k8s-solmu kuolee tai pod käynnistetään uudelleen, käyttö ei vaikuta.
  • Korkea suorituskyky: Lue ja kirjoita paikallisia levyjä korkean suorituskyvyn saavuttamiseksi. Jos jaetun tallennustilan resurssit ja laitteiston suorituskyky eivät riitä, IO on suorituskyvyn pullonkaula.
  • Tietoturva: Siirron tai solmuvirheen jälkeen tietojen tulee olla mahdollisimman täydellisiä
  • Yksinkertainen asennus, helppo hallinta ja huolto

3. Toteutusperiaatteet ja -ohjeet

    1. Rakenna redis sentinel -klusteri, jossa on yksi isäntä, kaksi orjaa ja kolme vartijaprosessia.
    1. Redis käyttää rakentamiseen kolmea itsenäistä tilasarjaa ja yhtä kopiota, kun taas vartijaprosessi käyttää rakentamiseen yhtä käyttöönottoa ja kolmea kopiota.
    1. Redis-prosessi käyttää solmuaffiniteettia ja painoa ensisijaisen ja varasolmun toteuttamiseen.
    1. Redis käyttää service headless -palvelua ja sentinel palvelupalvelua.
    1. Kahden orjan ryhmälle, joka on aktiivinen ja varmuuskopioitu painon mukaan, kuuden solmun etiketin nimet on suunniteltava.

Huomautus: Tämän ratkaisun rakentamaa redis:tä voidaan käyttää vain k8s-klusterissa, eikä sitä voida tarjota käytettäväksi klusterin ulkopuolella LoadBlancerin tai NodePortin kautta, koska Sentinelissä valitun pääredis:n IP on pod:n kun a kytkin tapahtuu, sitä ei voida määrittää, mikä on tärkein redis.

4. Yksityiskohtaiset vaiheet

4.1.Solmutunnisteiden suunnittelu
Solmun nimiRooliLabel
k8s-työntekijä-120-81isäntästorage-selector=node-a-master
k8s-työntekijä-120-82isäntästorage-selector=node-b-master
k8s-työntekijä-120-83isäntästorage-selector=node-c-master
k8s-työntekijä-120-84Valmistellastorage-selector=node-a-slve
k8s-työntekijä-120-85Valmistellastorage-selector=node-a-slve
k8s-työntekijä-120-86Valmistellastorage-selector=node-a-slve

Huomautus: Roolijako tässä viittaa: Koska redisissä on yksi isäntä ja kaksi orjaa, kukin redis-podista kuuluu kolmeen pääsolmuun Pod of redis-a-0 kuuluu oletusarvoisesti solmuun, jonka nimi on storage-selector=node-a-master. .

4.2 Luo konfiguraatiokartta

Kokoonpano sisältää neljä tiedostoa ja jakelun kuvaus on seuraava:
sentinel.conf: Sentinel-asetustiedostoa käytetään oletusarvoisesti tärkeimpänä redis-tiedostona, ja konfiguraatio solve-hostnames tukee isäntänimiä.
redis-master.conf: Pää redis-määritystiedosto, muisti on määritetty 256M:ksi, konfigurointiportti on 6379, kokoonpanon salasana 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 tärkein redis.
run.sh: Päätoiminto on määrittää rooli eri määritystiedostojen suorittamiselle, 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-config
  namespace: default-ns
  labels:
    appname: default-app
    app: defaultapp-redis-config
data:
  sentinel.conf: |
    sentinel monitor mymaster defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379 2
    sentinel auth-pass mymaster redis#123
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    SENTINEL resolve-hostnames yes
    SENTINEL announce-hostnames yes
  redis-master.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    masterauth redis#123
  redis.conf: |
    maxmemory 256mb
    requirepass redis#123
    save 3600 1 300 10 60 100
    dir /data/redis
    replicaof defaultapp-redis-a-0.defaultapp-redis-a.default-ns.svc.cluster.local 6379
    masterauth redis#123
  run.sh: |
    #!/bin/sh
    role=$1
    hname=$(hostname)
    if [ $role == "master" ];then
        echo "run redis master"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis-master.conf
    elif [ $role == "sentinel" ];then
        echo "run redis sentinel"
        mkdir -p /etc/redis
        cp /home/redis/sentinel.conf /etc/redis/
        redis-sentinel /etc/redis/sentinel.conf
    else
        echo "run redis slave"
        [ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
        [ -d /data ] || mkdir /data
        ln -s /home/redis/$hname /data/redis
        redis-server /etc/redis/redis.conf
    fi