¡Conmoción! ! ! ! Descripción general e implementación de Redis (replicación maestro-esclavo, modo centinela, clúster)

Prefacio

En el blog anterior: Configuración y optimización de NoSQL Redis , cuando hablamos de la alta disponibilidad de redis, dijimos que las tecnologías para lograr alta disponibilidad incluyen principalmente persistencia, replicación maestro-esclavo, centinela y clúster. La última vez solo escribimos sobre persistencia ., En esta ocasión agregamos el contenido de replicación maestro-esclavo, centinela y cluster.

Uno, introducción al clúster de Redis

● Replicación maestro-esclavo: es la base de Redis de alta disponibilidad. Sentinel y los clústeres logran una alta disponibilidad sobre la base de la replicación maestro-esclavo. La replicación maestro-esclavo implementa principalmente la copia de seguridad de datos de varias máquinas, así como el equilibrio de carga y la recuperación de fallas simple para operaciones de lectura. Defectos: la recuperación de fallos no se puede automatizar; las operaciones de escritura no se pueden equilibrar la carga; la capacidad de almacenamiento está limitada por una sola máquina.

● Sentinel: sobre la base de la replicación maestro-esclavo, el centinela realiza la recuperación automática de fallas. Defectos: las operaciones de escritura no se pueden equilibrar la carga; la capacidad de almacenamiento está limitada por una sola máquina; el centinela no puede realizar una conmutación por error automáticamente desde el nodo esclavo. En el escenario de separación de lectura y escritura, la falla del nodo esclavo hará que el servicio de lectura no esté disponible, y se requiere monitoreo adicional del nodo esclavo, operación del interruptor.
● Clúster: a través de la agrupación en clústeres, Redis resuelve el problema de que las operaciones de escritura no se pueden equilibrar la carga y la capacidad de almacenamiento está limitada por una sola máquina, y realiza una solución de alta disponibilidad relativamente completa.

Dos, replicación maestro-esclavo de Redis

1. Concepto de 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 llama nodo maestro (maestro) y el segundo se llama nodo esclavo (esclavo); la replicación de datos es unidireccional y solo puede ser desde el nodo maestro al nodo esclavo.

De forma predeterminada, cada servidor Redis es el 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.

2. La función de la replicación maestro-esclavo de Redis

● Redundancia de datos: La replicación maestro-esclavo realiza una copia de seguridad en caliente de los datos, que es un método de redundancia de datos además de la persistencia.

● 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; de hecho, es una especie de redundancia de servicio.

● Equilibrio de carga: Sobre la base de la replicación maestro-esclavo, con la separación de lectura y escritura, el nodo maestro puede proporcionar el servicio de escritura y el nodo esclavo proporciona el servicio 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 al leer los datos de Redis), compartiendo la carga del servidor; especialmente en el escenario de escribir menos y leer más, compartir la carga de lectura entre varios nodos esclavos puede aumentar en gran medida la simultaneidad del servidor Redis.

● Piedra angular de 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.

3. Proceso de replicación maestro-esclavo de Redis

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

  • Paso 2: Ya sea que se trate de la primera conexión o 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 máquina maestra también registrará todos los comandos para modificar los datos y almacenarlos en caché en el archivo de datos.

  • Paso 3: Después de que el proceso en segundo plano complete la operación de caché, la máquina Maste enviará el archivo de datos a la máquina Esclava, y la máquina Esclava guardará el archivo de datos en el disco duro y luego lo cargará en la memoria, y luego el La máquina maestra modificará los datos Todas las operaciones se envían a la máquina esclava. Si el esclavo falla y causa un tiempo de inactividad, se volverá a conectar automáticamente después de volver a la normalidad.

  • Paso 4: Después de que la máquina maestra recibe la conexión de la máquina del lado esclavo, envía su archivo de datos completo a la máquina del lado esclavo. Si Mater recibe solicitudes de sincronización de varios esclavos al mismo tiempo, el maestro iniciará un proceso en segundo plano. Guarde el archivo de datos y luego envíelo a todas las máquinas del lado esclavo para asegurarse de que todas las máquinas del lado esclavo sean normales.

4. Construcción de replicación maestro-esclavo de Redis

Enlace del paquete de instalación redis-5.0.7.tar.gz

Master节点: 192. 168.182.11   redis-5.0.7.tar.gz
Slave1节点: 192. 168.182.22   redis-5.0.7.tar.gz
Slave2节点: 192. 168.182.33   redis-5.0.7.tar.gz

5. Instale Redis (todos los hosts)

yum install -y gcc gcc-c++ make
cd /opt
tar zxvf redis-5.0.7.tar.gz

cd /opt/redis-5.0.7/
make && make PREFIX=/usr/local/redis install

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/

6. Modifique el archivo de configuración de Redis del nodo principal.

Maestro 192.168.182.11

vim /etc/redis/6379.conf
#70行,修改bind 项,0.0.0.0监听所有网段
bind 0.0.0.0
#137行,开启守护进程
daemonize yes
#172行,指定日志文件目录
logfile /var/log/redis_6379.log
#264行,指定工作目录
dir /var/lib/redis/6379
#700行,开启AOF持久化功能
appendonly yes

