Redis Alta disponibilidad y optimización de NoSQL

1. Alta disponibilidad de Redis

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.
En Redis, las tecnologías para lograr 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 implementa principalmente copias de seguridad de datos en varias máquinas, así como equilibrio de carga para operaciones de lectura y recuperación de fallas simple. 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. 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 clúster: a través del clúster, Redis resuelve el problema de que la operación de escritura no se puede equilibrar 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.

1. Redis persistencia

Función de persistencia: Redis es una base de datos en memoria, y los datos se almacenan en la memoria. Para evitar la pérdida permanente de datos después de que el proceso de Redis finalice de manera anormal debido a razones como fallas en la alimentación del servidor, es necesario guardar regularmente los datos en Redis de alguna forma (datos o comandos) desde la memoria al disco duro; cuando Redis se reinicie la próxima vez, use el archivo persistente para lograr la recuperación de datos. Además, los archivos persistentes se pueden copiar a una ubicación remota para realizar copias de seguridad en caso de desastre.

Redis proporciona dos métodos para la persistencia persistente
de RDB: el principio es guardar los registros de la base de datos de Reids en la memoria en el disco a intervalos regulares.
Persistencia AOF (agregar solo archivo): el principio es escribir el registro de operaciones de Reids en el archivo de forma adjunta, similar al binlog de MySQL.
Debido a que el rendimiento en tiempo real de la persistencia AOF es mejor, es decir, se pierden menos datos cuando el proceso finaliza inesperadamente, por lo que AOF es actualmente el método de persistencia principal, pero la persistencia RDB todavía tiene su lugar.

Persistencia de RDB
La persistencia de RDB se refiere a guardar instantáneas de los datos en el proceso actual en la memoria en el disco duro dentro de un intervalo de tiempo específico (por lo que también se denomina persistencia de instantáneas), usando compresión binaria para almacenar, y el sufijo del archivo guardado es rdb; cuando se reinicia Redis, el archivo de instantánea se puede leer para restaurar los datos.

2. Condiciones de activación

La activación de la persistencia de RDB se divide en activación manual y activación automática.
1.
Tanto el comando guardar como el comando bgsave se pueden activar manualmente para generar un archivo RDB.
El comando guardar bloqueará el proceso del servidor Redis hasta que se cree el archivo RDB.Durante el bloqueo del servidor Redis, el servidor no puede procesar ninguna solicitud de comando.
El comando bgsave crea un proceso secundario, que es responsable de crear el archivo RDB, y el proceso principal (es decir, el proceso principal de Redis) continúa procesando las solicitudes.
Durante la ejecución del comando bgsave, solo el proceso secundario de la bifurcación bloqueará el servidor, pero para el comando guardar, todo el proceso bloqueará el servidor, por lo que guardar se ha abandonado básicamente y se debe evitar el uso de guardar en línea. ambiente.
2. Activación automática
Cuando la persistencia de RDB se activa automáticamente, Redis también elegirá bgsave en lugar de guardar para la persistencia.
El caso más común para la activación automática de save mn
es pasar save mn en el archivo de configuración para especificar que bgsave se activará cuando se produzcan n cambios en m segundos.
vim /etc/redis/6379.conf
– Línea 219 – Cuando se cumple cualquiera de las siguientes tres condiciones de guardado, hará que bgsave llame a
save 900 1: cuando el tiempo alcance los 900 segundos, si los datos de redis han cambiado al menos una vez , luego Ejecute bgsave
save 300 10: Cuando el tiempo alcance los 300 segundos, si los datos de redis han cambiado al menos 10 veces, ejecute bgsave save
60 10000: Cuando el tiempo alcance los 60 segundos, si los datos de redis han cambiado al menos 10,000 veces, ejecutar bgsave
– Línea 254 – Especifique el nombre del archivo RDB
dbfilename dump.rdb
– Línea 264: especifique el directorio
dir /var/lib/redis/6379 donde se encuentran los archivos RDB y AOF
– Línea 242: si habilitar la compresión de archivos RDB
rdbcompression sí
Otros mecanismos de activación automática
Además de guardar mn, hay otras situaciones que activan bgsave:
●En el escenario de replicación maestro-esclavo, si el nodo esclavo realiza una operación de copia completa, el nodo maestro ejecutará el comando bgsave y enviará el archivo rdb al nodo esclavo.
●Cuando se ejecuta el comando de apagado, la persistencia de RDB se ejecuta automáticamente.

