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

Ответ 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

Ключевыми элементами миграции с нулевым временем простоя являются:

  • репликация (http://redis.io/commands/SLAVEOF)
  • возможность записи в подчиненное устройство при переключении приложений (CONFIG SET slave-read-only no)

Короче:

  • настроить цель 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 и вставлять данные в другую.