2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Cet article sera basé sur la création d'une instance Redis en mode autonome [pseudo] dans l'environnement k8s. Étant donné que les performances d'E/S du stockage partagé sont relativement faibles, le stockage partagé est utilisé pour la sauvegarde des données et les données Redis sont stockées sous la forme d'un chemin d'hôte. Cela contribue à améliorer les performances d'E/S de Redis. Cet article explique comment utiliser deux conteneurs. la forme maître-esclave de Redis pour implémenter un Redis autonome et hautement disponible.
Version K8s k8s-1.29.4, l'environnement est construit dans une salle informatique de télécommunications, avec un total de six nœuds. Chaque nœud dispose d'un disque SSD non système monté sur le chemin /data/. Il existe un stockage partagé NAS, qui utilise le NAS Alibaba Cloud et est utilisé via une ligne dédiée avec une bande passante de ligne dédiée de 500 Mo.
1. Configurez Redis en mode maître-esclave. La lecture et l'écriture des données du Redis maître tombent sur le disque SSD local, et les données du Redis esclave tombent sur le stockage NAS partagé externe.
2. Créez ensuite une configuration statefulset, placez deux conteneurs, un conteneur comme redis principal, montez-le sur le chemin d'hôte, créez un répertoire avec le nom d'hôte et stockez le fichier rdb. Un autre conteneur sert de redis esclave et le chemin nas est monté pour créer un répertoire avec le nom d'hôte et stocker le fichier rdb.
3. Ajustez le paramètre de persistance des données enregistré à partir de Redis et ajustez le temps de téléchargement des données à un paramètre plus petit pour garantir que les données mises à jour sont stockées dans le fichier rdb dès que possible.
4. Chaque fois que le pod est planifié ou redémarré, copiez le fichier rdb stocké dans nas sur le chemin d'hôte et démarrez Redis.
Remarque : Ceci est fait pour permettre au redis maître d'obtenir un traitement haute performance des données commerciales, et le redis esclave est responsable de la persistance des données. Les problèmes suivants peuvent survenir : 1. Lorsque les E/S des données de lecture et d'écriture du maître sont trop élevées. , le redis esclave monte le nas. Le temps de téléchargement des données sera plus long.
La configuration contient trois fichiers : le fichier de configuration redis maître, le fichier de configuration redis esclave et un script simple qui effectue différentes opérations en fonction du rôle d'exécution. La configuration spécifique est la suivante :
redis-master:conf est le fichier de configuration principal de Redis. La mémoire est configurée sur 256 Mo, le port de configuration est 6379, le mot de passe de configuration est redis#123 et le chemin de stockage est /data/redis.
redis.conf : Depuis le fichier de configuration redis, configurez la mémoire sur 256 Mo, configurez le port sur 6380, configurez le mot de passe : redis#123, le chemin de stockage est /data/redis-2, et configurez les données à synchroniser depuis le port 6379 et réglez la durée de stockage sur S'il y a 10 modifications de données dans les 60 secondes, le stockage sera effectué.
run.sh : La fonction principale est de déterminer le rôle et de créer un répertoire basé sur le nom d'hôte, puis de se connecter en douceur au répertoire de stockage. Cette étape consiste principalement à stocker les données redis de chaque service dans son propre répertoire. Lors de la création d'un nouveau redis, cela ne provoquera pas de conflits de répertoires sur le nœud.
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