/etc/init.d/redis_6379 restart

Inserte la descripción de la imagen aquí

7. Modifique el archivo de configuración de Redis del nodo esclavo.

(192.168.182.11) 、 (192.168.182.33)

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改bind 项,0.0.0.0监听所有网卡
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
replicaof 192.168.184.10 6379		#288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

Inserte la descripción de la imagen aquí

8. Verifique el servicio maestro-esclavo

Ver el registro desde el nodo maestro

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Tres, modo centinela de Redis

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移

1. El principio del modo centinela

  • Sentinel: 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 de un 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.

2. El papel del modo centinela

  • Monitoreo : El centinela verificará constantemente si el nodo maestro y el nodo esclavo están funcionando normalmente.
  • Conmutación por error automática : cuando el nodo maestro no funciona normalmente, el centinela 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 hará que otros nodos esclavos copien el nuevo nodo maestro.
  • Notificación (recordatorio) : el centinela puede enviar el resultado de la conmutación por error al cliente.

3. La estructura del modo centinela

La estructura centinela consta de dos partes, el nodo centinela y el nodo de datos :

  • Nódulo centinela: el sistema centinela consta de uno o más ganglios centinela El ganglio centinela es un nodo Redis especial y no almacena datos.
  • Nodo de datos: tanto el nodo maestro como el esclavo son nodos de datos.

El inicio del centinela depende del modo maestro-esclavo, por lo que debe instalar el modo maestro-esclavo antes de hacer el modo centinela, y el modo centinela debe implementarse en todos los nodos., El modo centinela controlará 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án. Si más de la mitad de los votos se considera un problema con Maestro, se notificará a la sala de centinelas y, a continuación, elija uno de los esclavos como nuevo maestro.

Nota : El objetivo fuera de línea es un concepto que solo está disponible para el nodo maestro; si el nodo esclavo y el nodo centinela fallan, después de que el centinela esté subjetivamente fuera de línea, no habrá operaciones objetivas posteriores fuera de línea y de conmutación por error.

4. Construcción del modo centinela

Configuración del entorno:

Siguiendo los pasos anteriores, se ha configurado la replicación maestro-esclavo

Master节点: 192. 168.182.11   redis-5.0.7.tar.gz
Slave1节点: 192. 168.182.22   redis-5.0.7.tar.gz
Slave2节点: 192. 168.182.33   redis-5.0.7.tar.gz

5. Modifique el archivo de configuración de Redis (todas las operaciones del nodo)

vim /opt/redis-5.0.7/sentinel.conf
#17行,关闭保护模式
protected-mode no
#21行,Redis哨兵默认的监听端口
port 26379
#26行,指定sentinel为后台启动
daemonize yes
#36行,指定日志存放路径
logfile "/var/log/sentinel.log"
#65行,指定数据库存放路径
dir "/var/lib/redis/6379"
#84行,修改 指定该哨兵节点监控192.168.163.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 192.168.163.10 6379 2
#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000
#146行,故障节点的最大超时时间为180000180秒)
sentinel failover-timeout mymaster 180000

Inserte la descripción de la imagen aquí

6. Simulación de fallas

Ver número de proceso de redis-server
Inserte la descripción de la imagen aquí
Elimine el ID de proceso del servidor redis en el nodo maestro
Inserte la descripción de la imagen aquí
Elimine el número de proceso de redis-server en el nodo maestro para
simular el tiempo de inactividad maestro

7. Resultado de la verificación

tail -f /var/log/sentinel.log

Inserte la descripción de la imagen aquí

redis-cli -p 26379 INFO Sentinel

Inserte la descripción de la imagen aquí

Cuatro, modo de clúster de Redis

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

El clúster está compuesto por varios nodos (nodo) y los datos de Redis se distribuyen entre estos nodos. Los nodos en el 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 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 de los clústeres

(1) Partición de datos: La partición de datos (o fragmentación de datos) es la función principal del clúster.
El clúster dispersa los datos en varios nodos. Por un lado, supera el límite de tamaño de memoria de una sola máquina de Redis y la capacidad de almacenamiento aumenta considerablemente; por otro lado, cada nodo principal puede proporcionar servicios externos de lectura y escritura, 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 replicación de persistencia y maestro-esclavo; por ejemplo, si la memoria independiente es demasiado grande, la operación de bifurcación de bgsave y bgrewriteaof puede hacer que el proceso principal se bloquee y puede ser posible cuando el host se cambia en el entorno 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 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 maestro (similar a centinela); cuando falla cualquier 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 Redis tiene 16384 ranuras hash (numeradas del 0 al 16383)
. Cada nodo del clúster es responsable de una parte de la ranura hash.
Después de la verificación CRC16, cada clave toma el resto de 16384 para decidir cuál colocar. Espere ranura, a través de este valor, para encontrar el nodo correspondiente a la ranura correspondiente, y luego saltar 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 ranuras hash 5461 a 10922, el
nodo C contiene ranuras hash 10923 a 16383

