Maison  >  Article  >  base de données  >  Comment créer un cluster Redis dans CentOS7

Comment créer un cluster Redis dans CentOS7

WBOY
WBOYavant
2023-05-26 13:34:061203parcourir

1. Construction manuelle

1. Préparez les nœuds

CentOS7 et installez Redis

Le nombre de nœuds doit être d'au moins 6 pour garantir un cluster complet et hautement disponible

(1) Structure du répertoire

cluster
├── 9001
│   ├── data
│   │   ├── appendonly.aof
│   │   └── nodes-9001.conf
│   ├── redis-9001.conf
│   └── redis-9001.log
├── 9002
│   ├── data
│   │   ├── appendonly.aof
│   │   └── nodes-9002.conf
│   ├── redis-9002.conf
│   └── redis-9002.log
...

(2 ) Préparez les fichiers de configuration

cd cluster
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
cp ../redis-6.0.9/redis.conf 9001/redis-9001.conf
vi 9001/redis-9001.conf
    port 9001
    daemonize yes
    bind 192.168.11.40
    dir /root/cluster/9001/data/
    pidfile /var/run/redis_9001.pid
    cluster-enabled yes  # 集群模式运行
    cluster-config-file nodes-9001.conf
    cluster-node-timeout 15000
    # appendonly yes
    logfile "/root/cluster/9001/redis-9001.log"

Copier et remplacer : :%s/9001/9002/g:%s/9001/9002/g

(3) 启动服务

/usr/local/redis/bin/redis-server /root/cluster/9001/redis-9001.conf
...
tail 9001/redis-9001.log
kill `cat /var/run/redis_9001.pid`

启动后会自动在 data 目录创建集群配置文件nodes-9001.conf

(3) Démarrez le service

$ cat 9001/data/nodes-9001.conf
8ccdb0963411ebd05ce21952bdd4b7597825afdc :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
$ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc :9001@19001 myself,master - 0 0 0 connected
Après le démarrage, il créera automatiquement un fichier de configuration de cluster

nœuds dans le répertoire de données -9001.conf. Lorsque les informations du nœud dans le cluster changent, le nœud enregistre automatiquement l'état du cluster dans ce fichier de configuration. Il est préférable de ne pas le modifier manuellement. Si un fichier de configuration de cluster existe au démarrage, le nœud utilisera le contenu du fichier de configuration pour initialiser les informations du cluster

$ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001
192.168.11.40:9001> cluster meet 192.168.11.40 9002
OK
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 0 0 connected
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620703357871 1 connected

Node ID

 : une chaîne hexadécimale de 40 chiffres utilisée pour identifier de manière unique un nœud dans le cluster. L'ID du nœud n'est créé qu'une seule fois et l'ID en cours d'exécution changera à chaque redémarrage

2 Node handshake

Node handshake Un lot de nœuds exécutés en mode cluster communiquent entre eux via le protocole Gossip pour se percevoir
    .
    192.168.11.40:9001> set hello world
    (error) CLUSTERDOWN Hash slot not served
    192.168.11.40:9001> cluster info
    cluster_state:fail
    cluster_slots_assigned:0
    cluster_slots_ok:0
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:0
    ...
  • cluster meet est une commande

    Asynchrone

    , la fonction est que les nœuds échangent des informations de données d'état entre eux, reviennent immédiatement après l'exécution et effectuent une communication de prise de contact avec le nœud cible en interne :
  • Le nœud 9001 crée les informations du nœud 9002. objet localement et envoie le message de rencontre
  • Nœud 9002 Après avoir reçu le message de rencontre, enregistrez les informations du nœud 9001 et répondez au message pong

Après cela, les nœuds 9001 et 9002 communiquent régulièrement entre eux via ping/pong messages

Dans le clusterTout

nœud peut exécuter la commande cluster meet Pour rejoindre un nouveau nœud, l'état de la prise de contact sera propagé au sein du cluster via des messages : les autres nœuds découvriront automatiquement le nouveau nœud et lanceront le processus de prise de contact

Une fois que le nœud a établi la poignée de main, le cluster ne peut pas fonctionner normalement. À ce stade, le cluster est dans l'état

hors ligne et toutes les données en lecture et en écriture sont interdites. Étant donné que les emplacements ne sont pas alloués aux nœuds, le cluster ne peut pas terminer le mappage des emplacements aux nœuds

