Как переместить базу данных redis с одного сервера на другой?
В настоящее время у меня есть живой сервер redis, запущенный на экземпляре облака, и я хочу перенести этот redis-сервер на новый экземпляр облака и использовать этот экземпляр в качестве моего нового сервера redis. Если бы это был MySQL, я бы экспортировал БД со старого сервера и импортировал его на новый сервер. Как мне сделать это с помощью redis?
P.S.: Я не хочу настраивать репликацию. Я хочу полностью перенести сервер redis на новый экземпляр.
Ответы
Ответ 1
Сохраните spanshot базы данных в dump.rdb, либо запустив BGSAVE
, либо SAVE
из командной строки. Это создаст файл с именем dump.rdb в той же папке, что и ваш сервер redis. См. Список всех серверов commands.
Скопируйте этот dump.rdb на другой сервер redis, к которому вы хотите перейти. Когда redis запускается, он ищет этот файл для инициализации базы данных.
Ответ 2
Сначала создайте дамп на сервере А.
A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK
Это гарантирует, что dump.rdb
полностью обновлен и показывает нам, где он хранится (/var/lib/redis/dump.rdb
в этом случае). dump.rdb
также автоматически записывается на диск.
Затем скопируйте его на сервер B:
A$ scp /var/lib/redis/dump.rdb [email protected]:/tmp/dump.rdb
Остановите сервер Redis на B, скопируйте dump.rdb(чтобы разрешения были такими же, как и раньше), затем запустите.
B$ sudo service redis-server stop
B$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ sudo chown redis: /var/lib/redis/dump.rdb
B$ sudo service redis-server start
Версия Redis на B должна быть больше или равна версии A, или вы можете нажать проблемы совместимости.
Ответ 3
Если у вас есть связь между серверами, лучше настроить репликацию (что тривиально, в отличие от SQL) с новым экземпляром в качестве ведомого node - тогда вы можете переключить новый node на master с помощью одиночная команда и сделать ход с нулевым временем простоя.
Ответ 4
верить или нет, я просто сделал для него статью:
http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another
Но как узнать, когда передача данных завершена между ведущим и ведомым? Вы можете использовать команду INFO.
Ответ 5
В настоящее время вы также можете использовать MIGRATE, доступный с версии 2.6.
Мне пришлось использовать это, так как я только хотел переместить данные в одну базу данных, а не все. Два экземпляра Redis живут на двух разных машинах.
Если вы не можете напрямую подключиться к Redis-2 из Redis-1, используйте привязку ssh port:
ssh [email protected] -L 1234:127.0.0.1:6379
Маленький script, чтобы закодировать все ключи с помощью KEYS и MIGRATE каждой клавиши. Это Perl, но, надеюсь, вы поняли:
foreach ( $redis_from->keys('*') ) {
$redis_from->migrate(
$destination{host}, # localhost in my example
$destination{port}, # 1234
$_, # The key
$destination{db},
$destination{timeout}
);
}
Подробнее см. http://redis.io/commands/migrate.
Ответ 6
Также возможно выполнить миграцию данных с помощью команды SLAVEOF:
SLAVEOF old_instance_name old_instance_port
Убедитесь, что вы получили ключи с KEYS *
. Вы также можете протестировать новый экземпляр любым другим способом, и когда вы закончите, просто включите репликацию:
SLAVEOF NO ONE
Ответ 7
Чтобы проверить, где должен располагаться dump.rdb при импорте данных redis,
запустить клиент
$redis-cli
и
то
redis 127.0.0.1:6379> CONFIG GET *
1) "dir"
2) "/Users/Admin"
Здесь/Users/Admin - это местоположение dump.rdb, которое считывается с сервера, и поэтому это файл, который необходимо заменить.
Ответ 8
вы также можете использовать rdd
он может выгружать и восстанавливать запущенный сервер redis и разрешать ключи фильтра/совпадения/переименования
Ответ 9
Я также хочу сделать то же самое: перенести db из отдельного экземпляра redis в другой экземпляр redis (redis sentinel).
Поскольку данные не являются критическими (данные сеанса), я дам https://github.com/yaauie/redis-copy попытку.
Ответ 10
Я только что опубликовал утилиту интерфейса командной строки для npm и github, которая позволяет копировать ключи, соответствующие данному шаблону (даже *) из одной базы данных Redis в другую.
Вы можете найти утилиту здесь:
https://www.npmjs.com/package/redis-utils-cli
Ответ 11
Ключевыми элементами миграции с нулевым временем простоя являются:
Короче:
- настроить цель redis (empty) как подчиненный источника redis (с вашими данными)
- ждать завершения репликации
- разрешает запись целевому redis (который в настоящее время является подчиненным)
- переключите свои приложения на цель redis
- дождитесь окончания потока данных от master до slave
- превратить цель redis из master в slave
Кроме того, у redis есть опции, которые позволяют отключить источник redis, чтобы принимать записи сразу после отсоединения цели:
-
min-slaves-to-write
-
min-slaves-max-lag
В этом разделе
Очень хорошее объяснение команды RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
И даже их интерактивный инструмент для переноса: https://github.com/RedisLabs/redis-migrate
Ответ 12
Простым способом, который я обнаружил для экспорта/резервного копирования данных Redis (создать файл дампа), является запуск сервера через командную строку с флагом slaveof и создание живой реплики следующим образом (если исходный код Redis равен 1.2.3.4 на порту 6379):
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6397
Ответ 13
redis-dump, наконец, работал у меня. В его документации приведен пример того, как сбрасывать базу данных Redis и вставлять данные в другую.