Redis de alta disponibilidad (replicación maestro-esclavo, modo centinela y clúster de clúster)

Tabla de contenido

1. Alta disponibilidad de Redis

1. Persistencia

2. Replicación maestro-esclavo

3. centinela

4. Clúster Clúster

2. Replicación maestro-esclavo

1. Concepto

2. Función

3. Proceso de replicación maestro-esclavo

4. Configurar la replicación maestro-esclavo

3. Modo centinela

1. Función

2. Función

3. Composición

4. Mecanismo de conmutación por error

5. Base para la elección del nodo maestro

6. Configurar el modo centinela

7. Simulación de fallas

8. Restauración del nodo fallido

Cuatro, racimo racimo

1. Introducción

2. Función

(1) Partición de datos

(2) Alta disponibilidad

3. El principio de fragmentación de datos

4. Modelo de replicación maestro-esclavo del clúster de Redis

5. Cree un clúster de clúster de redis


1. Alta disponibilidad de Redis

        En los servidores web, la alta disponibilidad se refiere al tiempo en que se puede acceder normalmente al servidor, y la medida es cuánto tiempo se pueden proporcionar los servicios normales. (99,9 %, 99,99 %, 99,999 %, etc.)

La fórmula de cálculo para la alta disponibilidad es 1-(tiempo de inactividad)/(tiempo de inactividad+tiempo de ejecución), que es algo similar a la tasa de error de bits de los parámetros de transmisión de la red. Usamos el número 9 para representar la disponibilidad.

2 nueves: 99%=1%365=3.6524h=87.6h

4 nueves: 99.99%=0.01%36524*60=52.56min

5 nueves: 99.999%=0.001%*365=5.265min

11 nueves: casi un año de inactividad en solo unos minutos

        Sin embargo, en el contexto de Redis, el significado de alta disponibilidad parece ser más amplio: además de garantizar la prestación de servicios normales (como separación maestro-esclavo, tecnología de recuperación rápida ante desastres), también es necesario considerar la expansión de capacidad de datos y seguridad de datos sin pérdida.

        En Redis, las tecnologías para lograr una alta disponibilidad incluyen principalmente persistencia, replicación maestro-esclavo, centinelas y clústeres de clúster.

1. Persistencia

       La persistencia es el método de alta disponibilidad más simple (a veces ni siquiera se clasifica como un método de alta disponibilidad), su función principal es la copia de seguridad de datos, es decir, almacenar datos en el disco duro para garantizar que los datos no se perderán debido al proceso. salida.

2. Replicación maestro-esclavo

        La replicación maestro-esclavo es la base de Redis de alta disponibilidad, y los centinelas y los clústeres se basan en la replicación maestro-esclavo para lograr una alta disponibilidad. La replicación maestro-esclavo implementa principalmente copias de seguridad de datos en varias máquinas, así como equilibrio de carga para operaciones de lectura y recuperación de fallas simple.

Defectos: la recuperación de fallas no se puede automatizar; las operaciones de escritura no se pueden equilibrar en la carga; la capacidad de almacenamiento está limitada por una sola máquina.

3. centinela

        Sobre la base de la replicación maestro-esclavo, Sentinel realiza la recuperación automática de fallas del nodo maestro, pero no puede conmutar por error automáticamente el nodo esclavo. En el escenario de separación de lectura y escritura, la falla del nodo esclavo hará que el servicio de lectura sea indisponible.

Defectos: las operaciones de escritura no pueden equilibrarse con la carga; la capacidad de almacenamiento está limitada por una sola máquina; se requiere monitoreo adicional de los nodos esclavos.

4. Clúster Clúster

        A través del clúster, Redis resuelve el problema de que la operación de escritura no puede equilibrarse con la carga y la capacidad de almacenamiento está limitada por una sola máquina, y realiza una solución de alta disponibilidad relativamente completa.

Desventajas: Impacto en los requisitos de costos y recursos.

2. Replicación maestro-esclavo

1. Concepto

        La replicación maestro-esclavo se refiere a copiar los datos de un servidor Redis a otros servidores Redis. El primero se denomina nodo maestro Maestro, y el segundo se denomina nodo esclavo Esclavo;

        La replicación de datos es unidireccional, solo del nodo maestro al nodo esclavo

        De forma predeterminada, cada servidor de Redis es un nodo maestro y un nodo maestro puede tener varios nodos esclavos (o ningún nodo esclavo), pero un nodo esclavo Solo puede ser un nodo maestro.

