Introducción a la replicación maestro-esclavo de Redis y al modo centinela

1.Replicación maestro-esclavo Redis

1.1 Resumen

  • Redis, aunque la velocidad de lectura y escritura es muy rápida, pero también producirá una situación en la que la presión de lectura es muy alta. Para compartir la presión de lectura, Redis admite la replicación maestro-esclavo para garantizar que el contenido de los datos de la base de datos maestra sea completamente consistente con el contenido de la base de datos esclava.

1.2 Clasificación de la estructura de Redis

  • La estructura maestro-esclavo de Redis puede adoptar una estructura maestro-esclavo múltiple o en cascada,
  • La replicación maestro-esclavo de Redis se puede dividir en sincronización completa y sincronización incremental según esté completa.

Inserte la descripción de la imagen aquí

1.2.1 Sincronización completa de Redis

  • La replicación completa de Redis generalmente ocurre durante la fase de inicialización del esclavo, en este momento, el esclavo necesita copiar todos los datos en el maestro.
  • Los pasos específicos son los siguientes:
从服务器连接主服务器,发送SYNC命令;
主服务器接收到sYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令。

Inserte la descripción de la imagen aquí

1.2.2 Replicación incremental de Redis

  • La replicación incremental de Redis se refiere al proceso de sincronizar las operaciones de escritura desde el servidor maestro al servidor esclavo cuando el esclavo se inicializa y comienza a funcionar normalmente. ·

  • El proceso de replicación incremental consiste principalmente en que el servidor maestro envía el mismo comando de escritura al servidor esclavo cada vez que ejecuta un comando de escritura, y el servidor esclavo recibe y ejecuta el comando de escritura recibido.

1.3 estrategia de sincronización maestro-esclavo

  • Cuando el maestro y el esclavo estén conectados, realice una sincronización completa;
  • Una vez finalizada la sincronización completa, realice una sincronización incremental;
  • Por supuesto, si es necesario, el esclavo puede iniciar la sincronización completa en cualquier momento. La estrategia de redis es intentar la sincronización incremental primero de todos modos; si no tiene éxito, se requiere que el esclavo realice una sincronización completa.

2. Cree la replicación maestro-esclavo de Redis

  • Entorno del proyecto
一台mater主服务器
IP:192.168.140.20
两台slave备选服务器
IP:192.168.140.21
IP:192.168.140.22

2.1 Abra el servicio redis_server en el servidor

Nota: El servicio redis debe estar activado en los servidores principal y en espera.

发送所有会话,关闭防火墙
systemctl stop firewalld
setenforce 0
  • Importe los siguientes paquetes de software en los tres servidores y colóquelos en el directorio raíz
    Inserte la descripción de la imagen aquí

2.1.1 Descomprimir e instalar

[root@master ~]# tar zxvf redis-5.0.4.tar.gz
[root@master ~]# cd redis-5.0.4/
[root@master redis-5.0.4]# make
[root@master redis-5.0.4]# make PREFIX=/usr/local/redis install
[root@master redis-5.0.4]# cd

2.1.2 Cree un archivo de enlace e inicie el servicio

[root@master ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@master ~]# cd redis-5.0.4/utils/
[root@master utils]# ./	//按table 查看相关命令
create-cluster/           graphs/                   hyperloglog/              lru/                      redis_init_script.tpl     speed-regression.tcl
generate-command-help.rb  hashtable/                install_server.sh         redis_init_script         releasetools/             whatisdoing.sh
[root@master utils]# ./install_server.sh
...//弹出的信息,按回车即可
[root@master utils]# netstat -anpt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      60219/redis-server 

Inserte la descripción de la imagen aquí

2.2 Modificar el archivo de configuración

  • En el servidor principal
