Replicación maestro-esclavo de Redis, modo centinela, construcción en modo clúster e integración springboot


Prefacio

Redis tiene tres modos: sincronización/replicación maestro-esclavo, modo centinela y clúster.

Replicación maestro-esclavo : La replicación maestro-esclavo es la base de Redis de alta disponibilidad. Tanto Sentinel como Cluster logran una alta disponibilidad basada en la replicación maestro-esclavo. La replicación maestro-esclavo implementa principalmente copias de seguridad de datos en múltiples máquinas, así como equilibrio de carga y recuperación de fallas simples para operaciones de lectura.

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

Sentinel : Basado en la replicación maestro-esclavo, Sentinel implementa una recuperación automatizada de fallas.

Defectos: las operaciones de escritura no se pueden equilibrar con la carga, la capacidad de almacenamiento está limitada por una sola máquina y Sentinel no puede realizar una conmutación por error automática de los nodos esclavos; en un escenario de separación de lectura y escritura, la falla del nodo esclavo hará que el servicio de lectura no esté disponible y se generen problemas adicionales. Se requiere monitoreo de los nodos esclavos. , operación de conmutación.

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, e implementa una solución de alta disponibilidad relativamente completa.

La instalación de Redis no se describirá en detalle aquí. Los estudiantes que la necesiten pueden consultar el artículo anterior [Instalación y configuración de Redis en Centos7].

1. Replicación maestro-esclavo de Redis (separación de lectura y escritura)

Preparación ambiental

NOMBRE DE HOST IP
redis (principal) 192.168.92.100
redis (preparado) 192.168.92.101
redis (preparado) 192.168.92.102

1. Descripción general de la replicación maestro-esclavo

  La replicación maestro-esclavo se refiere a copiar datos de un servidor Redis a otros servidores Redis. El primero se llama nodo maestro (Master) y el segundo se llama nodo esclavo (Slave); la replicación de datos es unidireccional y solo puede ser del nodo maestro al nodo esclavo.

  De forma predeterminada, cada servidor Redis es un nodo maestro; y un nodo maestro puede tener múltiples nodos esclavos (o ningún nodo esclavo), pero un nodo esclavo solo puede tener un nodo maestro.

2. Replicación maestro-esclavo

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

Recuperación de fallas: cuando ocurre un problema en 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: basado en la replicación maestro-esclavo, combinado 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, al escribir datos de Redis, la aplicación se conecta al nodo maestro y al leer datos de Redis, la aplicación se conecta al nodo esclavo) para compartir la carga del servidor; especialmente en escenarios donde hay menos escritura y más lectura, compartir la carga de lectura a través de múltiples nodos esclavos puede aumentar en gran medida la concurrencia del servidor Redis.

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 de la alta disponibilidad de Redis.

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

  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.

  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 los datos en el archivo de datos (realizar la operación RDB) y, al mismo tiempo, la máquina maestra también registrará todos los comandos para modificar los datos y almacenarlos en caché. ellos en el archivo de datos.

  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. Luego, la máquina maestra combinará todas las operaciones. para modificar los datos Enviado a la máquina Esclavo. Si el esclavo falla y provoca un tiempo de inactividad, se volverá a conectar automáticamente después de volver a la normalidad.

  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 guardar los datos. archivo Luego envíelo a todas las máquinas esclavas para asegurarse de que todas las máquinas esclavas sean normales.

4. Configurar la replicación maestro-esclavo de Redis

1. Las tres máquinas virtuales ingresan al servidor Redis.
Insertar descripción de la imagen aquí

  • info replicationVer información de replicación maestro-esclavo

role:master #La función de la máquina actual es maestra o esclava
conectada)salaces:0 #Representa que el nodo esclavo es actualmente 0