2. Función

(1) Redundancia de datos: la replicación maestro-esclavo implementa una copia de seguridad activa de los datos, que es un método de redundancia de datos distinto de la persistencia.

(2) Recuperación de fallas: cuando el nodo maestro tiene un problema, el nodo esclavo puede proporcionar servicios para lograr una rápida recuperación de fallas; en realidad, es un tipo de redundancia de servicio.

(3) Equilibrio de carga: sobre la base de la replicación maestro-esclavo, combinada con la separación de lectura y escritura, el nodo maestro puede proporcionar servicios de escritura y los nodos esclavos pueden proporcionar servicios de lectura (es decir, la aplicación se conecta al nodo maestro cuando escribir datos de Redis, y la aplicación se conecta al leer datos de Redis. Nodos esclavos) para compartir la carga del servidor; especialmente en el escenario de escribir menos y leer más, compartir la carga de lectura a través de múltiples nodos esclavos puede aumentar considerablemente la concurrencia del servidor Redis .

(4) La piedra angular de la alta disponibilidad: además de las funciones anteriores, la replicación maestro-esclavo también es la base para la implementación de centinelas y clústeres. Por lo tanto, la replicación maestro-esclavo es la base para la alta disponibilidad de Redis.

3. Proceso de replicación maestro-esclavo

(1) Si se inicia un proceso de máquina esclava, enviará un comando de "comando de sincronización" a la máquina maestra para solicitar una conexión síncrona.

(2) Ya sea la primera conexión o la reconexión, la máquina Maestra iniciará un proceso en segundo plano para guardar la instantánea de datos en el archivo de datos (ejecutar la operación rdb), y la Maestra también registrará todos los comandos para modificar los datos y la memoria caché. en el medio del archivo de datos. 

(3) Después de que el proceso en segundo plano complete la operación de caché, la máquina maestra enviará el archivo de datos a la máquina esclava, la máquina esclava guardará el archivo de datos en el disco duro y luego lo cargará en la memoria, y luego la máquina maestra máquina modificará todos los archivos de datos La operación también se envía a la máquina esclava. Si el esclavo falla y provoca un tiempo de inactividad, se volverá a conectar automáticamente después de volver a la normalidad.

(4) Después de que la máquina maestra recibe la conexión de la máquina esclava, envía su archivo de datos completo a la máquina esclava. Si la máquina maestra recibe solicitudes de sincronización de varios esclavos al mismo tiempo, la maestra iniciará un proceso en segundo plano para guarde el archivo de datos y luego envíelo a todas las máquinas esclavas, asegúrese de que todas las máquinas esclavas sean normales.

4. Configurar la replicación maestro-esclavo

Nodo maestro: 192.168.116.40

Nodo esclavo: 192.168.116.50

Nodo esclavo: 192.168.116.60

Modificación del archivo de configuración del nodo maestro y esclavo

vim /etc/redis/6379.conf

#70行,每台添加本机的地址
bind 127.0.0.1 192.168.116.40

#700行,开启AOF
appendonly yes

añadir desde el nodo

vim /etc/redis/6379.conf

#288行,指定master
replicaof 192.168.116.40 6379

Verifique el registro y descubra que el maestro y el esclavo han sincronizado completamente los datos RDB 

Ejecute la replicación de información para ver la información de sincronización

Principalmente agregar datos, probar una sincronización

Verifique si el nodo esclavo tiene estos datos (si los hay, la sincronización es exitosa)

3. Modo centinela

1. Función

        Basado en la replicación maestro-esclavo, Sentinel presenta la conmutación por error automática del nodo maestro.

2. Función

        Monitoreo: Sentry verifica constantemente que los nodos maestro y esclavo funcionen correctamente.

        Conmutación por error automática: cuando el nodo maestro no funciona con normalidad, Sentinel iniciará una operación de conmutación por error automática. Actualizará uno de los nodos esclavos del nodo maestro fallido a un nuevo nodo maestro y permitirá que otros nodos esclavos copien el nuevo nodo maestro en su lugar. .

        Notificaciones: Sentry puede enviar resultados de conmutación por error a los clientes.

3. Composición

        Nodo centinela: el sistema centinela consta de uno o más nodos centinela, que son nodos redis especiales que no almacenan datos.

        Nodos de datos: tanto los nodos maestros como los esclavos son nodos de datos.

4. Mecanismo de conmutación por error