3. Proceso de ejecución

El proceso principal de Redis primero juzga: si actualmente está ejecutando save o el proceso secundario de bgsave/bgrewriteaof, y regresa directamente si está ejecutando el comando bgsave. Los procesos secundarios de bgsave/bgrewriteaof no se pueden ejecutar al mismo tiempo, principalmente por consideraciones de rendimiento: dos procesos secundarios simultáneos realizan una gran cantidad de operaciones de escritura en disco al mismo tiempo, lo que puede causar problemas de rendimiento graves.
El proceso principal ejecuta la operación de bifurcación para crear un proceso secundario. Durante este proceso, el proceso principal se bloquea y Redis no puede ejecutar ningún comando del cliente. Después de que el proceso principal se bifurca, el comando bgsave devuelve el mensaje "Guardado en segundo plano iniciado"
. y ya no bloquea el proceso principal y puede responder Otros comandos
El proceso secundario crea un archivo RDB, genera un archivo de instantánea temporal basado en la instantánea de memoria del proceso principal y reemplaza atómicamente el archivo original después de la finalización
. envía una señal al proceso principal para indicar la finalización, y el proceso principal actualiza la información estadística
Cargue
el archivo RDB al inicio Los trabajos se realizan automáticamente cuando se inicia el servidor y no hay comandos especiales. Sin embargo, debido a que AOF tiene una prioridad más alta, cuando AOF está habilitado, Redis priorizará la carga de archivos AOF para restaurar datos; solo cuando AOF está deshabilitado, los archivos RDB se detectarán y cargarán automáticamente cuando se inicie el servidor Redis. El servidor se bloquea mientras se carga el archivo RDB hasta que se completa la carga.
Cuando Redis carga el archivo RDB, lo verificará. Si el archivo está dañado, se imprimirá un error en el registro y Redis no podrá iniciarse.

4. Persistencia de AOF

La persistencia de RDB es escribir datos de proceso en archivos, mientras que la persistencia de AOF es registrar cada comando de escritura y eliminación ejecutado por Redis en un archivo de registro separado, y la operación de consulta no se registrará; se ejecutará nuevamente cuando Redis reinicie los comandos en el Archivo AOF para recuperar datos.
En comparación con RDB, AOF tiene un mejor rendimiento en tiempo real, por lo que se ha convertido en la principal solución de persistencia.
Activar AOF
El servidor Redis activa RDB de forma predeterminada y desactiva AOF; para activar AOF, debe configurarse en el archivo de configuración, las
líneas de configuración de las diferentes versiones de Redis son diferentes, busque
vim /etc/redis/6379 .conf
appendonly yes by string # Modificar, abrir AOF
appendfilename "appendonly.aof" #Especifique el nombre del archivo AOF aof-load-truncated yes #Si debe ignorar el último comando que
puede tener problemas El proceso de ejecución de AOF incluye: comando agregar (append): agrega el comando de escritura de Redis al búfer aof_buf; escritura de archivos (escribir) y sincronización de archivos (sync): sincroniza el contenido de aof_buf con el disco duro de acuerdo con diferentes estrategias de sincronización; Reescritura de archivos (reescritura): reescriba periódicamente el archivo AOF para lograr el propósito de la compresión. (1) comando agregar (agregar)