/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001 cluster addslots {0..5461}
/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9002 cluster addslots {5462..10922}
/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9003 cluster addslots {10923..16383}
3 Allocation des emplacements

Le cluster Redis mappe toutes les données sur

16384

emplacements. Ce n'est que lorsque tous les emplacements

sont alloués aux nœuds que le cluster entre dans l'état en ligne

Attribuer des emplacements :

192.168.11.40:9001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
...
192.168.11.40:9001> cluster nodes
cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 master - 0 1620704406746 0 connected
1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 master - 0 1620704406000 4 connected
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704404000 2 connected 0-5461
9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 master - 0 1620704407753 5 connected
85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704407000 3 connected 10923-16383
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704408763 1 connected 5462-10922

Afficher les informations du cluster :

192.168.11.40:9004> cluster replicate 8ccdb0963411ebd05ce21952bdd4b7597825afdc
OK
192.168.11.40:9005> cluster replicate 5786e3237c7fa413ed22465d15be721f95e72cfa
OK
192.168.11.40:9006> cluster replicate 85ceb9826e8aa003169c46fb4ba115c72002d4f9
OK

Chaque nœud responsable du traitement des emplacements doit avoir un nœud esclave pour garantir qu'il peut être restauré lorsque il échoue. Basculement automatique

Le nœud démarré pour la première fois et le nœud auquel l'emplacement est attribué sont tous deux des nœuds maîtres. Le nœud esclave est responsable de la copie des informations sur l'emplacement du nœud maître et des données associées

192.168.11.40:9001> cluster nodes
cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 slave 85ceb9826e8aa003169c46fb4ba115c72002d4f9 0 1620704825926 3 connected
1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 slave 5786e3237c7fa413ed22465d15be721f95e72cfa 0 1620704825000 1 connected
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704824000 2 connected 0-5461
9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 slave 8ccdb0963411ebd05ce21952bdd4b7597825afdc 0 1620704824921 2 connected
85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704824000 3 connected 10923-16383
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704823914 1 connected 5462-10922
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.3.tar.gz
tar -zxvf ruby-2.7.3.tar.gz
cd ruby-2.7.3
./configure --prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin
2. Utilisez redis-trib.rb. pour créer un cluster (obsolète)

【Utilisez redis-cli pour créer un cluster après Redis5.0】

redis-trib.rb est un

outil de gestion de cluster

Redis implémenté dans Ruby. Les commandes liées au cluster sont utilisées en interne pour nous aider à simplifier les opérations courantes d'exploitation et de maintenance telles que la création, l'inspection, la migration et l'équilibrage des clusters

1 Environnement Ruby

Installer Ruby

wget http://rubygems.org/downloads/redis-4.2.5.gem
gem install -l redis-4.2.5.gem
gem list

Installer la dépendance Rubygem Redis

$ gem install -l redis-4.2.5.gem
ERROR:  Loading command: install (LoadError)
	cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

Rencontrer un problème

.
yum -y install zlib-devel
cd ruby-2.7.3/ext/zlib
ruby ./extconf.rb
make
make install

Résolvez-le ( openssl (similaire à openssl)

cp /{redis_home}/src/redis-trib.rb /usr/local/bin
redis-trib.rb
    Installez redis-trib.rb
  • # --replicas 1:指定集群中每个主节点配备几个从节点
    redis-trib.rb create --replicas 1 192.168.11.40:9001 192.168.11.40:9002 192.168.11.40:9003 192.168.11.40:9004 192.168.11.40:9005 192.168.11.40:9006
    # 集群完整性检查
    redis-trib.rb check 192.168.11.40:9001

    2. Créez un cluster

    redis-cli --cluster create 192.168.11.40:9001 192.168.11.40:9002 192.168.11.40:9003 192.168.11.40:9004 192.168.11.40:9005 192.168.11.40:9006 --cluster-replicas 1
  • terminera automatiquement la prise de contact du nœud et le processus d'allocation des emplacements

  • essaiera son Il est préférable de s'assurer que les nœuds maître et esclave ne sont pas alloués sur la même machine. L'ordre de la liste des nœuds ci-dessous est utilisé pour déterminer le rôle maître-esclave. Le nœud maître est d'abord, puis le nœud esclave. L'adresse du nœud doit être un. nœud qui ne contient aucun emplacement/donnée, sinon la création du cluster sera refusée 3. Utilisez redis-cli pour créer un cluster

    rrreee.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer