Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica

Introducción a la replicación

Como base de datos no relacional, Redis tiene la misma función de replicación que una base de datos relacional (MySQL), nada más que un principio de realización diferente. La función de replicación de Redis también es exclusiva de otras bases de datos de memoria (memcached).

El papel principal de la función de replicación de Redis es la base para la realización de funciones de agrupamiento y fragmentación; también es una estrategia para que Redis logre una alta disponibilidad, como resolver problemas de concurrencia de una sola máquina, seguridad de datos y otros problemas.

Introducción al servicio

En la demostración del entorno de este artículo, hay un host y se inician dos ejemplos de Redis.

Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica


Método para realizar

La replicación de Redis se puede implementar de las siguientes tres formas:

1. Configurar cuándo se inicia el servicio

Este método utiliza parámetros de línea de comando para iniciar la función de replicación maestro-esclavo al iniciar el servicio Redis. La desventaja de este método es que no puede lograr la persistencia de la configuración.Cuando el servicio se detiene y se inicia el servicio, se deben agregar los mismos parámetros de comando.

1.1 El servidor maestro agrega el elemento requirepass en redis.confg por adelantado.

requirepass 6379

1.2 Inicie el servidor esclavo.

redis-server --port 6380 --replicaof 192.168.2.102 6379

2. Configuración de la línea de comandos

Este método usa redis-cli para ingresar a la interfaz de línea de operación para la configuración. La desventaja de este método es que no puede lograr la persistencia de la configuración.Cuando se detiene el servicio, es necesario ejecutar el mismo comando para iniciar el servicio.

2.1 Se ejecuta el servidor maestro.

127.0.0.1:6379> config set requirepass 6379OK

2.2 Ejecutar desde el servidor.

127.0.0.1:6380> réplica de 192.168.2.102 6379OK127.0.0.1: 6380> conjunto de configuración masterauth 6379OK

3. Configuración del archivo de configuración

Este método se establece a través del archivo de configuración redis.conf, que puede realizar la persistencia de la configuración y es un método recomendado.

3.1 Configure el servidor principal, redis.config.

requirepass 6379

3.2 Configure el servidor esclavo, redis.config.

masterauth 6379 réplica de 192.168.2.102 6379

4. Instrucciones de configuración

1. masterauth: establezca la contraseña de conexión redis.confi, si se establece este valor. Cuando otros clientes se conectan al servidor, necesitan agregar una contraseña antes de poder acceder a él.

2. requirepass: establece la contraseña de conexión del servidor maestro, que es consistente con masterauth en 1.

3. Replicaof: Conéctese desde el servidor a la dirección IP + número de puerto del servidor.

Prueba de efecto

1. Agregue datos al servidor principal.

Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica


2. Obtenga datos del servidor.

Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica


Principio de realización

Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica


// uml figure @startuml servidor esclavo -> servidor maestro: 1. Guardar configuración 
servidor esclavo -> servidor maestro: 2. Establecer conexión de socket 
servidor esclavo -> servidor maestro: 3. Enviar comando ping 
desde servidor -> servidor maestro: 4. Verificación de autorización 
Servidor esclavo -> servidor maestro: 5. Sincronizar datos 
Servidor esclavo -> servidor maestro: 6. Continuar copiando datos @enduml

El principal proceso de implementación de la replicación maestro-esclavo se muestra en la figura anterior:

1. En el primer paso, el servidor esclavo guarda la información de configuración del servidor maestro, después de guardar, cuando se ejecuta el temporizador dentro del servidor esclavo, se activa el proceso de replicación.

2. En el segundo paso, el servidor esclavo establecerá primero una conexión de socket con el servidor maestro para la comunicación maestro-esclavo. Posteriormente, el servidor maestro envía datos al servidor esclavo a través de este conjunto de bytes.

3. En el tercer paso, después de que el socket esté conectado correctamente, se envía el comando ping de autenticación En circunstancias normales, el servidor principal enviará la respuesta correspondiente. La función del comando ping es asegurar si se pueden usar los bytes del socket, y también verificar si el servidor principal acepta los comandos de operación.

