2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Η δημιουργία κρατικών υπηρεσιών σε ένα σύμπλεγμα k8s είναι σχετικά ενοχλητική αποθήκευση. Αυτό το άρθρο θα χρησιμοποιήσει σταθμισμένα πολλαπλά αντίγραφα συνάφειας διαδρομής κεντρικού υπολογιστή για τη δημιουργία ενός συμπλέγματος redis με βάση το υπάρχον περιβάλλον και τις διαφορετικές ανάγκες για την επίτευξη διαρκή δεδομένων και υψηλή διαθεσιμότητα της υπηρεσίας redis.
K8s έκδοση k8s-1.29.4, το περιβάλλον είναι χτισμένο σε μια αίθουσα υπολογιστών τηλεπικοινωνιών, με έξι κόμβους εργαζομένων Κάθε κόμβος έχει έναν δίσκο SSD εκτός συστήματος που είναι προσαρτημένος στη διαδρομή /data/ κοινόχρηστο χώρο αποθήκευσης Δεν χρησιμοποιείται κανένας χειριστής Προς το παρόν, ο redis-operator χρησιμοποιεί βασικά κοινόχρηστο χώρο αποθήκευσης.
Σημείωση: Το redis που έχει δημιουργηθεί από αυτήν τη λύση μπορεί να χρησιμοποιηθεί μόνο εντός του συμπλέγματος k8s και δεν μπορεί να παρασχεθεί για χρήση εκτός του συμπλέγματος μέσω του LoadBlancer ή του NodePort, επειδή η IP του κύριου redis που επιλέγεται στο Sentinel είναι η IP του pod When a εμφανίζεται ο διακόπτης, δεν μπορεί να προσδιοριστεί ποιο είναι το κύριο redis.
Όνομα κόμβου | Ρόλος | Επιγραφή |
---|---|---|
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 πέφτει στον κόμβο με την ετικέτα αποθήκευση-επιλογέας=κόμβος-α-κύριος από προεπιλογή Όταν ο κόμβος αποτύχει, θα αντιστοιχιστεί με βάση το βάρος του κόμβου με την ένδειξη αποθήκευση-επιλογέας=κόμβος-α-δελτίο. στον κόμβο.
Η διαμόρφωση περιέχει τέσσερα αρχεία και η περιγραφή διανομής είναι η εξής:
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