Insertar descripción de la imagen aquí
2. Ingresar a nuestro nodo esclavo (101/102) para modificar la configuración
PD: Esta es la configuración del nodo esclavo, en el nodo Maestro solo necesitas habilitar la contraseña de la configuración maestro-esclavo en la siguiente configuración, masterauth XXX, para preparar la posterior construcción centinela.

  1. Busque representante para encontrar replicaof
    .Insertar descripción de la imagen aquí

  2. Modificar replocaofiymasterauth

    Insertar descripción de la imagen aquí

  3. Cambie la operación de lectura del nodo replica-read-onlya sí para lograr la separación de lectura y escritura

    ![Inserte descripción de la imagen aquí](https://img-blog.csdnimg.cn/f5c0c227918f4e62947dc96dd7157a00.png

  4. Guarde y salga, elimine el archivo de copia de seguridad en la máquina del nodo esclavo, siga los mismos pasos anteriores para configurar nuestro segundo nodo esclavo 102

Insertar descripción de la imagen aquí

  1. Reinicie el servicio redis y configure nuestro segundo nodo esclavo 102 como se indica arriba.

Insertar descripción de la imagen aquí

  1. Ver los 101 nodos esclavosinfo replication
    Insertar descripción de la imagen aquí

  2. Verifique el PS de 100 nodos maestros info replication
    Insertar descripción de la imagen aquí
    : cuando el nodo maestro deja de funcionar, el nodo esclavo no se convertirá en el nodo maestro.

2. Modo Redis Sentinel (Sentinel)

  Problemas con la replicación maestro-esclavo: El nodo maestro está inactivo ¿Cómo garantizar la disponibilidad y continuar leyendo y escribiendo?

  En la replicación maestro-esclavo de Redis, después de que nuestro nodo maestro de Redis cae, el nodo esclavo esclavo no puede convertirse automáticamente en el nodo maestro, por lo que no puede proporcionar a los usuarios solicitudes de escritura y solo puede realizar lectura. Para resolver este problema, presentamos Redis Mecanismo centinela.
  A través del mecanismo centinela, el nodo centinela monitoreará todos los nodos. Cuando el nodo maestro deja de funcionar, el nodo centinela permitirá que uno de los nodos esclavos reemplace al nodo maestro y se haga cargo de sus operaciones de escritura, convirtiéndose así en un nuevo modo maestro-esclavo. .
Insertar descripción de la imagen aquí

Preparación ambiental

NOMBRE DE HOST IP
redis (principal) 192.168.92.100
redis (preparado) 192.168.92.101
redis (preparado) 192.168.92.102

1. Configurar el mecanismo centinela de Redis

1. Ingrese al directorio de instalación de Redis
cd /usr/local/redis/redis-5.0.0
sentinel.conf, que es el archivo de configuración central de nuestro mecanismo centinela
Insertar descripción de la imagen aquí
2. Copie el archivo de configuración del núcleo centinela a nuestro /usr/local/redis3.
cp sentinel.conf /usr/local/redis
Insertar descripción de la imagen aquí
Edite nuestro archivo de configuración del núcleo centinela
vim sentinel.conf
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquíInsertar descripción de la imagen aquí

La información de configuración específica es la siguiente:

  • Simplemente copie y modifique los parámetros directamente
# Base
#开启,方便其他节点器访问
protected-mode no  
#哨兵默认端口号
port 26379
#后台启动模式
daemonize yes
#哨兵机制默认进程号
pidfile /var/run/redis-sentinel.pid
#设置哨兵模式的日志文件路劲
logfile /usr/local/redis/sentinel/redis-sentinel.log
#哨兵模式的工作目录
dir /usr/local/redis/sentinel

# core  核心配置
# my-master:自定义名称           192.168.92.100 6379:主节点ip+端口    2:哨兵数量
sentinel monitor my-master 192.168.92.100 6379 2
#设置主节点密码
sentinel auth-pass my-master 123456
#被哨兵任务失效的毫秒时间段,默认为30秒,单位毫秒
sentinel down-after-milliseconds my-master 30000
#当从节点后变为主节点后,进行配置其他的,多少个从节点进行并行复制     1:一次接一个复制     2:一次复制2个
sentinel parallel-syncs my-master 1
#主备的切换时间,哨兵进行故障转移如果超时,则会交给哨兵集群的另一个节点处理进行故障转移
sentinel failover-timeout my-master 180000

2. Dado que es un clúster centinela, los archivos de configuración centinela de los tres nodos redis son exactamente iguales.

Puede hacer una copia directamente o puede utilizar el siguiente método para copiar de forma remota

PD: transferir archivos de configuración de forma remota
scp sentinel.conf [email protected]:/usr/local/redis
scp sentinel.conf [email protected]:/usr/local/redis
Insertar descripción de la imagen aquí

3. Iniciar centinela

Comando de inicio: redis-sentinel sentinel.conf
donde sentinel.conf es la ruta del archivo de configuración central de sentinel
Insertar descripción de la imagen aquí

PD: No hay carpetas ni archivos, porque tenemos directorios predefinidos, simplemente podemos crearlos y luego comenzar de nuevo. Verifique el
mkdir /usr/local/redis/sentinel -p
Insertar descripción de la imagen aquí
ps -ef|grep redisproceso de redis
Insertar descripción de la imagen aquí
tail -f redis-sentinel.logy verifique dinámicamente el final del archivo de registro centinela.
Insertar descripción de la imagen aquí
Cuando aparece este mensaje, significa que la configuración sea exitosa, y
luego el servidor del nodo esclavo también. Todos deben iniciar el archivo de configuración centinela.

4. Pruebe el mecanismo centinela

  1. Active todos los nodos de la arquitectura de replicación maestro-esclavo; actualmente 100 es el nodo maestro
    Insertar descripción de la imagen aquí
  2. Apague el nodo maestro y verifique el registro.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
    Puede ver que 101 se ha convertido en maestro y el nodo 100 caído también ha sido eliminado.
    Insertar descripción de la imagen aquí
    3. Inicie el nodo maestro 100 original
    Insertar descripción de la imagen aquí
    y verifique el registro. Después de que 100 cobre vida, el nodo maestro anterior El nodo no se restaurará.
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí

5. Resuelva el problema de la falta de sincronización después de restaurar el Maestro original

  Creo que los estudiantes cuidadosos encontrarán que después de restaurar el Maestro original (100) a Esclavo), su estado de sincronización no es correcto y el estado es master_link_status:dowm. ¿Por qué sucede esto?
