Construction du cluster Redis et erreur MOVED

Pourquoi créer un cluster Redis

Étant donné qu'un seul nœud peut échouer
, il restera bloqué lors du traitement d'un grand nombre de requêtes simultanées.
Si un seul nœud est en panne, les données sont facilement perdues

Alors pour créer un cluster redis
Insérez la description de l'image ici

Redis a trois modes de cluster

Mode maître-esclave

  • La base de données maître peut effectuer des opérations de lecture et d'écriture. Lorsque les opérations de lecture et d'écriture entraînent des modifications de données, les données sont automatiquement synchronisées avec la base de données esclave.
  • La base de données esclave est généralement en lecture seule et reçoit des données synchronisées de la base de données maître
  • Un maître peut avoir plusieurs esclaves, mais un esclave ne peut correspondre qu'à un seul maître
  • L'esclave raccroche et n'affecte pas la lecture et l'écriture des autres esclaves et du maître Après le redémarrage, les données seront synchronisées à partir du maître.
  • Une fois le maître bloqué, cela n'affecte pas la lecture de l'esclave, mais redis ne fournit plus de services d'écriture. Après le redémarrage du maître, redis fournira à nouveau des services d'écriture externes
  • Une fois que le maître a raccroché, il ne re-sélectionnera pas un maître dans le nœud esclave

Mode sentinelle

  • Le mode sentinelle est basé sur le mode maître-esclave. S'il n'y a qu'un seul nœud Redis, sentinel n'a aucune signification
  • Lorsque le maître raccroche, sentinel sélectionne l'un des esclaves comme maître et modifie ses fichiers de configuration. Les fichiers de configuration des autres esclaves seront également modifiés. Par exemple, l'attribut slaveof pointera vers le nouveau maître.
  • Lorsque le maître redémarrera, ce ne sera plus le maître mais en tant qu'esclave pour recevoir la
    sentinelle des données de synchronisation du nouveau maître. Parce que c'est aussi un processus qui peut se bloquer, sentinel démarrera également plusieurs pour former un cluster sentinelle
  • Lorsque plusieurs sentinelles sont configurées, les sentinelles seront également automatiquement surveillées
  • Lorsque le mot de passe est configuré en mode maître-esclave, sentinel modifie également de manière synchrone les informations de configuration dans le fichier de configuration, vous n'avez donc pas à vous en soucier.
    Un cluster sentinelle ou sentinelle peut gérer plusieurs Redis maître-esclave, et plusieurs sentinelles peuvent également surveiller le même redis.
  • Sentinel est préférable de ne pas être déployé sur la même machine que Redis, sinon après le blocage du serveur Redis, Sentinel se bloque également

Mode cluster

  • Interconnexion réseau de plusieurs nœuds Redis et partage de données
  • Tous les nœuds sont un maître et un esclave (ou un maître et plusieurs esclaves), qui ne fournissent jamais de services, ne servent que de sauvegarde
  • Ne prend pas en charge le traitement de plusieurs clés en même temps (comme MSET / MGET), car Redis doit répartir uniformément les clés sur chaque nœud
  • La création de valeurs-clés en même temps avec une concurrence élevée réduira les performances et entraînera un comportement imprévisible
  • Prise en charge de l'ajout et de la suppression en ligne de nœuds
  • Le client peut se connecter à n'importe quel nœud maître pour lire et écrire

Partage de données de cluster

  • N'a pas introduit de HASH cohérent, mais a introduit le concept de fente de hachage (fente de hachage)
  • 16384 emplacements de hachage par cluster
  • Une fois que chaque clé est vérifiée par CRC16, l'emplacement de hachage est utilisé pour déterminer l'emplacement
  • Chaque nœud du cluster est responsable d'une partie de l'emplacement de hachage

l'amener sur! Spectacle! !

Nous utilisons le mode cluster

  1. Le mode sentinelle peut essentiellement répondre aux besoins de la production générale et a une haute disponibilité. Mais lorsque la quantité de données est trop importante pour qu'un seul serveur puisse les stocker, le mode maître-esclave ou le mode sentinelle ne peut pas répondre à la demande. À ce stade, les données stockées doivent être fragmentées et stockées dans plusieurs instances Redis. L'émergence du mode cluster consiste à résoudre le problème de la capacité limitée d'un seul Redis, et les données Redis sont distribuées sur plusieurs machines selon certaines règles.
  2. On peut dire que le cluster est une combinaison de mode sentinelle et maître-esclave. La fonction de resélection maître-esclave et maître peut être réalisée via le cluster, donc si vous configurez deux copies et trois fragments, vous avez besoin de six instances Redis. Étant donné que les données Redis sont allouées à différentes machines du cluster selon certaines règles, lorsque la quantité de données est trop importante, de nouvelles machines peuvent être ajoutées à des fins d'extension.
  3. Pour utiliser un cluster, il vous suffit d'ouvrir la configuration d'activation du cluster dans le fichier de configuration redis. Chaque cluster nécessite au moins trois bases de données principales pour fonctionner normalement, et il est très pratique d'ajouter des nœuds.

Paramètres expérimentaux

L'adresse IP des six serveurs est
20.0.0.11
20.0.0.12
20.0.0.21
20.0.0.22
20.0.0.23
20.0.0.24

Configuration expérimentale

Les six hôtes doivent installer redis

[root@localhost ~]# yum -y install gcc gcc-c++ make
[root@localhost ~]# mkdir /bao
[root@localhost ~]# cd /bao
[root@localhost bao]# rz -E
rz waiting to receive.
[root@localhost bao]# tar zxvf redis-5.0.7.tar.gz 
[root@localhost bao]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make install PREFIX=/usr/local/redis
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin

