Κοινή χρήση τεχνολογίας

[K8s install redis] Εγκαταστήστε το redis sentinel cluster σε περιβάλλον k8s χωρίς pvc

2024-07-11

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

Εισαγωγή

Η δημιουργία κρατικών υπηρεσιών σε ένα σύμπλεγμα k8s είναι σχετικά ενοχλητική αποθήκευση. Αυτό το άρθρο θα χρησιμοποιήσει σταθμισμένα πολλαπλά αντίγραφα συνάφειας διαδρομής κεντρικού υπολογιστή για τη δημιουργία ενός συμπλέγματος redis με βάση το υπάρχον περιβάλλον και τις διαφορετικές ανάγκες για την επίτευξη διαρκή δεδομένων και υψηλή διαθεσιμότητα της υπηρεσίας redis.

1. Συνθήκες και περιγραφή περιβάλλοντος:

K8s έκδοση k8s-1.29.4, το περιβάλλον είναι χτισμένο σε μια αίθουσα υπολογιστών τηλεπικοινωνιών, με έξι κόμβους εργαζομένων Κάθε κόμβος έχει έναν δίσκο SSD εκτός συστήματος που είναι προσαρτημένος στη διαδρομή /data/ κοινόχρηστο χώρο αποθήκευσης Δεν χρησιμοποιείται κανένας χειριστής Προς το παρόν, ο redis-operator χρησιμοποιεί βασικά κοινόχρηστο χώρο αποθήκευσης.

2. Περιγραφή απαιτήσεων:

  • Δημιουργήστε ένα σύμπλεγμα φρουρών redis.
  • Υψηλή διαθεσιμότητα: Εάν ένας κόμβος k8s πεθάνει ή το pod επανεκκινηθεί, η χρήση δεν θα επηρεαστεί.
  • Υψηλή απόδοση: Διαβάστε και γράψτε τοπικούς δίσκους για να επιτύχετε IO υψηλής απόδοσης Εάν οι πόροι και η απόδοση υλικού του κοινόχρηστου χώρου αποθήκευσης δεν επαρκούν, το IO θα αποτελέσει εμπόδιο στην απόδοση.
  • Ασφάλεια δεδομένων: Μετά από αποτυχία μετάβασης ή κόμβου, τα δεδομένα πρέπει να είναι όσο το δυνατόν πληρέστερα
  • Απλή εγκατάσταση, εύκολη διαχείριση και συντήρηση

3. Αρχές και οδηγίες εφαρμογής

    1. Δημιουργήστε ένα σύμπλεγμα φρουρών redis, με έναν κύριο, δύο slaves και τρεις διαδικασίες φρουρού.
    1. Το Redis χρησιμοποιεί τρία ανεξάρτητα statefulsets και ένα αντίγραφο για τη δημιουργία, ενώ η διαδικασία φρουρού χρησιμοποιεί μία ανάπτυξη και τρία αντίγραφα για τη δημιουργία.
    1. Η διαδικασία redis χρησιμοποιεί συγγένεια κόμβου και βάρος για την υλοποίηση κόμβων πρωτευόντων και εφεδρικών κόμβων.
    1. Το Redis χρησιμοποιεί υπηρεσία χωρίς κεφαλές και ο φρουρός χρησιμοποιεί υπηρεσία υπηρεσίας.
    1. Για μια ομάδα δύο σκλάβων και ενεργών και εφεδρικών ανάλογα με το βάρος, πρέπει να προγραμματιστούν τα ονόματα ετικετών έξι κόμβων.

Σημείωση: Το redis που έχει δημιουργηθεί από αυτήν τη λύση μπορεί να χρησιμοποιηθεί μόνο εντός του συμπλέγματος k8s και δεν μπορεί να παρασχεθεί για χρήση εκτός του συμπλέγματος μέσω του LoadBlancer ή του NodePort, επειδή η IP του κύριου redis που επιλέγεται στο Sentinel είναι η IP του pod When a εμφανίζεται ο διακόπτης, δεν μπορεί να προσδιοριστεί ποιο είναι το κύριο redis.

4. Αναλυτικά βήματα

4.1.Σχεδιασμός ετικετών κόμβων
Όνομα κόμβουΡόλοςΕπιγραφή
k8s-worker-120-81πλήθοςstorage-selector=node-a-master
k8s-worker-120-82πλήθοςαποθήκευση-επιλογέας=κόμβος-β-κύριος
k8s-worker-120-83πλήθοςαποθήκευση-επιλογέας=κόμβος-γ-κύριος
k8s-worker-120-84Προετοιμάζωstorage-selector=node-a-slve
k8s-worker-120-85Προετοιμάζωstorage-selector=node-a-slve
k8s-worker-120-86Προετοιμάζωstorage-selector=node-a-slve

Σημείωση: Η διαίρεση ρόλων εδώ αναφέρεται σε: Εφόσον το redis έχει έναν κύριο και δύο υποτελείς, κάθε ομάδα redis πέφτει σε τρεις κύριους κόμβους, όταν ο κύριος κόμβος αποτυγχάνει, αλλάζει στον κόμβο δημιουργίας αντιγράφων ασφαλείας Το pod του redis-a-0 πέφτει στον κόμβο με την ετικέτα αποθήκευση-επιλογέας=κόμβος-α-κύριος από προεπιλογή Όταν ο κόμβος αποτύχει, θα αντιστοιχιστεί με βάση το βάρος του κόμβου με την ένδειξη αποθήκευση-επιλογέας=κόμβος-α-δελτίο. στον κόμβο.

4.2 Δημιουργία διαμόρφωσης configmap

Η διαμόρφωση περιέχει τέσσερα αρχεία και η περιγραφή διανομής είναι η εξής:
sentinel.conf: Αρχείο ρύθμισης παραμέτρων Sentinel Από προεπιλογή, το πρώτο statefulset χρησιμοποιείται ως το κύριο redis και η ρύθμιση παραμέτρων: solve-hostnames υποστηρίζει ονόματα κεντρικών υπολογιστών.
redis-master.conf: Κύριο αρχείο διαμόρφωσης redis, η μνήμη έχει ρυθμιστεί στα 256M, η θύρα διαμόρφωσης είναι 6379, ο κωδικός ρύθμισης παραμέτρων είναι redis#123 και η διαδρομή αποθήκευσης είναι /data/redis.
redis.conf: Από το αρχείο διαμόρφωσης redis, διαμορφώστε τη μνήμη στα 256M, διαμορφώστε τη θύρα σε 6380, διαμορφώστε τον κωδικό πρόσβασης: redis#123, η διαδρομή αποθήκευσης είναι /data/redis-2 και διαμορφώστε τα δεδομένα που θα συγχρονιστούν από το κύριος redis.
run.sh: Η κύρια λειτουργία είναι ο καθορισμός του ρόλου για την εκτέλεση διαφορετικών αρχείων διαμόρφωσης, τη δημιουργία ενός καταλόγου με βάση το όνομα του κεντρικού υπολογιστή και, στη συνέχεια, τη σύνδεσή του στον κατάλογο αποθήκευσης. Αυτό το βήμα είναι κυρίως η αποθήκευση των δεδομένων redis κάθε υπηρεσίας στον δικό της κατάλογο Κατά τη δημιουργία ενός νέου redis, δεν θα προκαλέσει διενέξεις καταλόγου στον κόμβο.

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