(1) El nodo centinela monitorea regularmente para averiguar si el nodo maestro está defectuoso, y cada nodo centinela enviará un comando ping al nodo maestro, al nodo esclavo y a otros nodos centinela cada 1 segundo para una prueba de latido . Si el nodo maestro no responde dentro de un cierto período de tiempo o responde con un mensaje de error, entonces el centinela pensará subjetivamente que el nodo maestro está fuera de línea (unilateralmente); cuando más de la mitad de los nodos centinela piensan que el nodo maestro está subjetivamente fuera de línea, esto es objetivamente fuera de línea.

(2) Cuando el nodo maestro falla, el nodo centinela implementará el mecanismo de elección a través del algoritmo Raft (algoritmo de elección) para elegir conjuntamente un nodo centinela como líder que se encargará de manejar la conmutación por error y la notificación del nodo maestro. Por lo tanto, la cantidad de clústeres que ejecutan Sentinels no debe ser inferior a 3 nodos.

(3) La conmutación por error la realiza el nodo centinela líder, el proceso es el siguiente

        Actualice un nodo esclavo a un nuevo nodo maestro y deje que otros nodos esclavos apunten al nuevo nodo maestro; si el nodo maestro original se recupera, también se convertirá en un nodo esclavo y apuntará al nuevo nodo maestro; notifique al cliente que el nodo maestro el nodo ha sido reemplazado.

Es importante tener en cuenta que el objetivo fuera de línea es un concepto exclusivo del nodo principal; si un nodo esclavo o un nodo centinela fallan y el centinela lo desconecta subjetivamente, no habrá operaciones posteriores de conmutación por error y fuera de línea del objetivo.

5. Base para la elección del nodo maestro

  • Filtre los nodos esclavos en mal estado (fuera de línea) que no respondan a las respuestas de ping centinela.
  • Seleccione el nodo esclavo con la configuración de mayor prioridad en el archivo de configuración. (prioridad de réplica, el valor predeterminado es 100)
  • Seleccione el nodo esclavo con el desplazamiento de replicación más grande, es decir, la replicación más completa.
     

6. Configurar el modo centinela

En primer lugar, la replicación maestro-esclavo debe hacerse bien, y la parte anterior se ha completado.

Copie y modifique el archivo de configuración de Sentinel

cp /opt/redis-5.0.7/sentinel.conf /etc/redis/
cd /etc/redis/
vim sentinel.conf
#关闭保护模式
protected-mode no
#默认端口
port 26379
#打开后台运行
daemonize yes
#指定哨兵的pid和日志文件
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
#指定redis数据文件
dir "/var/lib/redis/6379"
#指定哨兵模式主节点(2代表最少两个哨兵主观认为主宕机,才是客观宕机)
sentinel monitor mymaster 192.168.116.40 6379 2
#判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 10000
#同一个sentinel对同一个master两次故障恢复之间的间隔时间(180秒)
sentinel failover-timeout mymaster 180000

Copie el archivo modificado al nodo esclavo y reinicie el servicio

#在主节点的/etc/redis/下执行远程传输
scp sentinel.conf 192.168.116.50:`pwd`
scp sentinel.conf 192.168.116.60:`pwd`

#从节点重启服务加载配置
service redis restart

Iniciar modo centinela

#主从都执行
/usr/local/redis/bin/redis-sentinel sentinel.conf

Ver información del modo centinela

7. Simulación de fallas

Primero rastree el registro centinela, que muestra que el maestro-esclavo es normal

Cierre el servicio redis del nodo maestro y verifique si la conmutación por error está completa

Verifique la información en el nuevo nodo maestro

Ver archivos de configuración de nodos esclavos 

8. Restauración del nodo fallido

Restaure el nodo maestro de tiempo de inactividad original para ver si puede unirse al nodo esclavo

ver archivo de configuración

¡Recuperación exitosa! 

Cuatro, racimo racimo

1. Introducción

        Cluster, a saber, Redis Cluster, es una solución de almacenamiento distribuido introducida por Redis 3.0.

        El clúster consta de varios grupos de nodos (nodos) y los datos de Redis se distribuyen entre estos nodos. Los nodos del clúster se dividen en nodos maestros y nodos esclavos: solo el nodo maestro es responsable del mantenimiento de las solicitudes de lectura y escritura y de la información del clúster; los nodos esclavos solo replican los datos y la información de estado del nodo maestro.

2. Función

