DÍA 72 redis replicación maestro-esclavo de alta disponibilidad, centinela, clúster clúster

Alta disponibilidad de Redis

¿Qué es la alta disponibilidad?

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

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, etc.

Tecnología de alta disponibilidad de Redis

En Redis, las tecnologías para lograr una alta disponibilidad incluyen principalmente persistencia, replicación maestro-esclavo, centinela y clústeres de clúster, a continuación se describen sus funciones y qué problemas resuelven.

  • 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.

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

    • 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.
  • Sentinel: basado en la replicación maestro-esclavo, Sentinel implementa la recuperación automática de fallas. (El maestro está inactivo, encuentre un esclavo para convertirse en el nuevo maestro y el nodo centinela lo monitoreará)

    • Defectos: las operaciones de escritura no se pueden equilibrar en la carga; la capacidad de almacenamiento está limitada por una sola máquina.
  • Clúster de clústeres: a través de la agrupación en clústeres, Redis resuelve el problema de que las operaciones de escritura no pueden 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. (6 juegos de inicio, en parejas, 3 maestros y 3 esclavos)

Replicación maestro-esclavo de Redis

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 (Master), y el segundo se denomina nodo esclavo (slave); la replicación de datos es unidireccional, solo del nodo maestro al nodo esclavo.

De forma predeterminada, cada servidor 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 tener un nodo maestro.

El papel de la replicación maestro-esclavo

  • Redundancia de datos: la replicación maestro-esclavo implementa la copia de seguridad activa de los datos, que es un método de redundancia de datos distinto de la persistencia.
  • Recuperación de fallas: cuando hay un problema con el nodo maestro, el nodo esclavo puede proporcionar servicios para lograr una rápida recuperación de fallas; en realidad, es un tipo de redundancia de servicio.
  • 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 al escribir datos de Redis , y la aplicación se conecta al nodo esclavo cuando lee datos de Redis), 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.
  • 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 que la replicación maestro-esclavo es la base para la alta disponibilidad de Redis

 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 sincrónica.