[root@master ~]# vi /etc/redis/6379.conf 
...
69	bind 0.0.0.0	//修改监听地址为 0.0.0.0 (在实验环境使用),现网环境建议绑定从服务器IP地址
136	daemonize yes	//开启守护进程
171	logfile /var/log/redis_6379.log	//修改日志文件目录
263	dir /var/lib/redis/6379	//修改工作目录
699	appendonly yes	//开启AOF持久化功能
  • En el servidor alternativo, primero habilite las mismas funciones que el servidor principal y luego realice la siguiente configuración
[root@slave1 ~]# vi /etc/redis/6379.conf 
...
replicaof 192.168.140.20 6379	//开启复制功能
[root@slave1 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
  • Ver registros en el servidor principal
    Inserte la descripción de la imagen aquí

2.2 Verificar el nodo esclavo en el servidor maestro

  • Conéctese a la base de datos y edite el contenido en el servidor principal
[root@master ~]# redis-cli		//连接数据库
127.0.0.1:6379> info replication	//查看节点信息
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.140.21,port=6379,state=online,offset=448,lag=1
slave1:ip=192.168.140.22,port=6379,state=online,offset=448,lag=1
master_replid:8e6ded5a687920d545a8133c8c0093d8e962056d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:448
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:448
127.0.0.1:6379> set cp 9	//写入内容,并验证
OK
127.0.0.1:6379> get cp
"9"

Inserte la descripción de la imagen aquí

  • Verifique el contenido editado en el servidor maestro desde el servidor
[root@slave1 ~]# redis-cli
127.0.0.1:6379> get cp
"9"
127.0.0.1:6379> 

2.3 Resultados de la verificación

  • Cuando el nodo maestro cae
[root@master ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped

(1) Ver el registro en el nodo esclavo
Inserte la descripción de la imagen aquí
(2) Ver en el servidor si existe el contenido editado en el servidor maestro

[root@slave1 ~]# redis-cli
127.0.0.1:6379> get cp
"9"
127.0.0.1:6379> 

Inserte la descripción de la imagen aquí

  • En este momento, significa que el redis maestro-esclavo se construyó con éxito

  • Conclusión: replicación maestro-esclavo de Redis, cuando el servidor maestro falla, el servidor en espera no se cambiará automáticamente. Aunque la lectura de datos es normal, la escritura de datos causará problemas.

3. Modo centinela

注意:哨兵模式,一定是基于redis主从复制模式下做的

3.1 Principios del modo centinela

  • El centinela es un sistema distribuido que se utiliza para monitorear cada servidor en la estructura maestro-esclavo.Cuando ocurre una falla, se selecciona un nuevo maestro a través del mecanismo de votación y todos los esclavos se conectan al nuevo maestro;
  • Por lo tanto, el número de centinelas en ejecución del clúster completo no debe ser inferior a 3 nodos.

3.2 El papel del modo centinela

  • Monitoreo
    Verifique continuamente si el maestro y el esclavo están funcionando normalmente;
    detección de supervivencia del maestro, detección del estado de funcionamiento del maestro y esclavo.

  • Notificación (recordatorio)
    Cuando el servidor monitoreado tiene un problema, envíe una notificación a otro (sala centinela, cliente).

  • Conmutación por error automática
    Desconecte el maestro y el esclavo, seleccione un esclavo como maestro, conecte otros esclavos al nuevo maestro e informe al cliente de la nueva dirección del servidor

Suplemento: Sentinel también es un servidor de redis, pero no proporciona servicios de datos.

3.3 Inicio del modo centinela

  • El inicio del centinela depende del modo maestro-esclavo, por lo que el modo centinela debe instalarse cuando se instala el modo maestro-esclavo. El modo centinela debe implementarse en todos los nodos;
  • El modo centinela monitoreará si todos los nodos de trabajo de redis son normales. Cuando el maestro tiene un problema, porque otros nodos pierden contacto con el nodo maestro, votará. Después de que la votación sea la mitad de los votos, se considera que hay un problema con el maestro, y luego se notificará a la sala de centinelas. Seleccione uno de los esclavos como nuevo maestro

3.4 Configuración de Sentinel

3.4.1 Editar archivo de configuración

[root@master ~]# vi redis-5.0.4/sentinel.conf
17	protected-mode no		//关闭保护模式
26	daemonize yes		//指定sentinel为后台启动(开启守护进程)
36	logfile "/var/log/sentinel.log"	//指定日志存放路径
65	dir /var/lib/redis/6379		//指定数据库存放路径
84	sentinel monitor mymaster 192.168.140.20 6379 2	
		//至少几个哨兵检测到主服务器故障了,才会进行故障迁移(当主服务器故障,切换到slave为主服务器时,会将地址改为一个ID号)
113	sentinel down-after-milliseconds mymaster 3000	//判定服务器down掉的时间周期,默认30000毫秒(30S)
146	sentinel failover-timeout mymaster 180000	//故障节点的最大超时时间为180000(180秒)

3.4.2 Copiar el archivo de configuración al servidor esclavo

[root@master ~]# scp redis-5.0.4/sentinel.conf root@192.168.140.21:/root/redis-5.0.4

Inserte la descripción de la imagen aquí

3.4.3 Iniciar el modo centinela

先启动master,再启slave
[root@master ~]# redis-sentinel redis-5.0.4/sentinel.conf &	//&表示在后台启动
[1] 63649

[root@slave1 ~]# redis-sentinel redis-5.0.4/sentinel.conf &
[1] 62327
[root@slave2 ~]# redis-sentinel redis-5.0.4/sentinel.conf &
[1] 60481

3.4.4 Ver información centinela

  • Ver registro
[root@master ~]# tail -f /var/log/sentinel.log

Inserte la descripción de la imagen aquí

  • Ver proceso
[root@master ~]# ps aux | grep sentinel
root      63650  0.2  0.1 153836  2668 ?        Ssl  17:23   0:01 redis-sentinel *:26379 [sentinel]
root      63739  0.0  0.0 112676   980 pts/1    S+   17:31   0:00 grep --color=auto sentinel
[root@master ~]# ps aux | grep redis
root      62860  0.1  0.1 156396  2800 ?        Ssl  16:03   0:06 /usr/local/bin/redis-server 0.0.0.0:6379
root      63650  0.2  0.1 153836  2668 ?        Ssl  17:23   0:01 redis-sentinel *:26379 [sentinel]
root      63742  0.0  0.0 112676   984 pts/1    S+   17:31   0:00 grep --color=auto redis

Inserte la descripción de la imagen aquí

  • Ver estado de centinela
[root@master ~]# redis-cli -h 192.168.140.20 -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.140.20:6379,slaves=2,sentinels=3
[root@master ~]# redis-cli -h 192.168.140.20 -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.140.21,port=6379,state=online,offset=174385,lag=0
slave1:ip=192.168.140.22,port=6379,state=online,offset=174385,lag=0
master_replid:75cd6e32461f20e72b1ae7a09bffff02803fb9f9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:174385
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:174385

3.5 Simular falla

  • Detenga el servicio redis en el servidor principal
[root@master ~]# /etc/init.d/redis_6379 stop	 //停止redis服务
也可以用 kill 命令
kill -9 进程号

3.6 Resultados de la verificación

  • Ver el registro en el servidor esclavo
[root@slave1 ~]# tail -f /var/log/sentinel.log 

Inserte la descripción de la imagen aquí

[root@slave2 ~]# tail -f /var/log/sentinel.log 

Inserte la descripción de la imagen aquí

[root@slave2 ~]# redis-cli -h 192.168.140.22 -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.140.22:6379,slaves=2,sentinels=3

Inserte la descripción de la imagen aquí

  • Cuando se reinicia el servidor maestro,
    verifique el registro y el estado del centinela y descubra que el maestro no se apropia del servidor esclavo
[root@master ~]# /etc/init.d/redis_6379 start

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42449832/article/details/111353841
Recomendado
Clasificación