(1) Partición de datos

        La partición de datos es la función principal del clúster. El clúster distribuye datos a múltiples nodos. Por un lado, supera la limitación del tamaño de la memoria de una sola máquina de Redis y la capacidad de almacenamiento aumenta considerablemente. Por otro lado, cada nodo maestro puede proporcionar servicios externos de lectura y escritura. lo que mejora en gran medida la capacidad de respuesta del clúster.

        La limitación del tamaño de la memoria independiente de Redis se menciona en la introducción de la persistencia y la replicación maestro-esclavo. Por ejemplo, si la memoria independiente es demasiado grande, la operación de bifurcaciones de bgsave y bgrewriteaof puede hacer que el proceso maestro se bloquee. entorno maestro-esclavo, el host puede cambiar Como resultado, el nodo esclavo no puede proporcionar servicios durante mucho tiempo, y el área del búfer de replicación del nodo maestro puede desbordarse durante la fase de replicación completa.

(2) Alta disponibilidad

        El clúster admite la replicación maestro-esclavo y la conmutación por error automática del nodo principal (similar a Sentinel). Cuando falla cualquier nodo, el clúster aún puede proporcionar servicios externos.

3. El principio de fragmentación de datos

        El clúster de Redis introduce el concepto de ranuras de hash. El clúster de Redis tiene 16384 ranuras de hash (numeradas del 0 al 16383). Cada nodo del clúster es responsable de una parte de las ranuras de hash.

Tome un clúster compuesto por 3 nodos como ejemplo

        El nodo A contiene ranuras hash 0~5460

        El nodo B contiene ranuras hash 5461 ~ 10922

        El nodo C contiene ranuras hash 10923 ~ 16383

        Cada clave genera un valor a través del algoritmo CRC16, y usa este valor para obtener el resto de 16384, qué intervalo de ranura hash del nodo se usa para determinar qué ranura hash del nodo colocar, y luego salta directa y automáticamente a esta operación de acceso correspondiente. se realiza en el nodo
.

4. Modelo de replicación maestro-esclavo del clúster de Redis

        Por ejemplo, hay tres nodos en el clúster A, B y C. Si falla el nodo B, todo el clúster no estará disponible debido a la falta de ranuras en el rango de 5461-10922.

        Por lo tanto, agregue un nodo esclavo A1, B1 y C1 a cada nodo, y todo el clúster constará de tres nodos maestros y tres nodos esclavos. Después de que falla el nodo B, el clúster elige a B1 como el nodo maestro para continuar sirviendo; cuando ambos B y B1 Después de una falla, el clúster no estará disponible.

5. Cree un clúster de clúster de redis

        Por lo general, un clúster necesita 3 pares, un maestro y un esclavo. Para facilitar la demostración, aquí se usa el puerto 6001-6004 de un host redis para simular 6 instancias de redis diferentes.

Cree un directorio para cada nodo redis y copie los archivos necesarios

mkdir -p redis-cluster/redis600{1..6}

#批量复制所需文件到6个目录下
cd /opt/redis-5.0.7/
for i in {1..6};do cp /opt/redis-5.0.7/redis.conf /etredis600$i;cp /opt/redis-5.0.7/src/redis-server /opt/redis-5.0.7/src/redis-cli /etredis600$i;done

Modifique los archivos de configuración de 6 instancias y luego ábralos todos

#先修改一个,再复制给其他的,修改端口和文件名序号即可
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#修改以下字段,其他可自行修改
bind 0.0.0.0    #为实验方便监听所有
protected-mode no    #关闭保护模式
port 6001    #监听端口(每台需要不一样6001-6002)
daemonize yes    #打开后台运行
appendonly yes    #打开aof
cluster-enabled yes    #开启集群模式
cluster-config-file nodes-6001.conf    #集群节点配置文件名(每台需要不一样6001-6002)
cluster-node-timeout 15000    #集群故障监听超时时间

#开启所有
for i in {1..6};do cd /etc/redis/redis-cluster/redis600$i;./redis-server redis.conf;done    

#开启cluster模式         
./redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.6005 127.0.0.1:6006 --cluster-replicas 1
#结尾的选项1,代表每个主有1个从节点                                                  

Puede usar ranuras de clúster en la base de datos para ver la información del clúster

Pruebe la inserción de datos (agregue la opción -c al iniciar sesión, de lo contrario, el nodo no se puede cambiar automáticamente)

Supongo que te gusta

Origin blog.csdn.net/wlc1213812138/article/details/131984851
Recomendado
Clasificación