Simplemente cambie redis.confla masterauth que se está modificando por su propia contraseña, la mía es 123456.
Insertar descripción de la imagen aquí

Generalmente, la solución para que los datos maestros no se puedan sincronizar con los esclavos es la siguiente:

  1. Para problemas de comunicación de red, asegúrese de que puedan comunicarse entre sí y comunicarse dentro de la intranet.
  2. Apague el firewall y desarrolle el puerto correspondiente (se recomienda apagar permanentemente el firewall para las máquinas virtuales y, para los servidores en la nube, se debe garantizar la interoperabilidad de la intranet).
  3. Unifica todas las contraseñas y no te pierdas ningún nodo que no esté configurado.

6.SpringBoot integra Redis Sentinel

1. Información de configuración

Insertar descripción de la imagen aquí

server:
  port: 8088

spring:
  datasource:  # 数据源的相关配置
    url: jdbc:mysql://127.0.0.1:3306/smart?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    password: 123456
  redis:
    # Redis 单机单实例
 #   database: 0
 #   host: 192.168.92.100
 #   port: 6379
 #   password: 123456
    # Redis 哨兵模式
    database: 1
    password: 123456
    sentinel:
      master: my-master
      nodes: 192.168.92.100:26379,192.168.92.101:26379,192.168.92.102:26379

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.Resultados de la prueba:

