Construcción del clúster de Redis y error MOVED

Por qué crear un clúster de Redis

Debido a que un solo nodo puede fallar
, se bloqueará al procesar una gran cantidad de solicitudes simultáneas.
Si un solo nodo está inactivo, los datos se pierden fácilmente

Entonces, para crear un clúster de redis
Inserte la descripción de la imagen aquí

Redis tiene tres modos de clúster

Modo maestro-esclavo

  • La base de datos maestra puede realizar operaciones de lectura y escritura. Cuando las operaciones de lectura y escritura provocan cambios en los datos, los datos se sincronizarán automáticamente con la base de datos esclava.
  • La base de datos esclava es generalmente de solo lectura y recibe datos sincronizados de la base de datos maestra
  • Un maestro puede tener varios esclavos, pero un esclavo solo puede corresponder a un maestro
  • El esclavo cuelga y no afecta la lectura y escritura de otros esclavos y el maestro, después de reiniciar, los datos se sincronizarán desde el maestro.
  • Una vez que el maestro se cuelga, no afecta la lectura del esclavo, pero redis ya no proporciona servicios de escritura. Una vez que el maestro se reinicia, redis proporcionará servicios de escritura externos nuevamente.
  • Después de que el maestro cuelga, no volverá a seleccionar un maestro en el nodo esclavo

Modo centinela

  • El modo centinela se basa en el modo maestro-esclavo. Si solo hay un nodo de Redis, centinela no tiene sentido
  • Cuando el maestro cuelga, sentinel seleccionará a uno de los esclavos como maestro y modificará sus archivos de configuración. Los archivos de configuración de otros esclavos también serán modificados. Por ejemplo, el atributo slaveof apuntará al nuevo maestro.
  • Cuando el maestro se reinicia, ya no será el maestro sino como esclavo para recibir los datos de sincronización
    centinela del nuevo maestro. Debido a que también es un proceso que puede bloquearse, el centinela también iniciará múltiples para formar un grupo centinela
  • Cuando se configuran varios centinelas, los centinelas también se supervisarán automáticamente
  • Cuando la contraseña se configura en el modo maestro-esclavo, Sentinel también modificará sincrónicamente la información de configuración en el archivo de configuración, por lo que no tiene que preocuparse por eso.
    Un centinela o un grupo centinela puede administrar múltiples Redis maestro-esclavo, y varios centinelas también pueden monitorear los mismos Redis.
  • Es mejor no implementar Sentinel en la misma máquina que Redis; de lo contrario, después de que el servidor Redis se cuelga, Sentinel también se bloquea

Modo de grupo

  • Interconexión de red de múltiples nodos redis e intercambio de datos
  • Todos los nodos son un maestro y un esclavo (o un maestro y varios esclavos), que nunca brindan servicios, solo sirven como respaldo
  • No admite el procesamiento de varias claves al mismo tiempo (como MSET / MGET), porque redis necesita distribuir uniformemente las claves en cada nodo
  • La creación de pares clave-valor al mismo tiempo con alta simultaneidad reducirá el rendimiento y provocará un comportamiento impredecible.
  • Admite la adición y eliminación en línea de nodos
  • El cliente puede conectarse a cualquier nodo maestro para leer y escribir.

Fragmentación de datos de clúster

  • No introdujo HASH consistente, pero introdujo el concepto de ranura hash (ranura hash)
  • 16384 ranuras hash por clúster
  • Después de que CRC16 verifica cada clave, la ranura hash se utiliza para determinar la ranura
  • Cada nodo del clúster es responsable de una parte de la ranura hash

¡Dale! ¡Mostrar! !

Estamos usando el modo de clúster

  1. El modo centinela puede satisfacer básicamente las necesidades de producción general y tiene alta disponibilidad. Pero cuando la cantidad de datos es demasiado grande para que la almacene un servidor, el modo maestro-esclavo o el modo centinela no pueden satisfacer la demanda. En este momento, los datos almacenados deben fragmentarse y almacenarse en varias instancias de Redis. La aparición del modo de clúster es resolver el problema de la capacidad limitada de un solo Redis, y los datos de Redis se distribuyen a múltiples máquinas de acuerdo con ciertas reglas.
  2. Se puede decir que el clúster es una combinación de modo centinela y maestro-esclavo. La función de reselección maestro-esclavo y maestro se puede realizar a través del clúster, por lo que si configura dos copias y tres fragmentos, necesitará seis instancias de Redis. Debido a que los datos de Redis se asignan a diferentes máquinas en el clúster de acuerdo con ciertas reglas, cuando la cantidad de datos es demasiado grande, se pueden agregar nuevas máquinas para la expansión.
  3. Para usar un clúster, solo necesita abrir la configuración habilitada para clústeres en el archivo de configuración de redis. Cada clúster requiere al menos tres bases de datos principales para ejecutarse con normalidad y es muy conveniente agregar nodos.

Parámetros experimentales

La IP de los seis servidores es
20.0.0.11
20.0.0.12
20.0.0.21
20.0.0.22
20.0.0.23
20.0.0.24

Configuración experimental

Los seis hosts necesitan instalar 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

Modificar el archivo de configuración

[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

Instale rvm y RUBY en un servidor 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

Configure el clúster en el servidor maestro.
Aquí puede ver los nodos maestro y esclavo.

[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

Verificación experimental

Iniciar verificación

[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"

Verificar la eliminación automática

[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)

Error MOVED

Si este error ocurre cuando crea la clave, salga, agregue la opción -c al ingresar, -c significa iniciar el modo de clúster
(error) MOVED 5798127.0.0.1:7001

redis-cli -h 20.0.0.12 -p 6379 -c

Nota: Si un maestro no funciona, el esclavo correspondiente se convertirá en el maestro además de los dos y el servicio se utilizará normalmente. Si el maestro y el esclavo correspondientes caen, su clúster desaparecerá ...

Supongo que te gusta

Origin blog.csdn.net/Ora_G/article/details/108490235
Recomendado
Clasificación