Назад | Перейти на главную страницу

Может ли Redis RDB повредить?

На сайте redis.io говорится, что RDB менее надежен, чем AOF. Означает ли это, что существует некоторая вероятность повреждения базы данных и полной потери данных при отключении питания во время операции сохранения?

Сам файл .rdb «не может» быть поврежден, поскольку дамп сначала сохраняется в файл tmp, а затем переименовывается в дамп. Конечно, при переименовании может что-то не так. Так что есть очень-очень маленький шанс, но маловероятный.

RDB-файл может быть поврежден, если в базовом хранилище данных есть проблемы. Redis включает утилиту redis-check-dump для проверки файла, и вы можете использовать ее для проверки целостности вновь записанного файла дампа.

Если RDB поврежден при запуске, Redis не запустится и сообщит о какой-то загадочной ошибке. Есть пул реквест:

https://github.com/antirez/redis/pull/1744

Чтобы программа проверки запускалась автоматически, но она не была объединена (пока).

Файл дампа записывается в фоновом потоке, что означает, что он не может содержать 100% актуальную копию ключевого пространства. Чтобы получить это, вам нужно использовать файл AOF и настроить его на синхронизацию после каждой записи (что влияет на производительность).

Архитектура Redis позволяет вам создавать множество различных решений для этого. Вы можете включить запись AOF на главном сервере с помощью «never» fsync, а затем создать два подчиненных сервера, один из которых создает файлы RDB только каждые 10 минут, а другой, использующий AOF, с помощью fsync «always» или «everysec». Это даст вам встроенную избыточность на главном устройстве, если диск никогда не откажет, но если это произойдет, вы можете взять файл AOF с подчиненного устройства и использовать его для восстановления мастера. Если это не удалось, вы можете перейти к ведомому устройству RDB, но в этом случае вы можете потерять данные, записанные с момента последнего 10-минутного дампа.

Эта гибкость является частью того, что делает Redis таким мощным: вы можете выбирать, на основе данных, которые вы храните, какой уровень избыточности использовать.

В качестве альтернативы вы можете использовать размещенную службу Redis и позволить им позаботиться о деталях.