Как переместить базу данных Redis с одного сервера на другой? - PullRequest
165 голосов
/ 15 мая 2011

В настоящее время у меня есть работающий сервер Redis, работающий в облачном экземпляре, и я хочу перенести этот сервер Redis в новый облачный экземпляр и использовать этот экземпляр в качестве моего нового сервера Redis. Если бы это был MySQL, я бы экспортировал БД со старого сервера и импортировал ее на новый сервер. Как я должен сделать это с Redis?

P.S .: Я не ищу настройки репликации. Я хочу полностью перенести сервер Redis на новый экземпляр.

Ответы [ 13 ]

219 голосов
/ 25 февраля 2014

Сначала создайте дамп на сервере А.

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, скопируйте 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, иначе вы можете столкнуться с проблемами совместимости .

100 голосов
/ 15 мая 2011

Сохраните снимок базы данных в dump.rdb, запустив BGSAVE или SAVE из командной строки.Это создаст файл с именем dump.rdb в той же папке, что и ваш сервер Redis.См. Список всех серверных команд .

Скопируйте этот файл dump.rdb на другой сервер Redis, на который вы хотите выполнить миграцию.Когда Redis запускается, он ищет этот файл для инициализации базы данных.

33 голосов
/ 15 мая 2011

Если у вас есть соединение между серверами, лучше настроить репликацию (что тривиально, в отличие от SQL) с новым экземпляром в качестве подчиненного узла - тогда вы можете переключить новый узел на master одной командой иход с нулевым временем простоя.

17 голосов
/ 16 августа 2011

верьте или нет, я только что сделал статью для этого:

http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another

Но как мне узнать, когда передача данных завершена междухозяин и раб?Вы можете использовать команду INFO.

14 голосов
/ 07 февраля 2014

В настоящее время вы также можете использовать MIGRATE, начиная с версии 2.6.

Мне пришлось использовать это, так как я хотел переместить данные только в одну базу данных, а не во все. Два экземпляра Redis живут на двух разных машинах.

Если вы не можете напрямую подключиться к Redis-2 из Redis-1, используйте привязку порта ssh:

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

Небольшой скрипт для зацикливания всех ключей с помощью 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.

13 голосов
/ 22 сентября 2014

Также возможно перенести данные с помощью команды SLAVEOF:

SLAVEOF old_instance_name old_instance_port

Убедитесь, что вы получили ключи с KEYS *. Вы также можете протестировать новый экземпляр любым другим способом, а когда закончите, просто включите репликацию:

SLAVEOF NO ONE
4 голосов
/ 31 декабря 2014

Чтобы проверить, куда должен быть помещен файл dump.rdb при импорте данных redis,

запуск клиента

$redis-cli

и

затем

redis 127.0.0.1:6379> CONFIG GET *
 1) "dir"
 2) "/Users/Admin"

Здесь / Users / Admin - это расположение файла dump.rdb, который читается с сервера, и поэтому этот файл необходимо заменить.

2 голосов
/ 19 сентября 2012

Вы также можете использовать rdd

, он может создавать и восстанавливать работающий сервер Redis и разрешать фильтровать / сопоставлять / переименовывать ключи дампа

1 голос
/ 30 ноября 2017

Простой способ экспорта / резервного копирования данных 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
0 голосов
/ 16 июня 2017

redis-dump наконец-то сработало для меня.Его документация содержит пример того, как вывести базу данных Redis и вставить данные в другую.

...