Как сделать резервную копию и восстановить данные Redis в Ubuntu 14.04

Вступление

Redis - это кэш-память и хранилище ключей в памяти (то есть база данных), которые также можно сохранить (сохранить навсегда) на диск. В этой статье вы узнаете, как сделать резервную копию базы данных Redis на сервере Ubuntu 14.04.

По умолчанию данные Redis сохраняются на диск в файле + .rdb +, который является моментальным снимком вашего набора данных Redis. Снимок сделан через определенные промежутки времени, и поэтому идеально подходит для ваших резервных копий.

Предпосылки

Чтобы выполнить шаги, описанные в этом руководстве, вам потребуется:

  • Сервер Ubuntu 14.04

  • Установите Redis. Вы можете следовать только настройке * master * из https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04 в этом руководстве по установке Redis] ( хотя это будет работать так же хорошо с кластером ведущий-ведомый)

  • Убедитесь, что ваш сервер Redis работает

  • Если пароль Redis был установлен, что настоятельно рекомендуется, имейте это под рукой. Пароль находится в файле конфигурации Redis - + / etc / redis / redis.conf +

Шаг 1 - Поиск каталога данных Redis

Redis хранит свои данные в каталоге на вашем сервере, что мы и хотим сделать резервную копию. Сначала мы должны знать, где это.

В Ubuntu и других дистрибутивах Linux каталогом базы данных Redis является + / var / lib / redis +. Но если вы управляете сервером, который вы унаследовали, и местоположение данных Redis было изменено, вы можете найти его, набрав:

sudo locate *rdb

Кроме того, вы также можете найти его в приглашении + redis-cli +. Для этого введите:

redis-cli

Если сервер Redis не работает, ответ будет:

Выход

Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

В этом случае запустите Redis и переподключитесь, используя следующие команды:

sudo service redis-server start

redis-cli

Приглашение оболочки теперь должно измениться на:

127.0.0.1:6379>

При подключении к Redis следующие две команды будут аутентифицироваться и получать каталог данных:

auth

config get dir

Вывод последней команды должен быть вашим каталогом данных Redis:

Выход

1) "dir"
2) ""

Запишите свой каталог Redis. Если он отличается от показанного каталога, убедитесь, что вы используете этот каталог на протяжении всего руководства.

Теперь вы можете выйти из интерфейса командной строки базы данных:

exit

Убедитесь, что это правильный каталог:

ls /var/lib/redis

Вы должны увидеть файл + dump.rdb +. Это данные Redis. Если + appendonly + также включен, вы также увидите + appendonly.aof + или другой файл + .aof +, который содержит журнал всех операций записи, полученных сервером.

См. Http://redis.io/topics/persistence[this post о персистенции Redis] для обсуждения различий между этими двумя файлами. По сути, файл + .rdb + является текущим снимком, а файл + .aof + сохраняет вашу историю Redis. Оба заслуживают поддержки.

Мы начнем с файла + .rdb + и закончим автоматическим резервным копированием обоих файлов.

(Необязательно) Шаг 2. Добавление образцов данных

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

Войдите в интерфейс командной строки базы данных:

redis-cli

Аутентифицировать:

auth

Давайте добавим несколько примеров данных. Вы должны получить ответ + OK + после каждого шага.

SET shapes:triangles "3 sides"

SET shapes:squares "4 sides"

Подтвердите, что данные были добавлены.

GET shapes:triangles

GET shapes:squares

Вывод включен ниже:

Выход

"3 sides"

"4 sides"

Чтобы зафиксировать эти изменения в файле + / var / lib / redis / dump.rdb +, сохраните их:

save

Вы можете выйти:

exit

Если вы хотите, вы можете проверить содержимое файла дампа сейчас. Он должен иметь ваши данные, хотя и в удобной для машин форме:

sudo cat /var/lib/redis/dump.rdb

/var/lib/redis/dump.rdb

REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C

Шаг 3 - Резервное копирование данных Redis

Теперь, когда вы знаете, где находятся ваши данные Redis, пришло время сделать резервную копию. На официальном сайте Redis приводится цитата:

_ Redis очень удобен для резервного копирования данных, поскольку вы можете копировать файлы RDB во время работы базы данных: RDB никогда не изменяется после создания, и, пока он создается, он использует временное имя и переименовывается в конечный пункт назначения атомарно, используя только rename (2) когда новый снимок будет завершен. _

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