Modifier le fichier de configuration

[root@localhost utils]# vim /etc/redis/6379.conf
70 #bind 127.0.0.1	##注释掉监听地址
89 protected-mode no	##关闭保护模式
93 port 6379	##端口还是6379
137 daemonize yes	##独立启动进程
700 appendonly yes	##开启aof持久化
833 cluster-enabled yes	##开启群集功能,取消注释
841 cluster-config-file nodes-6379.conf	##群集文件名称,取消注释
847 cluster-node-timeout 15000	##群集超时时间设置,取消注释
[root@localhost utils]# vim /etc/redis/6379.conf 
[root@localhost utils]# cd /var/lib/redis/6379/
[root@localhost 6379]# service redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost 6379]# ls
appendonly.aof  dump.rdb  nodes-6379.conf

Installez rvm et RUBY sur un serveur principal

[root@localhost 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3	##密钥文件导入
[root@localhost 6379]# cd /bao/
[root@localhost bao]# rz -E
rz waiting to receive.
[root@localhost bao]# ls
redis-5.0.7  redis-5.0.7.tar.gz  rvm-installer.sh
[root@localhost bao]# chmod +x rvm-installer.sh 
[root@localhost bao]# ./rvm-installer.sh		##这个下的太慢了,我直接拿的下好的
[root@localhost bao]# ./rvm-installer.sh
[root@localhost bao]# source /etc/profile.d/rvm.sh
[root@localhost bao]# rvm list known		##列出可安装版本
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.10]
[ruby-]2.5[.8]
[ruby-]2.6[.6]
[ruby-]2.7[.1]
ruby-head

# for forks use: rvm install ruby-head-<name> --url https://github.com/github/ruby.git --branch 2.2

# JRuby
jruby-1.6[.8]
jruby-1.7[.27]
jruby-9.1[.17.0]
jruby[-9.2.13.0]
jruby-head

# Rubinius
rbx-1[.4.3]
rbx-2.3[.0]
rbx-2.4[.1]
rbx-2[.5.8]
rbx-3[.107]
rbx-4[.20]
rbx-5[.0]
rbx-head

# TruffleRuby
truffleruby[-20.2.0]

# Opal
opal

# Minimalistic ruby implementation - ISO 30170:2012
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
mruby-1.3.0
mruby-1[.4.1]
mruby-2.0.1
mruby-2[.1.1]
mruby[-head]

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]

# Topaz
topaz

# MagLev
maglev-1.0.0
maglev-1.1[RC1]
maglev[-1.2Alpha4]
maglev-head

# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head

# IronRuby
ironruby[-1.1.3]
ironruby-head

[root@localhost bao]# rvm install 2.4.1		##安装 2.4.1版本
[root@localhost bao]# ruby -v	##查看版本信息
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
[root@localhost bao]#  gem install redis	##再次安装 redis

Configurez le cluster sur le serveur maître.
Ici, vous pouvez voir les nœuds maître et esclave.

[root@localhost network-scripts]# redis-cli --cluster create 20.0.0.11:6379 20.0.0.12:6379 20.0.0.21:6379 20.0.0.22:6379 20.0.0.23:6379 20.0.0.24:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 20.0.0.23:6379 to 20.0.0.11:6379
Adding replica 20.0.0.24:6379 to 20.0.0.12:6379
Adding replica 20.0.0.22:6379 to 20.0.0.21:6379
M: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.11:6379
   slots:[0-5460] (5461 slots) master
M: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.12:6379
   slots:[5461-10922] (5462 slots) master
M: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.21:6379
   slots:[10923-16383] (5461 slots) master
S: 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff 20.0.0.22:6379
   replicates 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff
S: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.23:6379
   replicates 32dfc6ddc0b9b11a5761468cd56be4bc4d932eff
S: da81b568b82ec8d2e65967a4c3ed6550aa59b42d 20.0.0.24:6379
   replicates da81b568b82ec8d2e65967a4c3ed6550aa59b42d
Can I set the above configuration? (type 'yes' to accept): yes		##手敲yes

Vérification expérimentale

Commencer la vérification

[root@localhost network-scripts]# redis-cli -h 20.0.0.11 -p 6379 -c
20.0.0.11:6379> set gundam EXIA
OK
20.0.0.11:6379> keys *
1) "gundam"


[root@localhost network-scripts]# redis-cli -h 20.0.0.23 -p 6379 -c	##另一台机器,验证“主从”
20.0.0.23:6379> keys *
1) "gundam"
20.0.0.23:6379> get gundam
"EXIA"

Vérifier la suppression automatique

[root@localhost network-scripts]# redis-cli -h 20.0.0.11 -p 6379 -c
20.0.0.11:6379> EXPIRE gundam 5		##五秒后删除这个键
(integer) 1
##五秒后
20.0.0.11:6379> keys *
(empty list or set)

##另一台机器
20.0.0.23:6379> keys *	##另一台机器也没了
(empty list or set)

Erreur MOVED

Si cette erreur se produit lorsque vous créez la clé, quittez, ajoutez l'option -c lors de la saisie, -c signifie pour démarrer le mode cluster
(erreur) MOVED 5798127.0.0.1:7001

redis-cli -h 20.0.0.12 -p 6379 -c

Remarque: si un maître est en panne, l'esclave correspondant deviendra le maître au-dessus des deux, et le service sera utilisé normalement. Si le maître et l'esclave correspondants tombent en panne, votre cluster sera parti ...

Je suppose que tu aimes

Origine blog.csdn.net/Ora_G/article/details/108490235
conseillé
Classement