4. El cuarto paso, seguido de la verificación de autenticación, es determinar si la contraseña de conexión del nodo maestro configurada por el nodo esclavo es correcta.

5.第五步,鉴权成功之后,就可以开始复制数据了。主服务器此时会进行全量复制,将主服务的数据全部发给从服务器,从服务器保存主服务器发送的数据。

6.接下来就是持续复制操作。主服务器会进行异步复制,一边将写的数据写入自身,同时会将新的写命令发送给从服务器。

实现策略

Redis主从复制主要分为三种弄策略方式,不同的策略方式都是针对不同的场景下进行使用。三种场景方式分别如下:

1.全量复制。全量复制用在主从复制刚建立时或者从切主服务器时,从服务器没有主服务器的数据,主服务器会将自身的数据通过rdb文件方式发送给从服务器,从服务器会清空自身数据,接着将主服务器发送的数据加载到自身中。

Todo el mundo habla del principio de replicación maestro-esclavo de Redis, permítanme resumir la práctica


// uml图@startuml从服务器->主服务器: 1.psync ? -1主服务器->从服务器: 2.fullsync runid offset
从服务器: 3.保存 runid offset
主服务器: 4.执行bgsave生成rdb
主服务器->从服务器: 5.发送rdb
从服务器: 6.清空自身老数据
从服务器: 7.加载主服务器数据@enduml

2.部分复制。部分复制用在一些异常情况下,例如主从延迟、从服务宕机之后重新启动接收主服务器发送的部分数据。

部分复制的实现主要依赖于复制缓存区、主服务的runid、主从服务器各自的复制偏移量(offset)。

复制缓存区:主服务在接收写命令时,会将命令写入缓存区,以便从服务器在异常情况下,减少数据的丢失。当从服务器正常连接之后,主服务器会将缓存区内的数据发送给从服务器。这里的缓存区是一个长队列。

Runid del servidor principal: El servidor principal generará un ID único cada vez que se inicie el servicio, como su propia identificación. El servidor esclavo guardará el identificador y usará el runid cuando envíe algunos comandos de copia.

desplazamiento de runid psync

Desplazamiento respectivo de la replicación maestro-esclavo: Una vez que el servicio maestro-esclavo establece la replicación, tendrá su propio desplazamiento. El nodo esclavo enviará su propio desplazamiento de replicación al nodo esclavo cada segundo. Después de que el nodo maestro envíe un comando de escritura, el nodo esclavo también aumentará su propio desplazamiento de replicación. El nodo maestro también aumentará su propio desplazamiento después de cada comando de escritura. El desplazamiento aquí se calcula acumulando la longitud de bytes del comando.

3. Replicación asincrónica. La replicación asincrónica se refiere al establecimiento de una relación de replicación entre el maestro y el esclavo, y los servidores maestro y esclavo continúan manteniendo la relación de replicación.

Problema de escena

1. Seguridad de los datos.

// Desde el servidor solo lectura réplica-solo lectura sí // Desde la contraseña de conexión del servidor masterauth

2. Retraso de datos.

De forma predeterminada, si el nodo maestro tiene nuevos datos, no se enviarán al servidor esclavo de inmediato, si se enciende, se enviarán al servidor esclavo de inmediato. El tiempo predeterminado se rechaza con el kernel de Linux.

// Retardo de replicación repl-disable-tcp-nodelay yes

3. El estado de la conexión de los nodos maestro y esclavo.

Una vez que el nodo maestro-esclavo establece una conexión, imitará al cliente de la otra parte periódicamente para detectar el estado del servicio de la otra parte. El nodo principal se puede configurar configurando el parámetro de configuración repl-ping-replica-period. La frecuencia predeterminada es 10 s.

Cuando el nodo esclavo ejecuta replconf ack {offsetid}, también enviará su propio desplazamiento de replicación al servidor maestro, y el servidor maestro determinará el retardo de datos basado en el desplazamiento. Si hay un retraso de datos, los datos correspondientes se volverán a emitir al nodo esclavo desde el receptor de datos en el búfer del registro de copias.


Supongo que te gusta

Origin blog.51cto.com/15128443/2665207
Recomendado
Clasificación