Insertar descripción de la imagen aquí

3. Modo de clúster de Redis (Redis-Cluster)

  Anteriormente aprendimos sobre la replicación maestro-esclavo y los centinelas. Pueden mejorar la concurrencia de lectura, pero la capacidad de un solo maestro es limitada y habrá un cuello de botella cuando los datos alcancen un cierto nivel. En este momento, se puede expandir horizontalmente a Forme un clúster con múltiples maestro-esclavo.
  Entonces, al comienzo de esta sección, aprendamos sobre redis-cluster: puede admitir múltiples maestros-.esclavos, admitir datos masivos y lograr alta disponibilidad y alta concurrencia.
  El modo Sentinel es en realidad una especie de clúster. Puede mejorar la concurrencia de solicitudes de lectura, pero puede haber algunos problemas con la tolerancia a fallas. Por ejemplo, cuando masterf sincroniza datos con el esclavo, esto en realidad es una replicación asincrónica. En este momento, masterf se cuelga. , luego esclavo. Los datos que contiene no son tan nuevos como los del maestro. La sincronización de datos lleva tiempo y se perderán entre 1 y 2 segundos de datos. Después de restaurar el maestro y convertirlo en esclavo, los nuevos datos se pierden.

Características

  1. Cada nodo conoce la relación entre sí y su propia función. Por supuesto, también saben que existen en un entorno de clúster y pueden interactuar y comunicarse entre sí, como el ping pong. Luego estas relaciones se guardarán en un determinado archivo de configuración, que se incluye en cada nodo, y esto lo configuraremos al construir.
  2. Si el cliente quiere establecer una conexión con el clúster, solo necesita establecer una relación con uno de ellos.
  3. Si un nodo cuelga, también es detectado por más de la mitad de los nodos. Después de que el objetivo se desconecta, el cambio maestro-esclavo es el mismo que mencionamos antes en el modo centinela.
  4. Hay muchas ranuras en Redis, que también se pueden llamar nodos de ranura, que se utilizan para almacenar datos. Ignoraré esto por ahora y hablaré de ello más adelante.

Para construir un clúster de Redis con tolerancia a fallas del clúster
  , necesita al menos 3 nodos como maestros para formar un clúster de alta disponibilidad. Además, cada maestro debe estar equipado con un esclavo, por lo que todo el clúster requiere 6 nodos. Este es también el El clúster de Redis más clásico, que se puede llamar tres maestros y tres esclavos, tiene mejor tolerancia a fallas. Por lo tanto, se requieren 6 máquinas virtuales para la configuración. Prepare 6 máquinas virtuales cada una. Puede construirlas mediante clonación. Puede clonarlas usando una sola instancia de Redis.

  • El clúster también se puede construir en un único servidor, lo que se denomina pseudoclúster, pero el entorno de producción debe ser real, por lo que se recomienda utilizar 6 servidores.
  • Asegúrese de cerrar Redis después de la clonación.

Insertar descripción de la imagen aquí

Preparación ambiental

Es mejor encontrar un redis que no se haya configurado antes y configurarlo nuevamente. No reutilice los archivos de configuración de las dos secciones anteriores.
Después de que Vmware configure uno, puede clonar el sistema.

NOMBRE DE HOST IP
103 redis 192.168.92.103
104 redis 192.168.92.104
105 redis 192.168.92.105
106 redis 192.168.92.106
107 redis 192.168.92.107
108 redis 192.168.92.108

Insertar descripción de la imagen aquí

1. Operando nuestro primer servidor Cluster 103

  1. Ingrese al directorio redis.conf y edite el archivo
