Práctica de implementación distribuida de tres redis en el sistema de registro Rocky
Instale el modo redis maestro-esclavo:
.Escribir archivo de configuración:
Instalación:
Comprobar contraseña:
Conectar al maestro:
Conectar al esclavo: p>
Separación de lectura y escritura:
Lectura y escritura:
Solo lectura:
Error 1:
Solución:
Referencia: /helm/charts/issues/10666
Referencia: /kubernetes/infrastructure /redis/administration/kernel-settings/
Referencia: /helm /charts/tree/master /stable/redis/#user-content-host-kernel-settings
Nota: Kubernetes 1.12+ puede usar securityContext.sysctls para configurar el sysctl del pod sin initContainer:
Error # 2:
Solución:
Solución usando initContainer para cambiar sysctl. En el entorno de producción, se ejecuta normalmente, pero ocurre un error aquí. Debería ser un problema con el contexto de seguridad o PSP no está habilitado aquí, por lo que se deja el contexto de seguridad:
Aquí intento escribir. los siguientes permisos, pero al final se modificaron todos:
No hay solución por el momento, pero descubrí que aunque se informó un error, modificar sysctl fue efectivo.
Error 4:
Solución:
Referencia: /docker-library/redis/issues/55
Referencia: /prometheus/ node_exporter/issues/703
Nota: Esto modificará la configuración del kernel en el nodo donde está programado el contenedor, afectando a otros contenedores que se ejecutan en ese nodo. Es por eso que necesitas ejecutar initContainer con permisos o configurar securityContext.sysctls.
Error 5:
Solución:
Porque la ruta para montar el /sys del host en el contenedor se ha cambiado a /host-sys
Así que cambie la ruta:
Error 6:
Solución alternativa:
Aún no hemos visto que nos afecte
Error 7:
La configuración del kernel no se ve afectada. Solución:
Porque el control principal se bloquea
Error 8:
Solución:
Redis proporciona dos métodos de copia de seguridad relativamente eficientes: p>
El método de persistencia que utiliza instantáneas RDB no es muy confiable. Cuando la computadora que ejecuta Redis deja de funcionar, se apaga o el proceso de Redis se cancela, los datos escritos recientemente en Redis se perderán. De esta forma, se perderán los datos escritos recientemente en Redis. Puede que esto no sea un problema para algunas aplicaciones, pero no es ideal para aplicaciones con requisitos de durabilidad extremadamente altos.
Otro enfoque es utilizar archivos AOF para maximizar la persistencia de los datos.
Del mismo modo, AOF se puede activar o desactivar mediante archivos de configuración.
Después de activar la persistencia de AOF, Redis llamará a write(2) después de cada evento para escribir los cambios en el búfer del kernel. Si write(2) está bloqueado en este momento, Redis no podrá procesar. el próximo evento.
Linux especifica que al ejecutar write(2), si fdatasync(2) se ejecuta en el mismo archivo para escribir el búfer del kernel en el disco físico, o se realiza una sincronización en todo el sistema, entonces write(2) se bloqueará, al igual que todo Redis.
Si el IO del sistema está ocupado, por ejemplo, otra aplicación está escribiendo en el disco, o el propio Redis está realizando una reescritura AOF o una instantánea RDB (aunque está escribiendo en un archivo temporal diferente, aunque cada uno continúa escribir contenido, pero cambiar entre los dos archivos extenderá el tiempo de búsqueda del cabezal del disco), fdatasync(2) puede completarse lentamente y bloquear la escritura(2).
Para obtener una imagen más clara del tiempo de ejecución de fdatasync(2), puede rastrearlo usando el siguiente comando, pero hacerlo afectará el rendimiento:
Redis proporciona un método auxiliar , es decir, no llame a fdatasync() cuando se encuentre un archivo y ejecute fdatasync(), pero no llame a fdatasync() cuando se encuentre un archivo y ejecute fdatasync(). Redis proporciona una manera de ayudarse a sí mismo al no llamar a write(2) cuando encuentra un archivo que realiza fdatasync(2), sino que lo almacena en el caché para que no se bloquee, pero si el tiempo ha excedido los dos segundos y es el Lo mismo, continuará ejecutando write(2), incluso si se bloquea redis.
En este punto, se imprimirá el maldito registro: La sincronización asincrónica de AOF tarda demasiado (¿disco ocupado?). El búfer AOF se escribe sin esperar a que se complete la sincronización, lo que puede reducir la velocidad de ejecución de Redis.
Luego, usando redis-cli INFO, puede ver que aof_delayed_fsync se incrementa en 1.
Entonces, para fsync, configúrelo en 1. Por lo tanto, cuando fsync se establece en cada segundo, la forma más rigurosa de describir la posibilidad de pérdida de datos es:
Si fdatasync se ejecuta durante mucho tiempo, un cierre inesperado de redis no provocará la pérdida de más más de dos segundos de datos en el archivo Segundo.
Si fdatasync se ejecuta normalmente, un apagado inesperado de redis no tendrá ningún impacto y solo resultará en menos de 1 segundo de pérdida de datos si el sistema operativo falla.
Método 1: cerrar AOF
Si se utiliza el método redis maestro-esclavo + centinela, si el nodo maestro se bloquea, el nodo esclavo será ascendido a nodo maestro y el nodo maestro se recuperará. Después de eso, los datos se pueden sincronizar una vez, lo cual no es un gran problema
Método 2: modificar la configuración del sistema
Resulta que la llamada de reescritura de AOF está enterrado en la llamada de escritura. La configuración predeterminada es vm.dirty_background_ratio=10, que ocupa el 10 % de la memoria disponible antes de la actualización en segundo plano
Y mi servidor tiene 8 G de memoria. Obviamente, actualizar demasiados datos a la vez provocará un bloqueo, así que. finalmente configure sysctl vm.dirty_bytes=33555tes
Método 3: modificar la configuración del sistema
La llamada de reescritura AOF está oculta en la llamada de escritura. dirty_bytes=33554432(32M) Solución de problemas
Error 9:
Solución:
Parece que el archivo AOF se carga en la memoria al inicio y luego Efectividad Matar
A medida que el comando continúa escribiendo en el AOF, el archivo se hará cada vez más grande. Para resolver este problema, redis introduce el mecanismo de reescritura AOF para comprimir archivos.
Los archivos se pueden reducir porque:
La reescritura de AOF se puede activar manual y automáticamente:
auto-aof-rewrite-percentage 100
auto-aof-rewrite - min-size 16mb
Entonces, controlar el tamaño del archivo AOF funciona de la siguiente manera:
NOTA: Esto aún no resuelve el problema, el archivo aún es muy grande y causa muchos problemas. disk IO, eventualmente causó que redis perdiera respuesta
Solución completa:
Después de eso, el tamaño del archivo dump.rdb se ha mantenido estable en 255M
El volcado. El tamaño del archivo rdb se ha mantenido estable en 255 M
El tamaño del archivo dump.rdb se ha mantenido estable en 255 M.