Redis primero agrega el comando de escritura al búfer en lugar de escribir directamente el archivo, principalmente para evitar escribir el comando directamente en el disco duro cada vez, lo que hace que la E/S del disco duro se convierta en el cuello de botella de la carga de Redis.
El formato de comando adjunto es el formato de protocolo de la solicitud de comando de Redis. Es un formato de texto sin formato, que tiene las ventajas de una buena compatibilidad, gran legibilidad, fácil procesamiento, operación simple y evita la sobrecarga secundaria. En el archivo AOF, a excepción del comando de selección que se usa para especificar la base de datos (como seleccionar 0 para seleccionar la base de datos 0), que agrega Redis, todos los demás son comandos de escritura enviados por el cliente.
(2) Escritura de archivos (write) y sincronización de archivos (sync)
Redis proporciona una variedad de estrategias de archivo de sincronización para el área de búfer AOF. La estrategia involucra la función de escritura y la función fsync del sistema operativo. La descripción es la siguiente: En
orden Para mejorar la eficiencia de escritura de archivos, en un sistema operativo moderno, cuando un usuario llama a la función de escritura para escribir datos en un archivo, el sistema operativo generalmente almacena temporalmente los datos en un búfer de memoria.Cuando el búfer está lleno o excede el límite de tiempo especificado , el búfer se guarda realmente. Los datos en el área se escriben en el disco duro. Aunque este tipo de operación mejora la eficiencia, también trae problemas de seguridad: si la computadora se apaga, los datos en el búfer de memoria se perderán; por lo tanto, el sistema también proporciona funciones de sincronización como fsync y fdatasync, que pueden forzar el funcionamiento del sistema operativo. para actualizar inmediatamente los datos en el búfer. Los datos se escriben en el disco duro para garantizar la seguridad de los datos.

5. Ventajas y desventajas de RDB y AOF

Ventajas de la persistencia de RDB
: los archivos RDB son compactos, de tamaño pequeño, rápidos en la transmisión de red, adecuados para la copia completa; la velocidad de recuperación es mucho más rápida que AOF. Por supuesto, una de las ventajas más importantes de RDB en comparación con AOF es el impacto relativamente pequeño en el rendimiento.

Desventajas: la desventaja fatal de los archivos RDB es que el método de persistencia de las instantáneas de datos determina que no se puede lograr la persistencia en tiempo real. Hoy en día, cuando los datos se vuelven cada vez más importantes, una gran cantidad de pérdida de datos a menudo es inaceptable, por lo que la persistencia AOF convertirse en la corriente principal. Además, los archivos RDB deben cumplir con un formato específico y tener poca compatibilidad (por ejemplo, las versiones antiguas de Redis no son compatibles con las nuevas versiones de los archivos RDB).
Para la persistencia de RDB, por un lado, el proceso principal de Redis se bloqueará cuando bgsave realice la operación de bifurcación; por otro lado, la escritura de datos en el disco duro por parte del proceso secundario también generará presión de E/S.

Persistencia AOF
Correspondiente a la persistencia RDB, la ventaja de AOF es que admite persistencia de segundo nivel y buena compatibilidad. La desventaja es que el archivo es grande, la velocidad de recuperación es lenta y tiene un gran impacto en el rendimiento.
Para la persistencia de AOF, la frecuencia de escritura de datos en el disco duro aumenta considerablemente (segundo nivel en la estrategia cada segundo), la presión de IO es mayor e incluso puede causar problemas adicionales de bloqueo de AOF.
La reescritura del archivo AOF es similar a bgsave de RDB, y habrá bloqueo durante la bifurcación y la presión de E/S del proceso secundario. En términos relativos, dado que AOF escribe datos en el disco duro con mayor frecuencia, tendrá un mayor impacto en el rendimiento del proceso principal de Redis.

Dos, optimización redis

1. optimización redis

