Combate de casos de bases de datos NoSQL - solución de alta disponibilidad de Redis - Redis + sentinel

Solución de alta disponibilidad de Redis - Redis + Sentinel

Prefacio

Este entorno se basa en el sistema Centos 7.8 para crear un entorno de aprendizaje de Redis. Para
una construcción específica, consulte Redis-5.0.9 Implementación del entorno

La sincronización maestro-esclavo de Redis resuelve el problema de la redundancia de datos, pero en varios nodos de Redis, cuando el nodo maestro deja de funcionar, la colección de servidores de Redis se paralizará. Este problema debe resolverse mediante la solución de alta disponibilidad de Redis.
A continuación, me centraré en la solución de alta disponibilidad de Redis: Redis Sentinel


Solución de alta disponibilidad de Redis

  • Replicación maestro-esclavo (modo Replication-Sentinel)
  • Clúster de Redis (modo Redis-Cluster)

1. ¿Qué es un centinela?

Que es un centinela

Sentinel, el nombre en inglés de Sentinel, es un sistema distribuido que se utiliza para monitorear cada servidor en la estructura maestro-esclavo. Cuando el nodo maestro falla, el nuevo nodo maestro se selecciona a través del mecanismo de votación y todos los nodos esclavos se conectan al nuevo nodo maestro.

Sentinel Sentinel es una solución de alta disponibilidad proporcionada oficialmente por redis, que se puede usar para monitorear el estado de ejecución de múltiples instancias del servicio Redis.
Redis Sentinel es un servidor Redis que se ejecuta en un modo especial. Redis Sentinel trabaja de manera cooperativa en el entorno de múltiples procesos de Sentinel.

El papel del centinela

  • Monitoreo: el centinela verificará constantemente si su maestro y esclavo funcionan correctamente.
  • Notificación: cuando hay un problema con un Redis monitoreado, el centinela puede enviar notificaciones al administrador u otras aplicaciones a través de la API.
  • Conmutación por error automática: cuando un maestro no funciona normalmente, el centinela iniciará una operación de conmutación por error automática, que actualizará uno de los esclavos del maestro fallido al nuevo maestro y permitirá que los otros esclavos del maestro fallido copien el nuevo maestro en su lugar. ; cuando el cliente intenta conectarse al maestro fallido, el clúster también devolverá la dirección del nuevo maestro al cliente, de modo que el clúster pueda utilizar el maestro en lugar del maestro fallido.

Arquitectura centinela

Inserte la descripción de la imagen aquí
Múltiples maestros de monitoreo centinela
Inserte la descripción de la imagen aquí
Además del maestro de monitoreo, los centinelas se monitorean entre sí
Inserte la descripción de la imagen aquí

En segundo lugar, la configuración del centinela

Configuración de centinela

El centinela, como monitorización de la instancia de redis, garantiza la robustez y alta disponibilidad del centinela a través del algoritmo de elección. Por lo tanto, el centinela debe estar desplegado al menos 3 unidades, lo que se ajusta al principio de medio número. Necesita 5 o 7, más de la mitad, sin incluir la mitad cuando está vivo Solo cuando se elige al líder se puede realizar la función de conmutación maestro-esclavo.
Al menos un servicio de redis debe sobrevivir para garantizar el funcionamiento normal de centinela. El principio de seleccionar un nuevo maestro es el último disponible y los datos más recientes, la prioridad más alta y el activo más largo

Hay varios puntos a tener en cuenta en el proceso de construcción del sistema centinela.

  • Los nodos maestro-esclavo en el sistema centinela no son diferentes de los nodos maestro-esclavo ordinarios. El descubrimiento y transferencia de fallas son controlados y completados por el centinela.
  • El ganglio centinela es esencialmente un ganglio redis.
  • Para cada nodo centinela, solo necesita configurar el nodo maestro de monitoreo para descubrir automáticamente otros nodos centinela y nodos esclavos.
  • Durante la fase de inicio y conmutación por error del nodo centinela, el archivo de configuración de cada nodo se reescribirá (reescritura de configuración).
  • Un centinela solo puede monitorear un nodo maestro; de hecho, un centinela puede monitorear múltiples nodos maestros, lo que se puede lograr configurando múltiples monitores centinela.

