Когда переносить Redis и как выбрать способ
Redis переносят при смене хостинга, апгрейде сервера или переходе с shared-тарифа на VDS. Выбор способа зависит от того, можно ли остановить приложение на несколько минут и сколько данных хранится в базе.
Есть три рабочих варианта: снимок RDB, журнал AOF и живая репликация через replicaof. Для базы до 1 ГБ подходит RDB-снепшот. Для баз с более строгими требованиями к сохранности каждой записи используют AOF. Если простой недопустим — переносят через репликацию.
Перенос через RDB-снепшот
RDB — это бинарный дамп всей базы в один файл dump.rdb. Способ подходит, если можно остановить запись на 1-2 минуты.
На старом сервере форсируем сохранение снепшота и копируем файл:
redis-cli -h 127.0.0.1 -p 6379 SAVE
scp /var/lib/redis/dump.rdb root@newserver:/var/lib/redis/dump.rdb
На новом сервере Redis должен быть остановлен на момент копирования файла, иначе процесс перезапишет его собственным снепшотом при следующем сохранении. Путь к файлу задаётся директивами dir и dbfilename в redis.conf.
Перенос через AOF-журнал
AOF записывает каждую команду изменения данных в файл appendonly.aof. При переносе через AOF теряется меньше данных, чем при RDB, потому что журнал можно синхронизировать с диском каждую секунду.
Включите AOF на старом сервере заранее, дождитесь ротации и перенесите каталог с данными:
redis-cli CONFIG SET appendonly yes
redis-cli BGREWRITEAOF
rsync -avz /var/lib/redis/appendonlydir/ root@newserver:/var/lib/redis/appendonlydir/
После копирования в redis.conf на новом сервере укажите appendonly yes и запустите сервис — Redis восстановит состояние, проигрывая журнал.
Живая миграция через replicaof
Команда replicaof (в старых версиях — slaveof) превращает новый сервер в реплику старого. Данные копируются автоматически, без остановки приложения.
redis-cli -h newserver -p 6379 REPLICAOF oldserver 6379
redis-cli -h newserver -p 6379 INFO replication
Дождитесь строки master_link_status:up и совпадения master_repl_offset на обеих сторонах. После этого переключите приложение на новый адрес и отключите репликацию командой REPLICAOF NO ONE.
Особенности переноса Redis Cluster
В кластерном режиме нельзя просто скопировать один dump.rdb — данные разбиты по 16384 хэш-слотам между узлами. Добавляйте новые узлы в кластер командой redis-cli --cluster add-node, а затем перераспределяйте слоты через redis-cli --cluster reshard.
| Параметр | RDB | AOF | replicaof |
|---|---|---|---|
| Простой | 1-2 минуты | 1-2 минуты | near-zero |
| Риск потери данных | средний | низкий | минимальный |
| Подходит для кластера | нет | нет | да |
Проверка данных после переноса
Сравните количество ключей и контрольные значения на обоих серверах:
redis-cli -h oldserver DBSIZE
redis-cli -h newserver DBSIZE
redis-cli -h newserver INFO keyspace
Проверьте TTL у ключей с истечением срока действия — при переносе через RDB и AOF относительное время жизни ключа сохраняется корректно. Полный порядок действий для финальной сверки сайта описан в чек-листе проверки после миграции.
Итог: чек-лист миграции Redis
- Определите допустимое время простоя и выберите RDB, AOF или replicaof.
- Зафиксируйте версию Redis — миграция между 6.x и 7.x проходит без проблем, но возможности проверьте заранее.
- Перенесите файл конфигурации
redis.confотдельно, не полагаясь на значения по умолчанию. - Сверьте DBSIZE и ключевые счётчики на старом и новом сервере.
- Обновите адрес подключения в приложении и снимите старый сервер с нагрузки только после проверки.
Если рядом с Redis переносится ещё и база MySQL или документная база вроде MongoDB, планируйте окно миграции по самому медленному компоненту.