Redis: MISCONF Errors writing to the RDB snapshot
Сообщение MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk означает, что сохранение снимка не удалось. Redis при этом продолжает отвечать на чтение, но отклоняет запись — защищая вас от потери данных.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Нет места на диске
Снимок пишется во временный файл рядом с прежним, поэтому нужно место под две копии данных.
-
Нет прав на каталог данных
После ручного создания каталога или смены пользователя службы Redis не может писать в него.
-
Ядро отказало в выделении памяти для копии процесса
Для сохранения Redis создаёт копию процесса. При настройке
vm.overcommit_memory=0и большом наборе данных ядро может отказать.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние сохранения: когда была последняя удачная запись и что не так.
redis-cli info persistence | head -20Место и права на каталог данных.
df -h /var/lib/redis && sudo ls -ld /var/lib/redisСообщения Redis о неудачном сохранении.
journalctl -u redis-server -n 40 --no-pager | grep -iE "error|misconf|fork"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Снимок пишется во временный файл рядом с прежним, поэтому нужно место под две копии данных.
- Как проверить
-
Посмотрите место и каталог данных.
df -h /var/lib/redis sudo ls -lh /var/lib/redis/
- Как исправить
- Освободите место. Место нужно с запасом: при сохранении на диске временно лежат две копии набора данных.
- Почему происходит
- После ручного создания каталога или смены пользователя службы Redis не может писать в него.
- Как проверить
-
Посмотрите владельца каталога.
sudo ls -ld /var/lib/redis systemctl show redis-server -p User
- Как исправить
-
Передайте каталог пользователю службы.
sudo chown -R redis:redis /var/lib/redis
- Почему происходит
- Для сохранения Redis создаёт копию процесса. При настройке
vm.overcommit_memory=0и большом наборе данных ядро может отказать.
- Как проверить
-
Посмотрите настройку и предупреждения Redis.
sysctl vm.overcommit_memory journalctl -u redis-server -n 30 --no-pager | grep -i overcommit
- Как исправить
-
Установите
vm.overcommit_memory=1— это рекомендация самой документации Redis.echo "vm.overcommit_memory = 1" | sudo tee /etc/sysctl.d/99-redis.conf && sudo sysctl --system
Пример вывода
Redis отклоняет запись из-за неудачного сохранения. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
redis-server[1200]: # Write error saving DB on disk: No space left on device
redis-server[1200]: # Background saving error
# со стороны клиента:
(error) MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
Связанные ошибки
- No space left on device в журнале службы Нет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Failed with result 'oom-kill' Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- MySQL: InnoDB не запускается после аварийного завершения Ошибки InnoDB при старте: повреждение страниц, несовпадение журнала, режим принудительного восстановления.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Docker: no space left on device при запуске контейнеров Раздел с /var/lib/docker заполнен образами и слоями. Как посчитать занятое и что можно удалить безопасно.
- Elasticsearch: индексы переведены в режим только для чтения Elasticsearch блокирует запись при нехватке места: пороги watermark. Как снять блокировку правильно.
- Input/output error в журнале службы Ошибка ввода-вывода: проблемы носителя, отвалившийся сетевой ресурс, повреждённая файловая система. Что проверять срочно.
Где встречается чаще всего
Источники
- Документация Redis: сохранение данных
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено заполнением раздела с каталогом данных Redis.