Preparación ambiental

Se ha configurado y habilitado la sincronización maestro-esclavo de todos los nodos

papel nodo ip Versión Redis
Maestro reids-yum 192.168.5.11 Redis-5.0.9
esclavo1 reids_source_code 192.168.5.12 Redis-5.0.9
esclavo2 servidor redis 192.168.5.13 Redis-5.0.9

reids_source_code proporciona scripts de servicio del sistema

[root@reids_source_code ~]# vim /usr/lib/systemd/system/redis-sentinel.service
[Unit]
Description=Redis Sentinel
After=network.target

[Service]
ExecStart=/usr/local/redis/bin/redis-sentinel /etc/redis/sentinel.conf --supervised systemd
ExecStop=/usr/bin/kill `pidof redis-sentinel`
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

Tres nodos proporcionan archivos de configuración de Sentine

[root@reids-yum ~]# vim /etc/sentinel.conf
[root@reids_source_code redis]# vim /etc/redis/sentinel.conf
[root@redis-server ~]# vim /etc/sentinel.conf 
#是否为守护进程
daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
bind 192.168.5.13
port 26379
#工作目录
dir "/var/lib/redis"
#声明该哨兵的主库是mymaster,主库的ip和端口分别为127.0.0.1和6379
#最后一个2的含义是,在哨兵发生领导选举时,该哨兵需要获得2票才能成为leader
sentinel myid c0fc53842608bba5e5807226ce96d7c412bd069b
#在mymaster宕机30秒后进行主观下线
sentinel deny-scripts-reconfig yes
#指定在发生failover故障转移时最多可以有1个slave同时对新的master进行同步
sentinel monitor mymaster 192.168.5.11 6379 2
#设置故障转移超时时间为180秒
#这个参数的意义比较复杂,详细可以参考官方的注释说明
sentinel config-epoch mymaster 0
#发现两个从节点
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 192.168.5.13 6379
#epoch实现类似版本号的功能
sentinel known-replica mymaster 192.168.5.12 6379
# Generated by CONFIG REWRITE
protected-mode no
sentinel current-epoch 0

Empezar centinela

[root@reids-yum ~]# systemctl start redis-sentinel
[root@reids_source_code ~]# systemctl start redis-sentinel
[root@redis-server ~]# systemctl start redis-sentinel

# 查看进程
[root@reids-yum ~]# netstat -lnutp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      8236/redis-server 1 
tcp        0      0 192.168.5.11:6379       0.0.0.0:*               LISTEN      8236/redis-server 1 
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      8077/redis-sentinel 
tcp6       0      0 :::26379                :::*                    LISTEN      8077/redis-sentinel 

[root@reids_source_code ~]# netstat -lnutp | grep 6379
tcp        0      0 192.168.5.12:26379      0.0.0.0:*               LISTEN      3800/redis-sentinel 
tcp        0      0 192.168.5.12:6379       0.0.0.0:*               LISTEN      3265/redis-server 1

[root@redis-server ~]# netstat -lnutp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      12404/redis-server  
tcp        0      0 192.168.5.13:6379       0.0.0.0:*               LISTEN      12404/redis-server  
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      12326/redis-sentine 
tcp6       0      0 :::26379                :::*                    LISTEN      12326/redis-sentine 

¡El centinela está configurado correctamente! ! !


Ver información del nodo de prueba

Principal
Inserte la descripción de la imagen aquí
esclavo1
Inserte la descripción de la imagen aquí
esclavo2
Inserte la descripción de la imagen aquí
detener el servicio de redis de la biblioteca principal

[root@reids-yum ~]# systemctl stop redis
[root@reids-yum ~]# netstat -lnutp | grep 6379
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      9751/redis-sentinel 
tcp6       0      0 :::26379  

Ver información del nodo
esclavo1
Inserte la descripción de la imagen aquí
esclavo2
Inserte la descripción de la imagen aquí
Redis Sentinel ha logrado con éxito =Conmutación por error maestro-esclavo

Supongo que te gusta

Origin blog.csdn.net/XY0918ZWQ/article/details/113804107
Recomendado
Clasificación