Перенести данные Redis в облачную базу данных Redis
Вы можете перенести данные Redis и Valkey в Selectel с непрерывной синхронизацией и минимальным простоем с помощью RedisShake.
RedisShake подключается к исходному Redis как реплика. Сначала он переносит снимок данных (RDB) и журнал операций (AOF), а потом непрерывно передает новые изменения в целевой Redis, пока синхронизацию не остановят. Приложения можно переключить на новый Redis, пока синхронизация еще идет, поэтому простой минимальный.
Способ подходит для переноса между площадками и внутри одного окружения, поддерживает разные топологии, включая Redis с Sentinel. Поддерживаются Redis от 2.8 до 7.4; желательно, чтобы версии исходного и целевого Redis совпадали.
Требования
Для небольших инсталляций RedisShake хватит 2 ядер CPU, 4 ГБ RAM и 10 ГБ на диске.
Место на диске зависит от размера файлов RDB и AOF (параметры sync_rdb и sync_aof).
Для больших объемов данных нужную производительность CPU стоит оценить по тестам в документации RedisShake.
Дополнительно нужны:
- сетевой доступ из окружения RedisShake к исходному и целевому Redis;
- RedisShake 4.x;
- Docker и Docker Compose или кластер Kubernetes, если RedisShake запускается в контейнере.
Перенести данные
-
Optional: проверьте статус переноса.
1. Установить RedisShake
-
Скачайте бинарный файл из репозитория RedisShake на GitHub. Вы также можете скачать Docker-образ:
docker pull ghcr.io/tair-opensource/redisshake:latest -
Если Redis защищен паролем, передайте его:
redis-cli -h 127.0.0.1 -p 6379 -a '<password>'Укажите
<password>— пароль Redis. -
Убедитесь, что исходный Redis доступен из окружения, где будет работать RedisShake:
redis-cli -h <host> -p <port> pingtelnet <host> <port>Укажите:
<host>— адрес Redis;<port>— стандартный порт Redis.
-
Проверьте состояние кластера и список узлов для Redis Cluster:
redis-cli -h <host> -p <port> cluster inforedis-cli -h <host> -p <port> cluster nodesУкажите:
<host>— адрес Redis;<port>— стандартный порт Redis.
-
Проверьте использование памяти:
redis-cli -h <host> -p <port> info memoryУкажите:
<host>— адрес Redis;<port>— стандартный порт Redis.
-
Повторите шаги 3—5 для проверки целевого Redis.
2. Настроить RedisShake
-
Откройте CLI.
-
Откройте файл
shake.tomlв текстовом редакторе. -
Задайте параметры синхронизации. Если исходный или целевой Redis — Redis Cluster, укажите для него
cluster = true. Полный справочник параметровshake.tomlв репозитории RedisShake на GitHub.
Redis → Redis
Redis с Sentinel → Redis
Redis → Redis с Sentinel
Общие параметры
[sync_reader]
cluster = false
address = "<source_address>:6379"
username = ""
password = ""
tls = false
sync_rdb = true
sync_aof = true
# prefer_replica = false
# try_diskless = false
[redis_writer]
cluster = false
address = "<target_address>:6379"
username = ""
password = ""
tls = false
off_reply = false
Укажите:
<source_address>— адрес исходного Redis;<target_address>— адрес целевого Redis.
3. Запустить синхронизацию
Перед запуском проверьте, что конфигурационный файл shake.toml заполнен и лежит по нужному пути.
Docker Compose
Docker
Бинарный файл
Kubernetes
-
Откройте CLI.
-
Подготовьте
docker-compose.yaml:services:redis-shake:image: ghcr.io/tair-opensource/redisshake:latestcontainer_name: redis-shakevolumes:- ./shake.toml:/app/shake_sync_env.toml:ro- ./data:/app/dataenvironment:SYNC: "true" -
Запустите Docker Compose:
docker compose up -d
4. Optional: проверить статус миграции
Во время синхронизации RedisShake постоянно пишет в журнал статус и текущие операции. По журналу можно отследить, сколько изменений еще осталось.
-
Откройте CLI.
-
Включите отображение логов RedisShake в реальном времени:
tail -f data/shake.log -
Сверьте количество ключей в исходном и целевом Redis:
redis-cli -h <source_host> -p <source_port> dbsizeredis-cli -h <target_host> -p <target_port> dbsizeУкажите:
<source_host>— адрес исходного Redis;<source_port>— порт исходного Redis;<target_host>— адрес целевого Redis;<target_port>— порт целевого Redis.
5. Завершить миграцию
-
Переключите приложения на новый Redis, пока синхронизация еще работает. Так не потеряются изменения, сделанные до переключения.
-
Когда все данные перенеслись, остановите RedisShake тем же способом, которым запускали.
Docker Compose
Docker
Бинарный файл
Kubernetes
-
Откройте CLI.
-
Остановите и удалите контейнеры:
docker compose down