#Modelo de replicación maestro-esclavo del clúster Redis El
clúster tiene tres nodos A, B y C. Si el nodo B falla, todo el clúster no estará disponible debido a la falta de ranuras en el rango de 5461-10922.
Agregue un nodo esclavo A1, B1 y C1 para cada nodo. El clúster completo consta de tres nodos maestros y tres nodos esclavos. Después de que el nodo B falla, el clúster elige el nodo maestro con B1 como el nodo principal para continuar sirviendo. Cuando B y B1 fallan, el clúster no estará disponible

3. Cree el modo de clúster de Redis

Un clúster de redis generalmente requiere 6 nodos, 3 maestros y 3 esclavos. Para mayor comodidad, aquí todos los nodos se simulan en 6 servidores: se
distinguen por IP y números de puerto: 3 números de puerto de nodo maestro: 7001, 7003, 7005 y los números de puerto de nodo esclavo correspondientes: 7002, 7004, 7006.

Los seis servidores necesitan instalar la base de datos redis

Anfitrión sistema operativo IP: Puerto Software / paquete de instalación / herramienta
Maestro1 CentOS7 192.168.182.11:7001 redis-5.0.7.tar.gz
Esclavo1 CentOS7 192.168.182.22:7002 redis-5.0.7.tar.gz
Maestro2 CentOS7 192.168.182.33:7003 redis-5.0.7.tar.gz
Esclavo2 CentOS7 192.168.182.44:7004 redis-5.0.7.tar.gz
Maestro2 CentOS7 192.168.182.55:7005 redis-5.0.7.tar.gz
Esclavo2 CentOS7 192.168.182.66:7006 redis-5.0.7.tar.gz

El uso de diferentes nodos aquí solo quiere decir que el modo de clúster de redis puede especificar el puerto, no solo el puerto 6379, si no desea cambiarlo, también puede usar un puerto, por lo que es más conveniente crear un directorio y modificar la configuración, todos los nodos excepto la ip de escucha No hay diferencia más que la diferencia.

(1) Cree y copie archivos relacionados

#创建文件,文件名要根据端口创建,方便区别
cd /etc/redis/
mkdir -p redis-cluster/redis7001 
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6371/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6371/

Inserte la descripción de la imagen aquí

(2) Modifique el archivo de configuración para habilitar la función de clúster

Todos los nodos
configuran primero un nodo

cd /etc/redis/redis-cluster/redis6371
vim redis.conf
#69行,修改bind项,监听自己的IP
bind 192.168.163.11
#88行,修改,关闭保护模式
protected-mode no
#92行,修改,redis监听端口
port 6371
#136行,以独立进程启动
daemonize yes
#699行,修改,开启AOF持久化
appendonly yes
#832行,取消注释,开启群集功能
cluster-enabled yes
#840行,取消注释,修改,群集名称文件设置
cluster-config-file nodes-6371.conf
#846行,取消注释,群集超时时间设置
cluster-node-timeout 15000

Inserte la descripción de la imagen aquí
Copie los archivos configurados en este nodo

scp /etc/redis/redis-cluster/redis6371/redis.conf root@192.168.163.12:/etc/redis/redis-cluster/redis6372/redis.conf
scp /etc/redis/redis-cluster/redis6371/redis.conf root@192.168.163.13:/etc/redis/redis-cluster/redis6373/redis.conf
scp /etc/redis/redis-cluster/redis6371/redis.conf root@192.168.163.14:/etc/redis/redis-cluster/redis6374/redis.conf
scp /etc/redis/redis-cluster/redis6371/redis.conf root@192.168.163.15:/etc/redis/redis-cluster/redis6375/redis.conf
scp /etc/redis/redis-cluster/redis6371/redis.conf root@192.168.163.16:/etc/redis/redis-cluster/redis6376/redis.conf

Inserte la descripción de la imagen aquí

  • En otros servidores
cd /etc/redis/redis-cluster/redis6372
vim redis.conf
#69行,修改bind项,监听自己的IP
bind 192.168.163.12
#92行,修改,redis监听端口
port 6372
#840行,取消注释,修改,群集名称文件设置
cluster-config-file nodes-6372.conf

Inserte la descripción de la imagen aquí

(3) Inicie el nodo redis

Todos los nodos

#每台服务器进入对应的文件中,执行命令
cd /etc/redis/redis-cluster/redis6371/
redis-server redis.conf

ps -ef |  grep redis

Inserte la descripción de la imagen aquí

(4) Inicie el clúster

Maestro1 192.168.162.11:7001

redis-cli --cluster create 192.168.163.11:6371 192.168.163.12:6372 192.168.163.13:6373 192.168.163.14:6374 192.168.163.15:6375 192.168.163.16:6376 --cluster-replicas 1

Inserte la descripción de la imagen aquí

(5) Pruebe el clúster

redis-cli -h 192.168.162.11 -p 7001 -c   #加-c参数,节点之间就可以互相跳转	
cluster slots			#查看节点的哈希槽编号范围
set test lisi
cluster keyslot test	#查看name键的槽编号

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Configuración completa

Supongo que te gusta

Origin blog.csdn.net/panrenjun/article/details/114500968
Recomendado
Clasificación