Site icon 8HOST.COM

Резервное копирование данных Redis на сервере Ubuntu 14.04

Redis – это размещаемое в памяти распределённое хранилище данных.

Это руководство поможет выполнить резервное копирование БД Redis на сервере Ubuntu 14.04.

Данные Redis по умолчанию хранятся на диске в файле .rdb, который является снапшотом набора данных Redis. Этот снапшот создаётся в указанные интервалы времени.

Требования

Запустите Redis и убедитесь, что он работает должным образом. Также рекомендуется установить пароль для Redis и запомнить его. Пароли хранятся в конфигурационном файле /etc/redis/redis.conf.

1: Каталог данных Redis

Redis хранит данные в отдельном каталоге на сервере. Этот каталог и нужно скопировать. Но для начала его нужно найти.

В Ubuntu и других дистрибутивах Linux Redis хранит данные в каталоге /var/lib/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>

Теперь используйте следующие команды, которые пройдут аутентификацию и найдут необходимый каталог:

auth insert-redis-password-here
config get dir

Вывод последней команды:

1) "dir"
2) "/var/lib/redis"

Запомните или запишите каталог, содержащий данные Redis.

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

Закройте командную строку Redis:

exit

Проверьте найденный каталог:

ls /var/lib/redis

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

Примечание: О персистентности Redis можно прочесть здесь.

В целом, файл .rdb является текущим снапшотом, а .aof хранит историю Redis. Оба эти файла стоит скопировать.

2: Добавление данных (опционально)

Создайте тестовые данные в БД Redis, чтобы выполнить их резервное копирование.

Примечание: Если в БД Redis уже есть данные, пропустите этот раздел.

Откройте командную строку Redis:

redis-cli

Пройдите аутентификацию:

auth insert-redis-password-here

Добавьте данные. Каждая из команд должна вернуть OK.

SET shapes:triangles "3 sides"
SET shapes:squares "4 sides"

Убедитесь в том, что данные добавлены в БД:

GET shapes:triangles

Эта команда должна вернуть:

"3 sides"
"4 sides"

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

save

Затем закройте строку:

exit

При желании проверьте содержимое файла дампа. Он должен содержать только что добавленные данные в машиночитаемом виде:

sudo cat /var/lib/redis/dump.rdb
REDIS0006?shapes:squares4 sidesshapes:triangles3 sides??o????C

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

На официальном сайте программы говорится, что Redis позволяет очень легко выполнить резервное копирование, поскольку файлы реляционной БД можно скопировать во время работы БД. Реляционная база данных не изменяется с момента создания и использует временное имя до тех пор, пока снапшот не будет закончен, после чего она будет переименована при помощи rename(2).

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

sudo cp /var/lib/redis/dump.rdb /home/8host/redis-backup-001

Здесь Redis временно сохранит контент. Но этой команды недостаточно, чтобы создать полноценную копию. После этого данные нужно сохранить.

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

Сохранение состояния БД

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

Откройте командную строку и выполните команду save:

save

Вывод команды выглядит так:

OK
(1.08s)

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

Но команда cp создаст копию только один раз, а резервное копирование необходимо выполнять регулярно. Для этого рекомендуется использовать инструмент cron, который позволяет автоматизировать процессы.

4: Автоматизация резервного копирования

Этот раздел покажет, как настроить автоматическое резервное копирование данных Redis.

Для этого существует несколько инструментов, среди которых rdiff-backup – инструмент командной строки для резервного копирования данных. Скорее всего, этот инструмент ещё не установлен на сервер. Чтобы установить его, введите:

sudo apt-get install -y rdiff-backup

Теперь попробуйте создать резервную копию данных Redis в домашнем каталоге. Для примера в руководстве используется условный каталог /home/8host.

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

Оператор –preserve-numerical-ids сохранит права исходного и целевого каталога.

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

Как и cp, эта команда создаст одноразовую копию данных, но она позволяет сразу скопировать весь каталог /var/lib/redis.

Теперь нужно автоматизировать резервное копирование при помощи демона cron. Откройте crontab системы:

sudo crontab -e

Примечание: Если ранее вы не использовали crontab на этом сервере, откройте любой удобный текстовый редактор в командной строке.

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

0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/8host/redis

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

Также для настройки ежедневных бэкапов можно использовать такую запись:

@daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/8host/redis

Примечание: Подробнее о работе cron читайте в этой статье.

Теперь резервное копирование будет выполняться ежедневно. Проверить копию данных можно на следующий день. Можно также временно уменьшить интервал между копиями и проверить данные раньше.

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

ls -l /home/8host/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 успешно настроен.

Заключение

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

Подробнее об инструменте rdiff-backup можно узнать в официальной документации инструмента.