(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.

Cree la replicación maestro-esclavo de Redis

master 192.168.137.10
slave1 192.168.137.15
slave2 192.168.137.20

4.1 Todos los servidores crean una base de datos redis

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

Apague el firewall y descargue el entorno dependiente

 Descomprimir el paquete y compilar

 Instalar en el directorio especificado

 Ejecute el archivo de script proporcionado por el paquete.

 Cuando esto suceda, ingrese vim ./install_server.sh 

 

 hacer enlace suave

 Inicie el servicio redis y verifique

 4.2 Modificar el archivo de configuración de Redis (Operación del nodo maestro)

vim /etc/redis/6379.conf
bind 0.0.0.0      #70行,修改监听地址为0.0.0.0
daemontze yes     #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

 

 4.3 Modificar el archivo de configuración de Redis (operación de nodo esclavo)

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 

 La configuración del nodo esclavo es similar a la del nodo maestro, use el comando scp para la transmisión remota y luego modifíquelo

scp /etc/redis/6379.conf 192.168.137.15:/etc/redis
scp /etc/redis/6379.conf 192.168.137.20:/etc/redis

 Introduzca dos servidores esclavos para modificar

vim /etc/redis/6379.conf 
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 查看主从服务器是否连接

4.4 Verificar el efecto maestro-esclavo

Ver registros en el nodo principal

tail /var/log/redis_6379.log
Replica 192.168.137.15:6379 asks for synchronization
Replica 192.168.137.20:6379 asks for synchronization

Verifique los nodos esclavos en el nodo maestro

redis-cli info replication

2. Modo centinela Redis

El método de la tecnología de conmutación maestro-esclavo es: cuando el servidor está inactivo, es necesario cambiar manualmente una máquina esclava a la máquina maestra, lo que requiere una intervención manual, que no solo requiere mucho tiempo y es laboriosa, sino que también hace que el servicio no estar disponible por un período de tiempo. Para resolver las deficiencias de la replicación maestro-esclavo, existe un mecanismo centinela

Función principal de Sentinel: basado en la replicación maestro-esclavo, Sentinel introduce la conmutación por error automática del nodo maestro.

1. El papel del modo centinela

  • 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. .
  • Notificación (recordatorio): Sentinel puede enviar el resultado de la conmutación por error al cliente.

2. La estructura centinela consta de dos partes, nodos centinela y nodos de datos

  • Nodo centinela: El sistema centinela consta de uno o más nodos centinela. El nodo centinela es un nodo redis especial que no almacena datos. El número de nodos debe ser un número impar mayor o igual a 3.
  • Nodos de datos: tanto los nodos maestros como los esclavos son nodos de datos.

 

3. Mecanismo de conmutación por error

Monitoreo periódico por parte del nodo centinela para saber si el nodo maestro ha fallado

  • Cada nodo centinela enviará un comando ping al nodo maestro, al nodo esclavo y a otros nodos centinela cada segundo para una detección de latidos. Si el nodo maestro no responde dentro de un cierto período de tiempo o responde con un mensaje de error, el centinela considerará que el nodo maestro está fuera de línea subjetivamente (unilateralmente). Cuando más de la mitad de los nodos centinela piensan que el nodo maestro está desconectado subjetivamente, objetivamente está desconectado.
  • .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.
  • El failover lo 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, se convierte en un nodo esclavo y apunta al nuevo nodo maestro;
    • Notifique al cliente que se reemplazó el nodo principal.


Es importante tener en cuenta que el objetivo fuera de línea es un concepto exclusivo del nodo maestro; si el nodo esclavo y el nodo centinela fallan, después de que el centinela los desconecte subjetivamente, no habrá operaciones objetivas fuera de línea y de conmutación por error posteriores.

4. 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.

El inicio de centinela depende del modo maestro-esclavo, por lo que el modo maestro-esclavo debe instalarse antes de hacer el modo centinela

5. Construya el modo centinela redis

master 192.168.137.10
slave1 192.168.137.15
slave2 192.168.137.20
sentinel-1: 1992.168.137.30
sentinel-2: 1992.168.137.40
sentinel-3: 1992.168.137.50

5.1 Instalar el servicio redis en todos los servidores Sentinel

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

5.2maestro y esclavo implementan la replicación maestro-esclavo de Redis

Modificar el archivo de configuración del nodo maestro

vim /etc/redis/6379.conf
bind 0.0.0.0      #70行,修改监听地址为0.0.0.0
daemontze yes     #137行,开启守护进程
logfile/var/log/redis_6379.1og   #172行,指定日志文件目录
dir/var/lib/redis/6379           #264行,指定工作目录
appendonly yes                   #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

 Modificar el archivo de configuración del nodo esclavo

vim /etc/redis/6379.conf 
 
bind 0.0.0.0         #70行,修改监听地址为0.0.0.0
daemonize yes        #137行,开启守护进程
logfile/var/log/redis 6379.1og    #172行,指定日志文件目录
dir/var/lib/redis/6379            #264行,指定工作目录
replicaof 192.168.137.10 6379#288行,指定要同步的Master节点IP和端口
appendonly yes     #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
netstat -natp | grep redis 
​

5.3 Modificar el archivo de configuración sentinel.conf del nodo centinela (todas las operaciones del nodo centinela)

Modifique el archivo de configuración del nodo centinela 192.168.52.200 aquí y use el comando scp para pasarlo a los otros dos nodos centinela

vim /opt/redis-5.0.7/sentinel.conf
 
protected-mode no                  #17行,关闭保护模式
port 26379                         #21行,Redis哨兵默认的监听端口
daemonize yes                      #26行,指定sentine1为后台启动
logfile "/var/log/sentinel.log"     #36行,指定日志存放路径
dir "/var/lib/redis/6379"           #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.137.10 6379 2
#84行,修改指定该哨兵节点监控192.168.137.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000
#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000
#146行,同一个sentine1对同一个master两次failover之间的间隔时间(180秒)
 
#远程传续将配置文件传输给其他哨兵服务器
scp /opt/redis-5.0.7/sentinel.conf 192.168.137.30:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/sentinel.conf 192.168.137.40:/opt/redis-5.0.7/

5.4 Iniciar modo centinela

#所有哨兵服务器执行
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

5.5 Ver mensajes centinela en el nodo centinela

redis-cli -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.239.10:6379,slaves=2,sentinels=3
[1]+  完成                  redis-sentinel sentinel.conf

5.6 Simulación de fallas

#在master节点查看redis-server进程号
ps -ef | grep redis
 
#杀死master节点redis-server进程
kill -9 21981

Verifique que el servidor maestro haya pasado al servidor esclavo en el nodo centinela

tail -f /var/log/sentinel.log

Compruebe si la conversión es exitosa en Sentinel

redis-cli -p 26379 info sentinel

5.7 Recuperación de fallas

#主节点
rm -rf /var/run/redis_6379.pid  #删除pid文件如果pid文件不删除则服务起不来
/etc/init.d/redis_6379 start  #启动服务
netstat -natp |grep 6379  
#主服务器查看
redis-cli info replication

3. Modo de clúster de Redis

El clúster, es decir, el clúster de Redis, es una solución de almacenamiento distribuido introducida por Redis3.0.

El clúster consta de varios 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.

1. El papel del clúster se puede resumir en dos puntos

(1) Particionamiento de datos: el particionamiento de datos (o fragmentación de datos) es la función principal del clúster.
El clúster distribuye datos a múltiples nodos. Por un lado, supera el límite 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.
El tamaño de la memoria independiente de Redis es limitado, lo cual se mencionó en la introducción de la persistencia y la replicación maestro-esclavo; como resultado, el nodo esclavo no puede proporcionar servicios durante mucho tiempo y el búfer de replicación del nodo maestro puede desbordarse durante el 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 algún nodo, el clúster aún puede proporcionar servicios externos.
 

2. Fragmentación de datos del clúster de Redis

  • El clúster de Redis presenta el concepto de ranuras hash
  • El clúster de Redis tiene 16384 ranuras hash (numeradas del 0 al 16383)
  • Cada nodo del clúster es responsable de una parte de las ranuras hash
  • Después de que cada clave pase la verificación CRC16, tome el resto de 16384 para determinar qué ranura hash colocar. A través de este valor, encuentre el nodo correspondiente a la ranura correspondiente y luego salte directa y automáticamente al nodo correspondiente para las operaciones de acceso.

Tome un clúster compuesto por 3 nodos como ejemplo

  • El nodo A contiene ranuras hash de 0 a 5460

  • El nodo B contiene las ranuras hash 5461 a 10922

  • El nodo c contiene ranuras hash 10923 a 16383

3. Cree el modo de clúster de Redis

Un clúster de redis generalmente requiere 6 nodos, 3 maestros y 3 esclavos

Tipo de servidor Sistema y dirección IP Componentes que necesitan ser instalados
maestro1 192.168.137.10 redis-5.0.7.tar.gz
maestro2 192.168.137.15 redis-5.0.7.tar.gz
maestro3 192.168.137.20 redis-5.0.7.tar.gz
esclavo1 192.168.137.30 redis-5.0.7.tar.gz
esclavo2 192.168.137.40 redis-5.0.7.tar.gz
esclavo3 192.168.137.50 redis-5.0.7.tar.gz

3.1 Inicializar el entorno Instalar redis en cada host

关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
 
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
 
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
 
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status	
			
#重启redis服务
/etc/init.d/redis_6379 restart

3.2 Habilitar la función de clúster

Modificar cualquier archivo de configuración del servidor

vim /opt/redis-5.0.7/redis.conf
 
bind 192.168.137.10                       #69行,注释掉bind项,改为自己
protected-mode no                         #88行,修改,关闭保护模式
port 6379                                 #92行redis默认监听端口,
daemonize yes                             #136行,开启守护进程,以独立进程启动
appendonly yes                            #700行,修改,开启AOF持久化
cluster-enabled yes                       #832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf       #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000                #846行,取消注释群集超时时间设置
 
#远程传输完要修改监听地址为自己
scp /opt/redis-5.0.7/redis.conf 192.168.137.15:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.20:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.30:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.40:/opt/redis-5.0.7/
scp /opt/redis-5.0.7/redis.conf 192.168.137.50:/opt/redis-5.0.7/

3.3 Inicie el nodo redis

Todos los nodos se ejecutan

cd /opt/redis-5.0.7/
redis-server redis.conf   #启动redis节点

3.4 Iniciar el clúster

Cualquier nodo comienza

redis-cli --cluster create 192.168.137.10:6379 192.168.137.15:6379 192.168.137.20:6379 192.168.137.30:6379 192.168.137.40:6379 192.168.137.50:6379 --cluster-replicas 1
#六个示例分为三组,每组一主一从,前面的做主节点后面的做从节点下面交互的时候需要输入yes才可以创建 --replicas 1表示每个主节点有一个从节点

3.5 Grupo de prueba

redis-cli -h 192.168.137.10 -p 6379 -c           #加-c参数,节点之间可以互相跳转
192.168.239.10:6379> cluster slots               #查看节点哈希槽编号范围
1) 1) (integer) 5461
   2) (integer) 10922                            #哈希槽编号范围
   3) 1) "192.168.137.10"  
      2) (integer) 6379                          #主节点ip和端口
      3) "093fd0ff72272a5b3c91b01fbcc106184971b818"
   4) 1) "192.168.137.40" 
      2) (integer) 6379                          #从节点ip和端口
      3) "97b3832b9be3df6455f3ba34269a92ee07bd46e3"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "192.168.137.15"
      2) (integer) 6379
      3) "03523dfb1c9efd1da17f9380e94276c171ef2041"
   4) 1) "192.168.137.30"
      2) (integer) 6379
      3) "33bb54b95acfcb61960317f3eaaf19f74fd5cafa"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "192.168.137.20"
      2) (integer) 6379
      3) "a0515c00438a99c928e16bd0ec704013e74cc2e7"
   4) 1) "192.168.137.50"
      2) (integer) 6379
      3) "efbb3e371167be32d67462e496ba538ee94fad07"

Supongo que te gusta

Origin blog.csdn.net/weixin_57560240/article/details/131040700
Recomendado
Clasificación