Construcción del clúster Redis (modo clúster)

Tabla de contenido

1. ¿Qué es un clúster?

2. ¿Por qué utilizar?

3. Conexión de clúster

4. ¿Cómo asigna el clúster Redis estos seis nodos?

5. Construcción de clusters:


1. ¿Qué es un clúster?

  1. El clúster de Redis (incluidos muchos clústeres pequeños) implementa la expansión horizontal de Redis, es decir, inicia N nodos de Redis, distribuye y almacena toda la base de datos en estos N nodos, y cada nodo almacena 1/N de los datos totales, es decir, un clúster pequeño Almacena datos 1/N y cada clúster pequeño mantiene sus propios datos 1/N.
  2. El clúster de Redis proporciona un cierto grado de disponibilidad a través de la partición: incluso si algunos nodos del clúster fallan o no pueden comunicarse, el clúster puede continuar procesando solicitudes de comando.
  3. Las características del clúster redis en este modo son: divide y vencerás, fragmentación.

2. ¿Por qué utilizar?

  1. La capacidad no es suficiente, ¿cómo expandir redis?

  2. ¿Cómo asigna Redis operaciones de escritura simultáneas?

  3. Además, el modo maestro-esclavo, el modo antorcha, el tiempo de inactividad del host, lo que resulta en cambios en la dirección IP, la configuración en la aplicación necesita modificar la dirección del host correspondiente, el puerto y otra información.

  4. Anteriormente se resolvió mediante un host proxy, pero se proporciona una solución en redis3.0. Es una configuración de clúster descentralizada.

3. Conexión de clúster

  1. Inicie sesión en modo normal: puede ingresar directamente al host de lectura y, al almacenar datos, habrá una operación de redirección MOVER, por lo que debe iniciar sesión en modo clúster.
  2. Inicio de sesión del clúster: redis-cli -c -p 6379 Utilice la política del clúster para conectarse y los datos de configuración se cambiarán automáticamente al host de escritura correspondiente.

4. ¿Cómo asigna el clúster Redis estos seis nodos?

  1. Un clúster debe tener al menos tres nodos maestros.

  2. Opción --cluster-replicas 1: Indica que queremos crear un nodo esclavo para cada nodo maestro en el clúster.

  3. El principio de asignación intenta garantizar que cada base de datos maestra se ejecute en una dirección IP diferente y que cada base de datos esclava y maestra no estén en la misma dirección IP.

5. Construcción de clusters:

1) Cree 6 nodos de Redis diferentes a través del archivo de ejecución ./install_server.sh en la ruta de utilidades en Redis, y los números de puerto son 6379, 6380, 6381, 8362, 6383, 6384.

2) Si cada nodo almacenó datos originalmente, primero borre los archivos de datos de cada nodo. Elimine todos los archivos en las 6 carpetas.

