Как переместить базу данных redis с одного сервера на другой?
в настоящее время у меня есть живой сервер redis, работающий на облачном экземпляре, и я хочу перенести этот сервер redis на новый экземпляр облака и использовать этот экземпляр в качестве моего нового сервера redis. Если бы это был MySQL, я бы экспортировал БД со старого сервера и импортировал его на новый сервер. Как я должен сделать это с redis?
П. С.: Я не пытаюсь настроить репликацию. Я хочу полностью перенести сервер Redis на новый экземпляр.
13 ответов:
сохранить spanshot базы данных в дамп.rdb либо работает
BGSAVEилиSAVEиз командной строки. Это создаст файл с именем dump.rdb в той же папке, что и ваш сервер redis. Смотрите список всех серверов команды.скопируйте этот дамп.rdb на другой сервер redis, на который требуется выполнить миграцию. Когда Redis запускается, он ищет этот файл для инициализации базы данных.
во-первых, создайте дамп на сервере A.
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 myuser@B:/tmp/dump.rdbостановите сервер Redis на B, скопируйте дамп.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 должна быть больше или равна этому А, или вы можете ударить проблемы совместимости.
Если у вас есть подключение между серверами, лучше настроить репликацию (которая тривиальна, в отличие от SQL) с новым экземпляром в качестве подчиненного узла - тогда вы можете переключить новый узел на master с помощью одной команды и выполнить перемещение с нулевым временем простоя.
верьте или нет, я просто сделал статью для него:
http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another
но как я узнаю, когда передача данных завершена между ведущим и ведомым устройством? Вы можете использовать команду INFO.
В настоящее время вы также можете использовать MIGRATE, доступный с 2.6.
Я должен был использовать это, так как я хотел только переместить данные в одной базе данных, а не все из них. Два экземпляра Redis работают на двух разных машинах.
Если вы не можете подключиться непосредственно к Redis-2 из Redis-1, Используйте привязку порта ssh:
ssh [email protected] -L 1234:127.0.0.1:6379небольшой скрипт для циклического перебора всех ключей с помощью ключей и переноса каждого ключа. Это 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 для получения дополнительной информации.
также можно перенести данные с помощью команды SLAVEOF:
SLAVEOF old_instance_name old_instance_portпроверьте, что вы получили ключи с
KEYS *. Вы можете проверить новый экземпляр любым другим способом, и когда вы закончите, просто включите репликацию:SLAVEOF NO ONE
чтобы проверить, где свалка.rdb должен быть размещен при импорте данных redis,
запустить клиент
$redis-cliи
затем
redis 127.0.0.1:6379> CONFIG GET * 1) "dir" 2) "/Users/Admin"здесь /Users/Admin-это расположение дампа.РДБ, который считывается с сервера и поэтому это файл, который должен быть заменен.
вы также можете использовать rdd
Он может сбрасывать и восстанавливать запущенный сервер redis и разрешать фильтровать/сопоставлять / переименовывать ключи дампов
простой способ, который я нашел для экспорта / резервного копирования данных Redis (создать файл дампа), - это запустить сервер через командную строку с флагом slaveof и создать живую реплику следующим образом (предполагая, что исходный Redis-1.2.3.4 на порту 6379):
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
Я также хочу сделать то же самое: перенести БД из автономного экземпляра redis в другой экземпляр redis(Redis sentinel).
поскольку данные не критичны(данные сеанса), я дам https://github.com/yaauie/redis-copy попробуй.
Я только что опубликовал утилиту интерфейса командной строки для npm и github, которая позволяет копировать ключи, соответствующие заданному шаблону (даже *) из одной базы данных Redis в другую.
вы можете найти здесь, утилита:
ключевые элементы миграции с нулевым временем простоя:
- репликация (http://redis.io/commands/SLAVEOF)
- возможность записи в ведомое устройство во время переключения приложений (
CONFIG SET slave-read-only no)короче:
- установите целевой redis (пустой) в качестве ведомого источника redis (с вашими данными)
- дождитесь завершения репликации
- разрешить запись в целевой redis (который в настоящее время раб)
- переключите свои приложения на целевой redis
- дождитесь завершения потока данных от ведущего устройства к ведомому
- поверните цель redis от мастера к рабу
кроме того, у redis есть опции, которые позволяют отключить исходный redis для приема записей сразу после отсоединения цели:
min-slaves-to-writemin-slaves-max-lagэта тема рассматривается
очень хорошее объяснение от команды RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
и даже их интерактивный инструмент для миграции:https://github.com/RedisLabs/redis-migrate
redis-dump наконец-то работал на меня. В его документации приведен пример того, как сбросить базу данных Redis и вставить данные в другую.
Comments