sudo cp /var/lib/redis/dump.rdb
  • Redis сохраняет содержимое здесь периодически, что означает, что вы не гарантируете своевременное резервное копирование, если вышеупомянутая команда - все, что вы запускаете. * Сначала вам нужно сохранить свои данные.

Тем не менее, если допустима небольшая потеря данных, будет работать только резервное копирование этого файла.

  • Сохранение состояния базы данных *

Чтобы получить гораздо более свежую копию данных Redis, лучше всего обратиться к + redis-cli +, командной строке Redis.

Аутентифицируйте как объяснено в Шаге 1.

Затем выполните команду + save + следующим образом:

save

Вывод должен быть похож на это:

Выход

OK
(1.08s)

Выйдите из базы данных.

Теперь вы можете запустить приведенную выше команду + cp +, будучи уверенными, что ваша резервная копия полностью обновлена.

Хотя команда + cp + обеспечит однократное резервное копирование базы данных, наилучшим решением является создание задания cron, которое будет автоматизировать процесс, и использовать инструмент, который может выполнять инкрементные обновления и, при необходимости, восстанавливать данные.

Шаг 4 - Настройка автоматических обновлений с помощью rdiff-backup и Cron

В этом разделе мы настроим автоматическое резервное копирование, обеспечивающее резервное копирование всего каталога данных Redis, включая оба файла данных.

Существует несколько инструментов автоматического резервного копирования. В этом руководстве мы будем использовать новый, удобный для пользователя инструмент под названием + rdiff-backup +.

+ rdiff-backup инструмент резервного копирования командной строки. Вполне вероятно, что + rdiff-backup не установлен на вашем сервере, поэтому вам сначала нужно его установить:

sudo apt-get install -y rdiff-backup

Теперь, когда он установлен, вы можете проверить его, выполнив резервное копирование данных Redis в папку в вашем домашнем каталоге. В этом примере мы предполагаем, что вашим домашним каталогом является + / home / +:

Обратите внимание, что целевой каталог будет создан сценарием, если он не существует. Другими словами, вам не нужно создавать его самостоятельно.

С * -preserve-numeric-ids * владения исходной и целевой папок будут одинаковыми.

sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home//redis

Как и команда + cp + ранее, это одноразовое резервное копирование. Что изменилось, так это то, что мы теперь создаем резервную копию всего каталога + / var / lib / redis + и используем + rdiff-backup +.

Теперь мы будем автоматизировать резервное копирование с помощью cron, чтобы резервное копирование выполнялось в установленное время. Для этого откройте системный crontab:

sudo crontab -e

(Если вы ранее не использовали crontab на этом сервере, выберите ваш любимый текстовый редактор в командной строке.)

В нижней части файла добавьте запись, показанную ниже.

кронтаб

Эта запись Cron будет выполнять резервное копирование Redis каждый день в полночь. Переключатель * –no-file-statistics * отключит запись в файл + file_statistics + в каталоге + rdiff-backup-data +, что заставит + rdiff-backup + работать быстрее и использовать немного меньше дисковое пространство.

Кроме того, вы можете использовать эту запись для ежедневного резервного копирования:

Чтобы узнать больше о Cron в целом, прочитайте эту article статью о Cron. .

В существующем состоянии резервное копирование будет производиться один раз в день, поэтому завтра вы сможете вернуться к финальному тесту. Или вы можете временно увеличить частоту резервного копирования, чтобы убедиться, что она работает.

Поскольку файлы принадлежат системному пользователю * redis *, вы можете проверить их наличие с помощью этой команды. (Обязательно дождитесь, пока резервная копия действительно сработает):

ls -l /home//redis

Ваш вывод должен выглядеть примерно так:

Выход

total 20
-rw-rw---- 1 redis redis    70 Sep 14 13:13 dump.rdb
drwx------ 3 root  root  12288 Sep 14 13:49 rdiff-backup-data
-rw-r----- 1 redis redis   119 Sep 14 13:09 redis-staging-ao.aof

Теперь у вас будут ежедневные резервные копии данных Redis, хранящихся в вашем домашнем каталоге на том же сервере.

Шаг 5 - Восстановление базы данных Redis из резервной копии

Теперь, когда вы увидели, как выполнять резервное копирование базы данных Redis, этот шаг покажет вам, как восстановить базу данных из файла резервной копии + dump.rdb +.

