Полное руководство по резервному копированию Redis (с примерами)

В этой статье мы рассмотрим реальный пример процесса резервного копирования Redis, от начала до конца.

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

Давайте приступим!

Что такое Redis?

Redis — это хранилище ключевых значений в памяти с открытым исходным кодом, написанное на языке C.
Redis означает Remote Dictionary Server и используется как база данных, кэш, система очередей и брокер сообщений.

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

Некоторые структуры данных, которые предоставляет Redis, — это строки, списки, множества, хэши и отсортированные множества.

Типы данных Redis →

Для чего используется Redis?

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

  • Кэш: Redis используется в качестве кэша, который является быстрым способом хранения данных в памяти.
  • Хранение сессий: Redis используется для хранения данных сеанса. Запись и чтение данных из Redis происходит очень быстро, что делает его идеальным кандидатом для хранения сессий.
  • Очередь сообщений

Существует множество различных вариантов использования Redis, но это самые распространенные.

Где хранится база данных Redis?

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

Redis регулярно сбрасывает свои данные в RDB-файл на диске в зависимости от того, как настроены снимки.

Конфигурация Redis
Сайт


 file contains your Redis configuration.

The configuration file is located at

 ```/etc/redis/redis.config```

 and straighforward: it's a list of instructions.
You'll find a section called

 ```#### SNAPSHOTTING ####```

 on which you can define if Redis should snapshot its data to the dis and how often it should do it.



```redis.config
save 60 1000
Вход в полноэкранный режим Выйти из полноэкранного режима

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

Подробнее о конфигурации Redis →

Redis также работает с AOF (Append-Only File), который представляет собой способ хранения данных на диске путем протоколирования всех операций записи, полученных сервером.
АОФ не будет рассматриваться в этой статье, но стоит знать о его существовании, особенно когда вам понадобится резервное копирование и восстановление данных.

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

Создать резервную копию Redis довольно просто. Вам нужно сделать свежую копию файла RDB, сжать ее и сохранить в безопасном месте.

Redis предлагает 2 способа «принудительного» создания снимка:


: This will force a snapshot to be taken synchronously.
-

 ```BGSAVE```

: This will force a snapshot to be taken asynchronously.

The easiest way is to use the

 ```SAVE```

 method but it will block all other operations until the snapshot is done.
Using

 ```BGSAVE```

 will make the server continue to accept commands and will not block other operations but you'll have to figure out when the snapshot is this one is asynchronous.

**So, if you want to make a backup you'll need to do the following:**
1. Review / update your Redis configuration.
2. Create a snapshot for your Redis data (known as a "dump"/"rdb file").
3. Save the RDB file to a remote location

### 1. Review / update your Redis configuration.

You'll need to know where your snapshot file will be generated using the redis-cli command described below.

The default location of your Redis config file is

 ```/etc/redis/redis.config```

.
You can also use this command to find the location of your Redis config file:

 ```redis-cli config get dir```

.

You can find the configuration file here [https://redis.io/topics/config](https://redis.io/topics/config).

### 2. Create a snapshot for your Redis data.

#### <u>Using redis-cli

 ```SAVE```

 command</u>
This method will work synchronously to make a snapshot of your Redis database.
Just ssh into your server and run the following command:

Log in to the database command line interface:


Войти в полноэкранный режим Выйти из полноэкранного режима

redis-cli




You might have to authenticate to your database:


```shell{promptHost: 127.0.0.1}
auth YOUR_PASSWORD_HERE
Войти в полноэкранный режим Выйти из полноэкранного режима
SAVE
Войти в полноэкранный режим Выйти из полноэкранного режима

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

OK
(1.23s)
Войти в полноэкранный режим Выход из полноэкранного режима

Затем вы можете выйти из redis-cli, набрав


.

At this stage, the

 ```RDB```

 file will be saved in

 ```/var/lib/redis/```

 and will be named

 ```dump.rdb```

.

#### <u>Using redis-cli

 ```BGSAVE```

 command</u>

Using the asynchronous dump function, you'll need to make sure you are aware of the end of the process.
One way to do it is to use

 ```inotifywait```

 which will notify you when a change to the dump file is made.

### 3. Automate your Redis backups and store them on AWS S3

