В настоящее время у меня есть работающий сервер Redis, работающий в облачном экземпляре, и я хочу перенести этот сервер Redis в новый облачный экземпляр и использовать этот экземпляр в качестве моего нового сервера Redis. Если бы это был MySQL, я бы экспортировал БД со старого сервера и импортировал ее на новый сервер. Как я должен сделать это с Redis?
PS: я не ищу настройки репликации. Я хочу полностью перенести сервер Redis на новый экземпляр.
Ответы:
Сохраните снимок базы данных в dump.rdb, запустив
BGSAVE
илиSAVE
из командной строки. Это создаст файл с именем dump.rdb в той же папке, что и ваш сервер Redis. Смотрите список всех команд сервера .Скопируйте этот dump.rdb на другой сервер Redis, на который вы хотите выполнить миграцию. Когда Redis запускается, он ищет этот файл для инициализации базы данных.
источник
appendonly = yes
), установите егоno
до запуска сервера Redis - в противном случае он не будет загружать новый набор данных. Как только набор данных загружен в память, включите его снова, как в memory (config set appendonly yes
), так и в файле конфигурации./etc/redis/redis.conf
, и вы можете искать через него , чтобы найти , где ваши.rdb
файлы:cat /etc/redis/redis.conf | grep "rdb"
. В моем случае это/var/lib/redis
redis-cli config get dir
даст вам каталог, в котором.rdb
хранится.Сначала создайте дамп на сервере А.
Это обеспечивает
dump.rdb
полную актуальность и показывает нам, где оно хранится (/var/lib/redis/dump.rdb
в данном случае).dump.rdb
также периодически записывается на диск автоматически.Затем скопируйте его на сервер B:
Остановите сервер Redis на B, скопируйте dump.rdb (убедитесь, что разрешения такие же, как и раньше), затем запустите.
Версия Redis на B должна быть больше или равна версии A, иначе вы можете столкнуться с проблемами совместимости .
источник
CONFIG GET dir
, которая вернулась"/usr/local/var/db/redis"
Если у вас есть соединение между серверами, лучше настроить репликацию (что тривиально, в отличие от SQL) с новым экземпляром в качестве подчиненного узла - тогда вы можете переключить новый узел на ведущий с помощью одной команды и выполнить перемещение с помощью нулевое время простоя
источник
Также возможно перенести данные с помощью команды SLAVEOF:
Убедитесь, что вы получили ключи с
KEYS *
. Вы также можете протестировать новый экземпляр любым другим способом, а когда закончите, просто включите репликацию:источник
В настоящее время вы также можете использовать MIGRATE, начиная с версии 2.6.
Я должен был использовать это, так как я хотел переместить данные только в одну базу данных, а не во все. Два экземпляра Redis живут на двух разных машинах.
Если вы не можете подключиться напрямую к Redis-2 из Redis-1, используйте привязку порта ssh:
Небольшой скрипт для зацикливания всех ключей с использованием KEYS и MIGRATE каждого ключа. Это Perl, но, надеюсь, вы поняли:
См. Http://redis.io/commands/migrate для получения дополнительной информации.
источник
Чтобы проверить, куда должен быть помещен файл dump.rdb при импорте данных redis,
запустить клиент
и
затем
Здесь / Users / Admin - это расположение файла dump.rdb, который читается с сервера, и поэтому этот файл необходимо заменить.
источник
Вы также можете использовать RDD
он может создавать и восстанавливать работающий сервер Redis и разрешать фильтровать / сопоставлять / переименовывать ключи дампа
источник
Ключевые элементы миграции с нулевым временем простоя:
CONFIG SET slave-read-only no
)Коротко:
Кроме того, у 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
источник
Я также хочу сделать то же самое: перенести базу данных из автономного экземпляра redis в другой экземпляр redis (redis sentinel).
Поскольку данные не являются критическими (данные сеанса), я попробую https://github.com/yaauie/redis-copy .
источник
Простой способ экспорта / резервного копирования данных Redis (создания файла дампа), который я нашел, состоит в том, чтобы запустить сервер через командную строку с флагом slaveof и создать живую реплику следующим образом (при условии, что исходный Redis - это 1.2.3.4 на порту 6379):
источник
Я только что опубликовал утилиту интерфейса командной строки для npm и github, которая позволяет копировать ключи, соответствующие заданному шаблону (даже *), из одной базы данных Redis в другую.
Вы можете найти утилиту здесь:
https://www.npmjs.com/package/redis-utils-cli
источник
Редис-дамп наконец-то сработал для меня. Его документация содержит пример того, как вывести базу данных Redis и вставить данные в другую.
источник