Коли переносити 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, плануйте вікно міграції за найповільнішим компонентом.