As stated in [Redis documentation](https://redis.io/docs/manual/persistence/), it's safe to copy the RDB file even if used by your running server:

> Redis is very data backup friendly since you can copy RDB files while the database is running: the RDB is never modified once produced, and while it gets produced it uses a temporary name and is renamed into its final destination atomically using rename(2) only when the new snapshot is complete.
>
> This means that copying the RDB file is completely safe while the server is running. This is what we suggest:
>
> - Create a cron job in your server creating hourly snapshots of the RDB file in one directory, and daily snapshots in a different directory.
> - Every time the cron script runs, make sure to call the find command to make sure too old snapshots are deleted: for instance you can take hourly snapshots for the latest 48 hours, and daily snapshots for one or two months. Make sure to name the snapshots with date and time information.
> - At least one time every day make sure to transfer an RDB snapshot outside your data center or at least outside the physical machine running your Redis instance.


We'll create a script that will create our dump file, then upload to Amazon S3.

#### <u>Create a shell script that will dump the Redis database</u>


```shell
cd ~
mkdir scripts
cd scripts
nano redis_backup.sh
Enter fullscreen mode Выйти из полноэкранного режима

Скопируйте и вставьте в него приведенный ниже скрипт:

#!/bin/bash
rdb_file="/FOLDER_TO_YOUR_REDIS_DUMP_FILE/redis/dump.rdb"
redis_cli="/usr/bin/redis-cli"

DIR=`date +%d-%m-%y`
DEST=~/redis_backups/$DIR
mkdir $DEST

echo save| $redis_cli
exit 1
Enter fullscreen mode Выйти из полноэкранного режима

Отправьте DUMP Redis в ведро AWS S3.

Добавить в


 the following:



```shell
BUCKET_NAME="YOUR_S3_BUCKET_NAME"
aws s3 cp $rdb_file s3://YOUR_S3_BUCKET/redis_backups/ && echo "Backup copied to S3"
Войти в полноэкранный режим Выйти из полноэкранного режима

Запланируйте запуск скрипта на каждый день в полночь

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

chmod +x ~/scripts/db_sync.sh
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем создайте задание cron для запуска скрипта каждый день в полночь:

crontab -e
Войти в полноэкранный режим Выйти из полноэкранного режима
0 0 * * * ~/scripts/redis_backup.sh # take a backup every midnight
Войти в полноэкранный режим Выход из полноэкранного режима

Как восстановить резервную копию Redis

Теперь, когда вы сделали резервную копию, мы рассмотрим, как восстановить ее из окна


 file.

**We recommend you first try this on a fresh Redis server**

### Make sure AOF is disabled
AOF stands for Append-Only File, which will instruct Redis to log all operations in a `.aof` file.
Since we're restoring a backup, we need to disable AOF before restoring the data as we don't want Redis to log all these operations.

Open your configuration file (

```redis.config```

) and make sure

 ```appendonly```

 is set to

 ```no```

.



Войти в полноэкранный режим Выйти из полноэкранного режима

appendonly no




### Stopping the Redis server

Before being able to replace the

 ```dump.rdb```

 file, you'll need to stop the Redis server.



```shell
sudo service redis-server stop
Войти в полноэкранный режим Выйти из полноэкранного режима

Восстановление базы данных Redis

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

sudo cp /home/redis/dump.rdb /home/redis/dump.rdb.bak
Вход в полноэкранный режим Выход из полноэкранного режима

Затем вы можете скопировать резервный файл rdb следующим образом:

sudo cp /redis_backups/20220810/dump.rdb /home/redis/dump.rdb
Войти в полноэкранный режим Выйти из полноэкранного режима

И, наконец, убедитесь, что применили правильные разрешения к файлу dump.rdb:

sudo chmod 660 /home/redis/dump.rdb
Войти в полноэкранный режим Выйти из полноэкранного режима

Повторный запуск сервера Redis

sudo service redis-server start
Вход в полноэкранный режим Выход из полноэкранного режима

Дополнительные ресурсы

  • Официальная документация по Redis: https://redis.io/docs/manual/persistence/
  • Сервис для автоматизации резервного копирования Redis: https://simplebackups.com/redis-backup/

Заключение

Мы рассмотрели, как создавать резервные копии базы данных Redis и восстанавливать их, а также рассмотрели, как автоматизировать этот процесс.

SimpleBackups сэкономит вам много времени на настройку скриптов, обеспечит их бесперебойную работу, и все это без кода и обслуживания.
Он предупредит вас, когда что-то пойдет не так, и позволит хранить резервные копии на многих облачных сервисах хранения данных, таких как Google, DigitalOcean, Wasabi, Dropbox и др….

Оцените статью
devanswers.ru
Добавить комментарий