Восстановление резервной копии требует замены активного файла базы данных Redis файлом восстановления. * Так как это потенциально разрушительно, мы рекомендуем восстановить на новый сервер Redis, если это возможно. *

Вы не хотели бы перезаписывать вашу живую базу данных более проблемным восстановлением. Однако переименование, а не удаление текущего файла сводит к минимуму риск даже при восстановлении на том же сервере, что является тактикой, показанной в этом руководстве.

Проверка содержимого файла восстановления

Сначала проверьте содержимое вашего файла + dump.rdb +. Убедитесь, что у вас есть данные, которые вы хотите.

Вы можете проверить содержимое файла дампа напрямую, хотя имейте в виду, что он использует Redis-friendly, а не удобное для человека форматирование:

sudo cat /home/gilly/redis/dump.rdb

Это для небольшой базы данных; ваш вывод должен выглядеть примерно так:

Выход

REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?

Если в вашей последней резервной копии нет данных, вам не следует продолжать восстановление. Если контент есть, продолжайте.

Необязательно: имитация потери данных

Давайте смоделируем потерю данных, которая послужит причиной для восстановления из вашей резервной копии.

Войдите в Redis:

redis-cli

В этой последовательности команд мы авторизируемся с помощью Redis и удалим запись + shape: triangles +:

auth

DEL shapes:triangles

Теперь давайте удостоверимся, что запись была удалена:

GET shapes:triangles

Выход должен быть:

Выход

(nil)

Сохранить и выйти:

save

exit

Необязательно: Настройка нового сервера Redis

Теперь, если вы планируете восстановление на новый сервер Redis, убедитесь, что новый сервер Redis запущен и работает.

Для целей этого урока мы будем следовать только шагу 1 этого https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04 [Учебник по Redis Cluster], хотя вы можете следить за всей статьей, если хотите более сложную настройку.

Если вы выполните * Шаг 2 *, где вы добавили пароль и включили AOF, убедитесь, что вы учли это в процессе восстановления.

Убедившись, что Redis работает на новом сервере, запустив + redis-benchmark -q -n 1000 -c 10 -P 5 +, вы можете продолжить.

Остановка Redis

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

sudo service redis-server stop

Выход должен быть:

Выход

Stopping redis-server: redis-server

Проверьте, что это действительно остановлено:

sudo service redis-server status

Выход

redis-server is not running

Далее мы переименуем текущий файл базы данных.

Переименование Текущего dump.rdb

Redis считывает его содержимое из файла + dump.rdb +. Давайте переименуем текущий, чтобы освободить место для нашего файла восстановления.

sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old

Обратите внимание, что вы можете восстановить + dump.rdb.old +, если решите, что текущая версия лучше вашего файла резервной копии.

Если AOF включен, выключите его

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

Если вы настраиваете свой сервер Redis, следуя инструкциям в Redis Cluster обучающей программе , тогда AOF включен.

Вы также можете перечислить содержимое каталога + / var / lib / redis / +. Если вы видите файл + .aof + там, у вас включен AOF.

Давайте переименуем файл + .aof +, чтобы временно убрать его. Это переименовывает каждый файл, оканчивающийся на + .aof, поэтому, если у вас более одного файла AOF, вы должны переименовать файлы по отдельности, а НЕ запускать эту команду:

sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old

Отредактируйте файл конфигурации Redis, чтобы временно отключить AOF:

sudo nano /etc/redis/redis.conf

В разделе + AOF + найдите директиву + appendonly + и измените ее с ` на `. Это отключает это:

/etc/redis/redis.conf

appendonly

Восстановление файла dump.rdb

Теперь мы будем использовать наш файл восстановления, который должен быть сохранен в + / home // redis / dump.rdb +, если вы выполнили предыдущие шаги в этом руководстве.

Если вы восстанавливаете на новый сервер, сейчас самое время загрузить файл с вашего резервного сервера на новый сервер:

scp /home//redis/dump.rdb @:/home//dump.rdb

Теперь * на сервере восстановления *, который может быть исходным сервером Redis или новым, вы можете использовать + cp +, чтобы скопировать файл в папку + / var / lib / redis +:

sudo cp -p /home//dump.rdb /var/lib/redis