cd /usr/local/redis/
vim redis.conf 
  1. Modifique la configuración de la siguiente manera:
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
#开启集群模式
cluster-enabled yes
#每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由ris自己维护,我们不要处理
cluster-config-file nodes-6379.conf
#超时时间,超时则认为master?宕机,随后主备切换
cluster-node-timeout 15000
#开启AOF
appendonly yes
  1. Guarde el archivo de configuración, reinicie Redis y verifique si el clúster aparece en el servicio, lo que indica que la configuración se realizó correctamente.
    /etc/init.d/redis_init_script start
    Insertar descripción de la imagen aquí

2. Inicie 6 instancias de redis

  1. Inicie las otras 5 estaciones y siga los pasos anteriores en secuencia.
  2. Si ocurre un error durante el proceso de inicio, elimine archivos como rdb y borrelos.
    cd working/
    rm dump.rdb
  • Aquí puedes usar xhell para operar múltiples ventanas al mismo tiempo.
    Insertar descripción de la imagen aquí

3. Crea un clúster

(Las versiones antiguas de Redis deben compilarse utilizando el script redis-trib.rb en el directorio de instalación de Redis)

1. Opere nuestro nodo 103 (maestro)

#####
#集群命令说明
redis-cli --cluster help
#注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
#注意2:以下为新版的redis构建方式
#####
#创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1


##我的集群供参考---------------------------------------------------------------------------------------
#-a 为当前redis服务密码
redis-cli -a 123456 --cluster create 192.168.92.103:6379 192.168.92.104:6379 192.168.92.105:6379 192.168.92.106:6379 192.168.92.107:6379 192.168.92.108:6379 --cluster-replicas 1

##查看集群信息,任意一个节点都行 a 为当前redis服务密码
redis-cli -a 123456 --cluster 192.168.19.108:6379

Insertar descripción de la imagen aquí
Cuando aparece el área verde, significa que la construcción de nuestros tres amos y tres esclavos está completa.

Sots : Ranuras, utilizadas para cargar datos, disponibles en el nodo maestro pero no en el nodo esclavo.

2. Ver información del clúster

Cualquier nodo ejecuta:
redis-cli -a 123456 --cluster 192.168.19.108:6379
Insertar descripción de la imagen aquí

Cuarto, nodo de ranura (siguiendo el principio de hash consistente)

El nodo de ranura existe en el nodo maestro del clúster de Redis, pero no hay ningún nodo de ranura en el nodo esclavo.

  1. Los nodos de ranura están distribuidos uniformemente en el nodo maestro.
    Insertar descripción de la imagen aquí
  2. El nodo de ranura se utiliza para guardar datos.
    Insertar descripción de la imagen aquí

Ver información del clúster.
Puede verlo en cualquier nodo del servidor del clúster.
redis-cli -c -a xxxx密码 -h 192.168.92.142 -p 6379
cluster infoVer información de configuración del clúster
cluster nodes. Ver información
Insertar descripción de la imagen aquí
de prueba del nodo.
Insertar descripción de la imagen aquí

5.springboot integra el clúster redis

1. Información de configuración

Insertar descripción de la imagen aquí

server:
  port: 8088

spring:
  datasource:                                           # 数据源的相关配置
    url: jdbc:mysql://127.0.0.1:3306/smart?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    password: 123456
  redis:
    # Redis 单机单实例
    #database: 0
    #host: 192.168.92.100
    #port: 6379
    #password: 123456

    # Redis 哨兵模式
    #database: 1
    #password: 123456
    #sentinel:
    #  master: my-master
    #  nodes: 192.168.92.100:26379,192.168.92.101:26379,192.168.92.102:26379

    # Redis 集群模式
    password: 123456
    cluster:
      nodes: 192.168.92.103:6379,192.168.92.104:6379,192.168.92.105:6379,192.168.92.106:6379,192.168.92.107:6379,192.168.92.108:6379

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.Resultados de la prueba

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Puede ver que bbb no está en el nodo 104 y los datos están almacenados en el nodo 103.

Supongo que te gusta

Origin blog.csdn.net/qq_38055805/article/details/128581067
Recomendado
Clasificación