tutorial commands aws redis

commands - MISCONF Redis está configurado para guardar instantáneas RDB



redis vs mongodb (18)

Inicie Redis Server en un directorio donde Redis tiene permisos de escritura

Las respuestas anteriores definitivamente resolverán su problema, pero esto es lo que realmente está sucediendo:

La ubicación predeterminada para almacenar el archivo rdb.dump es ./ (que denota el directorio actual). Puedes verificar esto en tu archivo redis.conf . Por lo tanto, el directorio desde donde inicia el servidor redis es donde se creará y actualizará un archivo dump.rdb .

Parece que ha comenzado a ejecutar el servidor redis en un directorio donde redis no tiene los permisos correctos para crear el archivo dump.rdb .

Para empeorar las cosas, redis probablemente tampoco le permitirá cerrar el servidor hasta que sea capaz de crear el archivo rdb para garantizar el correcto almacenamiento de datos.

Para resolver este problema, debe ingresar al entorno de cliente redis activo usando redis-cli y actualizar la tecla dir y establecer su valor en la carpeta de su proyecto o en cualquier carpeta donde no root tenga permisos para guardar. Luego ejecute BGSAVE para invocar la creación del archivo dump.rdb .

CONFIG SET dir "/hardcoded/path/to/your/project/folder" BGSAVE

(Ahora, si necesita guardar el archivo dump.rdb en el directorio en el que inició el servidor, deberá cambiar los permisos del directorio para que redis pueda escribir en él. Puede buscar stackoverflow para saber cómo hacerlo. ).

Ahora debería poder apagar el servidor redis. Tenga en cuenta que hemos codificado el camino. La codificación no suele ser una buena práctica y recomiendo encarecidamente iniciar el servidor redis desde el directorio de su proyecto y dir key back to cambiar la dir key back to .

CONFIG SET dir "./" BGSAVE

De esa manera, cuando necesite redisección para otro proyecto, el archivo de volcado se creará en el directorio de su proyecto actual y no en el directorio del proyecto de la ruta codificada.

Durante las escrituras a Redis ( SET foo bar ) recibo el siguiente error:

MISCONF Redis está configurado para guardar instantáneas RDB, pero actualmente no puede persistir en el disco. Los comandos que pueden modificar el conjunto de datos están deshabilitados. Consulte los registros de Redis para obtener detalles sobre el error.

Básicamente, entiendo que el problema es que redis no puede guardar datos en el disco, pero no tengo idea de cómo deshacerse del problema.

Además, la siguiente pregunta tiene el mismo problema, se abandonó hace mucho tiempo sin respuestas y muy probablemente no haya ningún intento de resolver el problema.


Como lo señaló @Chris, es probable que el problema sea de poca memoria. Comenzamos a experimentarlo cuando innodb_buffer_pool_size demasiada RAM a MySQL ( innodb_buffer_pool_size ).

Para asegurarnos de que haya suficiente RAM para Redis y otros servicios, redujimos innodb_buffer_pool_size en MySQL.


Demasiado breve acerca de la respuesta. Abre el terminal y escribe los siguientes comandos.

redis-cli

y ahora escribe

config set stop-writes-on-bgsave-error no


En caso de que encuentre el error y algunos datos importantes no se puedan descartar en la instancia de redis en ejecución (problemas con los permisos para el archivo rdb o su directorio incorrectamente, o quedándose sin espacio en el disco), siempre puede redirigir el archivo rdb para que se escriba en algún lugar más.

Usando redis-cli , puedes hacer algo como esto:

CONFIG SET dir /tmp/some/directory/other/than/var CONFIG SET dbfilename temp.rdb

Después de esto, es posible que desee ejecutar un comando BGSAVE para asegurarse de que los datos se escribirán en el archivo rdb . Asegúrese de que cuando ejecute INFO , bgsave_in_progress ya sea 0 (ya sea que la operación sea exitosa o se encuentre un error). Después de eso, ahora puede iniciar la copia de seguridad del archivo rdb generado en algún lugar seguro.


En caso de que esté trabajando en una máquina Linux, también vuelva a verificar los permisos de archivos y carpetas de la base de datos.

La db y el camino a ella se pueden obtener a través de:

en redis-cli :

CONFIG GET dir

CONFIG GET dbfilename