Habilite la persistencia de AOF Establezca
config set activedefrag yes para habilitar la limpieza automática de fragmentos de memoria, o realice una purga de memoria regularmente para limpiar fragmentos de memoria Establezca la
estrategia de eliminación de datos de memoria maxmemory-policy para garantizar que el uso de la memoria no exceda la memoria máxima del sistema
maxmemory Establezca el valor máximo de memoria ocupado por redis, maxmemory -samples Establezca el número de muestras para el algoritmo de estrategia de eliminación
Use el tipo de datos Hash para almacenar la mayor cantidad de datos posible, si el Hash contiene pocos campos, entonces este tipo de datos solo ocupa muy poco espacio Establezca el
tiempo de caducidad de la clave para simplificar el nombre de la clave y el valor de la clave, controle el tamaño del valor de la clave
Establezca la configuración, establezca requirepass para habilitar la verificación de contraseña
Establezca razonablemente el parámetro de número máximo de conexión maxclient (10000), tcp- número de cola de conexión acumulada (1024), tiempo de espera de conexión de tiempo de espera (30000)
Implementar replicación maestro-esclavo, datos de copia de seguridad, usar soluciones centinela o de clúster para lograr una alta disponibilidad
Problemas de consistencia de doble escritura en la base de datos y
almacenamiento en caché Primero actualice la base de datos y luego elimine la caché + tiempo de caducidad de la memoria caché, después de que caduquen los datos, las solicitudes de lectura pueden actualizar directamente la memoria caché desde la base de datos

2. Avalancha de caché

Una gran área de la memoria caché caduca al mismo tiempo, por lo que las solicitudes posteriores caerán en la base de datos, lo que provocará el colapso de la base de datos debido a una gran cantidad de solicitudes en un corto período de tiempo.
Solución:
el tiempo de caducidad de los datos almacenados en caché se establece aleatoriamente para evitar que caduque una gran cantidad de datos al mismo tiempo.
Generalmente, cuando la cantidad de concurrencia no es particularmente grande, la solución más utilizada es bloquear y poner en cola.
Agregue una etiqueta de caché correspondiente a cada dato almacenado en caché, registre si el caché no es válido y actualice el caché de datos si la etiqueta de caché no es válida.

3. Desglose del caché

No hay datos en el caché, pero hay datos en la base de datos (por lo general, el tiempo de caché expira). En este momento, debido a la gran cantidad de usuarios concurrentes, el caché de lectura no lee los datos al mismo tiempo, y en Al mismo tiempo, vaya a la base de datos para obtener los datos, lo que hace que la presión sobre la base de datos aumente instantáneamente, lo que resulta en una presión excesiva.
A diferencia de la avalancha de caché, el desglose de caché se refiere a verificar la misma pieza de datos al mismo tiempo. La avalancha de caché significa que diferentes datos han caducado y muchos datos no se pueden encontrar, por lo que se busca en la base de datos.
Solución
Configure los datos del punto de acceso para que nunca caduquen.
Agregar exclusión mutua, exclusión mutua.

4. Penetración de caché

Los datos que no están en la memoria caché ni en la base de datos hacen que todas las solicitudes caigan en la base de datos, lo que hace que la base de datos se colapse debido a una gran cantidad de solicitudes en un corto período de tiempo.
Solución:
agregue verificación en la capa de interfaz, como verificación de autenticación de usuario, id para verificación básica e intercepción directa de id<=0;
los datos que no se pueden recuperar del caché no se recuperan de la base de datos y también se pueden usar en este momento Escriba el par clave-valor como clave-nulo, y el tiempo de validez de la memoria caché se puede establecer en un punto corto, como 30 segundos (si se establece demasiado tiempo, no se podrá utilizar en condiciones normales). Esto puede evitar que el usuario atacante use repetidamente la misma identificación para forzar bruscamente
el filtro Bloom para convertir todos los datos posibles en un mapa de bits lo suficientemente grande, y los datos que no deben existir serán interceptados por este mapa de bits, evitando así la presión de consulta en el subyacente. sistema de almacenamiento.

Resumir

¿Qué optimizaciones ha realizado Redis? (Pregunta de la entrevista)
Reiniciar la persistencia de AOF
Establecer la contraseña de Redis
Habilitar la limpieza de fragmentación de la memoria
Usar hash como tipo de datos, ocupando menos espacio
Establecer el valor máximo de uso de la memoria
Establecer la estrategia de reciclaje de claves
Establecer el número máximo de conexiones

Supongo que te gusta

Origin blog.csdn.net/m0_73695023/article/details/130756705
Recomendado
Clasificación