(Если вы загрузили файл в + / home // dump.rdb +, используйте команду + sudo cp -p /home//dump.rdb / var / lib / redis + вместо того, чтобы скопировать файл.)

В качестве альтернативы, если вы хотите использовать + rdiff-backup +, выполните команду, показанную ниже. Обратите внимание, что это будет работать, только если вы восстанавливаете из папки, которую вы изначально установили с помощью + rdiff-backup +. С помощью + rdiff-backup + вы должны указать имя файла в папке назначения:

sudo rdiff-backup -r now /home//redis/dump.rdb /var/lib/redis/dump.rdb

Подробная информация о параметре + -r + доступна на веб-сайте проекта, приведенном в конце этой статьи.

Установка разрешений для файла dump.rdb

Возможно, у вас уже есть правильные разрешения, если вы восстанавливаете тот же сервер, на котором вы сделали резервную копию.

Если вы скопировали файл резервной копии на новый сервер, вам, вероятно, придется обновить права доступа к файлу.

Давайте рассмотрим права доступа к файлу + dump.rdb + в каталоге + / var / lib / redis / +.

ls -la /var/lib/redis/

Если вы видите что-то вроде этого:

Выход

-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

Вы хотите обновить разрешения, чтобы файл принадлежал пользователю и группе * redis *:

sudo chown redis:redis /var/lib/redis/dump.rdb

Обновите файл, чтобы он также был доступен для записи для группы:

sudo chmod 660 /var/lib/redis/dump.rdb

Теперь снова перечислите содержимое каталога + / var / lib / redis / +:

ls -la /var/lib/redis/

Теперь ваш восстановленный файл + dump.rdb + имеет правильные права доступа:

Выход

-rw-rw----  1 redis redis 4137 Feb 25 15:36 dump.rdb.old

Начиная Redis

Теперь нам нужно снова запустить сервер Redis.

sudo service redis-server start

Проверка содержимого базы данных

Посмотрим, сработала ли реставрация.

Войдите в Redis:

redis-cli

Проверьте запись + shape: треугольники +:

GET shapes:triangles

Выход должен быть:

Выход

"3 sides"

Большой! Наша реставрация сработала.

Выход:

exit

Если вы не используете AOF, все готово! Ваш восстановленный экземпляр Redis должен вернуться в нормальное состояние.

(Необязательно) Включение AOF

Если вы хотите возобновить или начать использовать AOF для отслеживания всех записей в вашу базу данных, следуйте этим инструкциям. Файл AOF должен быть воссоздан из командной строки Redis.

Войдите в Redis:

redis-cli

Включите AOF:

BGREWRITEAOF

Вы должны получить вывод:

Выход

Background append only file rewriting started

Запустите команду + info +. Это сгенерирует совсем немного результата:

info

Перейдите к разделу * Persistence * и убедитесь, что записи * aof * соответствуют показанным здесь. Если * aof_rewrite_in_progress * равен * 0 *, то воссоздание файла AOF завершено.

Выход

# Persistence

. . .

aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

Если подтверждено, что восстановление файла AOF завершено, вы можете выйти из командной строки Redis:

exit

Вы можете снова перечислить файлы в + / var / lib / redis +:

ls /var/lib/redis

Вы должны снова увидеть живой файл + .aof +, такой как + appendonly.aof + или + redis-staging-ao.aof +, вместе с файлом + dump.rdb + и другими файлами резервных копий.

Как только это подтвердится, остановите сервер Redis:

sudo service redis-server stop

Теперь снова включите AOF в файле + redis.conf +:

sudo nano /etc/redis/redis.conf

Затем снова включите AOF, изменив значение + appendonly + на + yes +:

/etc/redis/redis.conf

appendonly

Запустите Redis:

sudo service redis-server start

Если вы хотите проверить содержимое базы данных еще раз, просто пройдите в раздел * Проверка содержимого базы данных * еще раз.

Это оно! Ваш восстановленный экземпляр Redis должен вернуться в нормальное состояние.

Заключение

Резервное копирование данных Redis способом, описанным в этой статье, хорошо, если вы не против резервного копирования данных в каталог на том же сервере.

Самым безопасным подходом, конечно, является резервное копирование на другую машину. Вы можете изучить другие варианты резервного копирования, прочитав эту статью о резервных копиях:

Вы можете использовать многие из этих методов резервного копирования с теми же файлами в каталоге + / var / lib / redis +.

Следите за нашей будущей статьей о миграции и восстановлении Redis. Вы также можете обратиться к примерам документации + rdiff-backup, чтобы узнать, как эффективно использовать` + rdiff-backup + `:

Related