Разработка, HowTo

Redis: как скопировать базу без простоя проекта

redisАга. У нас проблемы: нам нужно переехать сервер редиса без даунтайма проекта. Но нам надо не только переехать, но еще и данные сохранить.

Чаще всего предлагается решение в виде остановки проекта, копирования базы в новый инстанс, его запуск, переключение проекта и другие танцы.

Существует даже команда migrate, которая гарантирует атомарное копирование ключей и данных.

Но она работает в рамках одной бд (а по дефолту у редиса их целых 16), а так же обладает рядом негативных последствий ввиду своей атомарности. Поэтому подходит она совершенно для других целей.

Сразу на ум приходят репликации🙂 А данное решение их умеет.

Допустим у нас два сервера (у меня они на портах 6379 и 6479 соответственно). И нам нужно переключить проект с первого на второй сервер. Второй нулевой только что поднятый. А с первым ведется работа.

2016-02-24-20:28:27_805x48

Посмотрим, что в каждой из баз покажет команда

keys *

Основной редис

2016-02-24-20:29:30_482x426

Новый редис

2016-02-24-20:29:47_190x32

Как видим пока базы не синхронизированы.

Теперь нужно сделать новую базу репликой старой

> slaveof 127.0.0.1 6379
OK
> info
...
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0

Дополнительно может потребоваться авторизоваться на мастере чтобы началась репликация

config set masterauth <password>

После этого можем опять посмотреть, что в базу скопировалось

keys *

2016-02-24-21:00:18_441x414

Как видим: все данные успешно засинхронизировались (вполне возможно это займет продолжительное время ввиду объема данных).

После того, как репликация завершена нам нужно сделать две вещи:

  • превратить слейва в мастер
  • настроить приложение на работу с новым мастером
slaveof no one

Эта команда выключает копирование данных с мастера (но не удаляет их) и теперь уже дело за настройкой приложения.

Да. Небольшой даунтайм все же был (секунд 10-15), но это гораздо лучше, чем предлагаемые решения.

Однако, обратите внимание, что если вы активно пишете в редис, то при такой миграции баз часть данных можно и потерять.

Почитать про репликации.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s