Перейти к основному содержимому

Перенести данные Redis в облачную базу данных Redis с помощью RedisShake

Вы можете перенести данные Redis и Valkey в Selectel с непрерывной синхронизацией и минимальным простоем с помощью RedisShake.

RedisShake подключается к исходному Redis как реплика. Сначала он переносит снимок данных (RDB) и журнал операций (AOF), а потом непрерывно передает новые изменения в целевой Redis, пока синхронизацию не остановят. Приложения можно переключить на новый Redis в процессе синхронизации данных, поэтому простой сервисов минимальный.

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

Для переноса данных с помощью RedisShake поддерживаются версии 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 запускается в контейнере.

Перенести данные

  1. Установите RedisShake.

  2. Настройте RedisShake.

  3. Запустите синхронизацию.

  4. Опционально: проверьте статус переноса.

  5. Завершите перенос.

1. Установить RedisShake

  1. Скачайте бинарный файл из репозитория RedisShake на GitHub. Вы также можете скачать Docker-образ:

    docker pull ghcr.io/tair-opensource/redisshake:latest
  2. Если Redis защищен паролем, передайте его:

    redis-cli -h 127.0.0.1 -p 6379 -a '<password>'

    Укажите <password> — пароль Redis.

  3. Убедитесь, что исходный Redis доступен из окружения, где будет работать RedisShake:

    redis-cli -h <host> -p <port> ping
    telnet <host> <port>

    Укажите:

    • <host> — адрес Redis;
    • <port> — стандартный порт Redis.
  4. Проверьте состояние кластера и список узлов для Redis Cluster:

    redis-cli -h <host> -p <port> cluster info
    redis-cli -h <host> -p <port> cluster nodes

    Укажите:

    • <host> — адрес Redis;
    • <port> — стандартный порт Redis.
  5. Проверьте использование памяти:

    redis-cli -h <host> -p <port> info memory

    Укажите:

    • <host> — адрес Redis;
    • <port> — стандартный порт Redis.
  6. Повторите шаги 3—5 для проверки целевого Redis.

2. Настроить RedisShake

  1. Откройте CLI.

  2. Откройте файл shake.toml в текстовом редакторе.

  3. Задайте параметры синхронизации. Если исходный или целевой Redis — Redis Cluster, укажите для него cluster = true. Полный справочник параметров shake.toml можно посмотреть в репозитории RedisShake на GitHub.

[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 заполнен и лежит по нужному пути.

  1. Откройте CLI.

  2. Подготовьте docker-compose.yaml:

    services:
    redis-shake:
    image: ghcr.io/tair-opensource/redisshake:latest
    container_name: redis-shake
    volumes:
    - ./shake.toml:/app/shake_sync_env.toml:ro
    - ./data:/app/data
    environment:
    SYNC: "true"
  3. Запустите Docker Compose:

    docker compose up -d

4. Опционально: проверить статус миграции

Во время синхронизации RedisShake постоянно пишет в журнал статус и текущие операции. По журналу можно отследить, сколько изменений еще осталось.

  1. Откройте CLI.

  2. Включите отображение логов RedisShake в реальном времени:

    tail -f data/shake.log
  3. Сверьте количество ключей в исходном и целевом Redis:

    redis-cli -h <source_host> -p <source_port> dbsize
    redis-cli -h <target_host> -p <target_port> dbsize

    Укажите:

    • <source_host> — адрес исходного Redis;
    • <source_port> — порт исходного Redis;
    • <target_host> — адрес целевого Redis;
    • <target_port> — порт целевого Redis.

5. Завершить миграцию

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

  2. Когда все данные перенеслись, остановите RedisShake тем же способом, которым запускали.

    1. Откройте CLI.

    2. Остановите и удалите контейнеры:

      docker compose down