y en la linea de comandos ls -l . Los permisos para el directorio deben ser 755 , y los del archivo deben ser 644 . Además, normalmente redis-server se ejecuta como el usuario redis , por lo tanto, también es bueno darle al usuario redis la propiedad de la carpeta ejecutando sudo chown -R redis:redis /path/to/rdb/folder . Esto ha sido elaborado en la respuesta here .


En mi caso, la razón era el espacio libre en disco muy bajo (solo 35 Mb). Hice lo siguiente

  1. Se detuvieron todos los procesos relacionados con Redis.
  2. Eliminar algunos archivos en el disco para hacer suficiente espacio libre
  3. Eliminar el archivo de volcado de redis (si no se necesitan datos existentes)

    sudo rm /var/lib/redis/*

  4. Eliminar todas las claves de todas las bases de datos existentes.

    sudo redis-cli flushall

  5. reinicie todas las tareas de apio y verifique los registros correspondientes para cualquier problema

Encontré este error y pude deducir del registro que el error se debe a que el espacio en disco no es suficiente. Todos los datos que se insertaron en mi caso ya no fueron necesarios. Así que traté de FLUSHALL. Dado que el proceso redis-rdb-bgsave se estaba ejecutando, no permitía FLUSH los datos también. Seguí los siguientes pasos y pude continuar.

  1. Inicia sesión para redis cliente
  2. Ejecute el conjunto de configuración stop-writes-on-bgsave-error no
  3. Ejecutar FLUSHALL (Los datos almacenados no fueron necesarios)
  4. Ejecute el conjunto de configuración stop-writes-on-bgsave-error yes

El proceso redis-rdb-bgsave ya no se estaba ejecutando después de los pasos anteriores.


Encontré este problema mientras trabajaba en un servidor con espacio en disco AFS porque mi token de autenticación había caducado, lo que produjo respuestas de Permission Denied cuando el servidor redis intentó guardar. Resolví esto refrescando mi token:

kinit USERNAME_HERE -l 30d && aklog


Este error se produce debido a un error de BGSAVE. Durante BGSAVE, Redis realiza un proceso secundario para guardar los datos en el disco. Aunque la razón exacta de la falla de BGSAVE se puede verificar desde los registros (generalmente en /var/log/redis/redis-server.log en máquinas Linux) pero muchas de las veces BGAVE falla porque la bifurcación no puede asignar memoria. Muchas veces, la bifurcación no puede asignar memoria (aunque la máquina tiene suficiente RAM disponible) debido a una optimización conflictiva por parte del sistema operativo.

Como se puede leer en las redis.io/topics/faq :

El esquema de ahorro de fondo de Redis se basa en la semántica de copia en escritura de los sistemas operativos modernos: la redis forks (crea un proceso secundario) que es una copia exacta del padre. El proceso hijo vuelca el DB en el disco y finalmente sale. En teoría, el niño debería usar tanta memoria como el padre como copia, pero en realidad, gracias a la semántica de copia en escritura implementada por la mayoría de los sistemas operativos modernos, el proceso padre e hijo compartirán las páginas de la memoria común. Una página se duplicará solo cuando cambie en el elemento secundario o en el principal. Como en teoría todas las páginas pueden cambiar mientras el proceso secundario se está guardando, Linux no puede saber de antemano cuánta memoria tomará el niño, por lo que si la configuración de overcommit_memory se establece en cero, la bifurcación fallará a menos que haya tanta RAM libre como se requiere para duplicar realmente todas las páginas de memoria principal, con el resultado de que si tiene un conjunto de datos Redis de 3 GB y solo 2 GB de memoria libre, se producirá un error.

Establecer overcommit_memory en 1 dice que Linux se relajará y ejecutará la bifurcación en una forma de asignación más optimista, y esto es realmente lo que desea para Redis.

Redis no necesita tanta memoria como el sistema operativo cree que hace para escribir en el disco, por lo que puede fallar preventivamente la bifurcación.

Para resolver esto, puedes:

Modifique /etc/sysctl.conf y agregue:

vm.overcommit_memory=1

Luego reinicie sysctl con:

En FreeBSD:

sudo /etc/rc.d/sysctl reload

En Linux:

sudo sysctl -p /etc/sysctl.conf



Gracias a todos por revisar el problema, aparentemente el error se produjo durante bgsave .

Para mí, escribir config set stop-writes-on-bgsave-error no en un shell y reiniciar Redis resolvió el problema.


Puede haber errores durante el proceso bgsave debido a poca memoria. Prueba esto

echo ''vm.overcommit_memory = 1'' >> /etc/sysctl.conf sysctl vm.overcommit_memory=1


Puedes detenerlo intentando guardar la instantánea:

config set stop-writes-on-bgsave-error no

Esta es una solución rápida, pero si le interesan los datos para los que la está utilizando, debe verificar para asegurarse de que bgsave haya fallado en primer lugar.


Si está ejecutando Redis localmente en una máquina con Windows, intente "ejecutar como administrador" y ver si funciona. En mi caso, el problema era que Redis se encontraba en la carpeta "Archivos de programa", que restringe los permisos de forma predeterminada. Como debería.

Sin embargo, no ejecute Redis automáticamente como administrador . No desea otorgarle más derechos que se supone que tiene. Quieres resolver esto por el libro.

Por lo tanto, hemos podido identificar rápidamente el problema ejecutándolo como administrador, pero no es la solución. Un escenario probable es que haya puesto a Redis en una carpeta que no tiene derechos de escritura y, como consecuencia, el archivo DB se almacena en la misma ubicación.

Puede resolver esto abriendo el redis.windows.conf y busque la siguiente configuración:

# The working directory. # # The DB will be written inside this directory, with the filename specified # above using the ''dbfilename'' configuration directive. # # The Append Only File will also be created inside this directory. # # Note that you must specify a directory here, not a file name. dir ./

Cambie dir ./ a una ruta para la que tenga permisos regulares de lectura / escritura

También puede simplemente mover la carpeta Redis en su totalidad a una carpeta que sepa que tiene los permisos correctos.


Solución para @Govind Rai''s ''para guardar el archivo dump.rdb en el directorio en el que inició el servidor'':

Haga clic con el botón derecho en su carpeta Redis, haga clic en Propiedades y luego haga clic en la pestaña Seguridad. Haga clic en Editar para abrir el cuadro de diálogo Permisos para.

Haga clic en TODOS LOS PAQUETES DE APLICACIÓN

En el cuadro Permisos para, seleccione la casilla de verificación Permitir ''Control total''.


Todas esas respuestas no explican la razón por la que falló el guardado de rdb.

como mi caso, revisé el registro de redis y encontré:

14975: M 18 de junio 13: 23: 07.354 # El ahorro de fondo terminó con la señal 9

Ejecuta el siguiente comando en la terminal:

sudo egrep -i -r ''killed process'' /var/log/

muestra:

/var/log/kern.log.1:Jun 18 13:23:07 10-10-88-16 kernel: [28152358.208108] Proceso muerto 28416 (redis-server) vm total: 7660204kB, anon-rss: 2285492kB, archivo-rss: 0kB

¡eso es! este proceso (redis save rdb) es asesinado por OOM killer

se refiere:

https://github.com/antirez/redis/issues/1886

Encontrar qué proceso fue asesinado por Linux OOM killer


Una solución más permanente podría ser buscar en /etc/redis/redis.conf alrededor de las líneas 200-250, hay configuraciones para las características de rdb, que no eran parte de redis en los días 2.x.

notablemente

dir ./

se puede cambiar a

dir /home/someuser/redislogfiledirectory

o puede comentar todas las líneas guardadas y no preocuparse por la persistencia. (Ver los comentarios en /etc/redis/redis.conf)

Además, no olvides

service redis-server stop service redis-server start


Yo también estaba enfrentando el mismo problema. Ambas respuestas (la más votada y la aceptada) solo dan una solución temporal para la misma.

Además, el config set stop-writes-on-bgsave-error no es una manera horrible de pasar por alto este error, ya que lo que hace esta opción es evitar que redis notifique que las escrituras se han detenido y seguir adelante sin escribir los datos en una instantánea. Esto es simplemente ignorar este error. Refiera esto

En cuanto a configurar dir en config en redis-cli, una vez que reinicie el servicio de redis, esto también se borrará y el mismo error volverá a aparecer. El valor predeterminado de dir en redis.conf es ./ , y si inicia redis como usuario root, entonces ./ es / para el cual no se conceden los permisos de escritura y, por lo tanto, el error.

La mejor manera es establecer el parámetro dir en el archivo redis.conf y establecer los permisos adecuados para ese directorio. La mayoría de las distribuciones debian lo tendrán en /etc/redis/redis.conf