Vacíe el directorio de datos. Elimine todos los archivos en el directorio de datos de Redis. Utilice el comando: rm -rf /ruta/a/redis/data/*

3) Modificar los archivos de configuración de 6 nodos redis

En el archivo /etc/redis, busque el archivo de configuración correspondiente a cada número de puerto:

Por ejemplo, el contenido modificado es el siguiente:
bind 0.0.0.0
port 6380 # Establecer en el número de puerto específico del servicio correspondiente
daemonize sí
dbfilename "dump6380.rdb" # Establecer en el nombre específico del servicio correspondiente
appendonly sí
cluster-enabled sí
cluster -config-file nodes- 6380.conf # configurado en el servicio correspondiente exclusivo

 4) Iniciar seis nodos

[root@bogon src]# ./redis-server /etc/redis/6379.conf
[root@bogon src]# ./redis-server /etc/redis/6380.conf
[root@bogon src]# ./redis-server /etc/redis/6381.conf
[root@bogon src]# ./redis-server /etc/redis/6382.conf
[root@bogon src]# ./redis-server /etc/redis/6383.conf
[root@bogon src]# ./redis-server /etc/redis/6384.conf

5) Compruebe si cada nodo se inicia correctamente  

[root@bogon src]# ps -ef | grep redis
root        3889       1  0 09:56 ?        00:00:03 ./redis-server 0.0.0.0:6379 [cluster]
root        3895       1  0 09:56 ?        00:00:03 ./redis-server 0.0.0.0:6380 [cluster]
root        3901       1  0 09:57 ?        00:00:03 ./redis-server 0.0.0.0:6381 [cluster]
root        3907       1  0 09:57 ?        00:00:02 ./redis-server *:6382 [cluster]
root        3913       1  0 09:57 ?        00:00:02 ./redis-server 0.0.0.0:6383 [cluster]
root        3919       1  0 09:57 ?        00:00:02 ./redis-server 0.0.0.0:6384 [cluster]
root        4247    2418  0 10:22 pts/0    00:00:00 grep --color=auto redis

6) Configurar el clúster

Formato de comando: --cluster-replicas 1 significa crear un nodo esclavo para cada maestro

Nota: La IP aquí es la IP real de la máquina donde se encuentra cada nodo.  

[root@localhost src]# ./redis-cli --cluster create 192.168.177.128:6379 192.168.177.128:6380 192.168.177.128:6381 192.168.177.128:6382 192.168.177.128:6383 192.168.177.128:6384 --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 192.168.177.128:6383 to 192.168.177.128:6379
Adding replica 192.168.177.128:6384 to 192.168.177.128:6380
Adding replica 192.168.177.128:6382 to 192.168.177.128:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
   slots:[0-5460] (5461 slots) master
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
   slots:[5461-10922] (5462 slots) master
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
   slots:[10923-16383] (5461 slots) master
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
   replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
   replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
   replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 192.168.177.128:6379)
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
   slots: (0 slots) slave
   replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
   slots: (0 slots) slave
   replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
   slots: (0 slots) slave
   replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

7) Ver la relación maestro-esclavo

Formato de comando: redis-cli --cluster check [IP propia de Redis]: [puerto propio de Redis]

[root@localhost src]# ./redis-cli --cluster check 192.168.177.128:6379
192.168.177.128:6379 (ae77569d...) -> 0 keys | 5461 slots | 1 slaves.
192.168.177.128:6381 (dcd5d506...) -> 0 keys | 5461 slots | 1 slaves.
192.168.177.128:6380 (5ccafb9e...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.177.128:6379)
M: ae77569d28f01657d9e3e04810e8562abdb3f5dd 192.168.177.128:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: dcd5d5066cd9aa5e3f2830ce985395acb978d764 192.168.177.128:6381
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 5ccafb9ee2f223c987c740d3d8282f200e4892dd 192.168.177.128:6380
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 8849bb5437931a3fd8510ffa4c0f755f4e26d1eb 192.168.177.128:6382
   slots: (0 slots) slave
   replicates ae77569d28f01657d9e3e04810e8562abdb3f5dd
S: b00800f65775c52519bd6e9f398f916ffe46fed8 192.168.177.128:6383
   slots: (0 slots) slave
   replicates 5ccafb9ee2f223c987c740d3d8282f200e4892dd
S: 6e7a1ae63691267b000363f6528b620a656e03e7 192.168.177.128:6384
   slots: (0 slots) slave
   replicates dcd5d5066cd9aa5e3f2830ce985395acb978d764
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

Al observar la siguiente figura, puede encontrar que un maestro es un esclavo: 

8) Prueba de escritura de datos del nodo maestro

Agregue el parámetro -c para evitar errores de enrutamiento

[root@bogon src]# ./redis-cli -p 6381 -c
127.0.0.1:6381> get name
-> Redirected to slot [5798] located at 192.168.109.149:6380
(nil)
192.168.109.149:6380> get name
(nil)
192.168.109.149:6380>

9) Leer prueba de datos del nodo

Situación: el nodo esclavo en el clúster de Redis puede copiar con éxito los datos de la ranura de datos del nodo maestro, pero no puede obtener los datos y la pantalla solo se puede leer desde el nodo maestro correspondiente.

Motivo: la configuración predeterminada oficial para los nodos esclavos en el clúster de Redis Cluster no es compartir la solicitud de lectura y solo se usa para respaldo y conmutación por error. Cuando hay una solicitud para leer desde el nodo esclavo, se redirigirá a el nodo maestro correspondiente para su procesamiento

Solución: utilice el comando readonly antes de obtener datos. Este comando readonly le indica a Redis Cluster que el cliente del nodo esclavo está dispuesto a leer datos potencialmente obsoletos y no está interesado en solicitudes de escritura.

Nota: el solo lectura no será válido después de la desconexión y deberá usar este comando nuevamente para conectarse nuevamente.

[root@bogon src]# ./redis-cli -p 6379 -c
127.0.0.1:6379> set name zhangsan
-> Redirected to slot [5798] located at 192.168.109.149:6380
OK
192.168.109.149:6380> get name
"zhangsan"
192.168.109.149:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> get name
-> Redirected to slot [5798] located at 192.168.109.149:6380
"zhangsan"
192.168.109.149:6380>
[root@bogon src]# ./redis-cli -p 6383 -c
127.0.0.1:6383> readonly
OK
127.0.0.1:6383> get name
"zhangsan"
127.0.0.1:6383>

Supongo que te gusta

Origin blog.csdn.net/Microhoo_/article/details/130561088
Recomendado
Clasificación