Назад | Перейти на главную страницу

Для модели постоянства подчиненного Redis, есть ли лучший способ, кроме rsync rdb, от подчиненного устройства к главному?

Размер rdb моей машины redis составляет около 1 ГБ. Мое приложение интенсивно использует redis и не может позволить мастеру обрабатывать bgsave, иначе это замедлит работу всей системы на главной машине. Итак, я должен запретить мастеру выполнять bgsave и позволить только подчиненному выполнять работу с постоянством.

Проблема возникает, когда необходимо перезапустить мастер. Он должен скопировать rdb из ведомого устройства, чтобы загрузить исходные данные в память. Этот процесс занял около 30-60 секунд. Если мой redis станет больше, время на процесс увеличится.

Я пробовал NFS, чтобы позволить ведущему и ведомому использовать один и тот же rdb для чтения / записи, но процесс репликации заставляет ведущего выполнять bgsave при первом подключении ведомого к ведущему, и он не может выполнить эту работу, потому что исходный rdb (ведущий) и целевой rdb ( раб) находится там же.

Возникает вопрос: «Есть ли лучший способ выполнить эту первоначальную загрузку rdb в память?».

Короткий ответ заключается в том, что по сути не существует «более быстрого» способа ускорить загрузку данных в Redis из AOF или RDB. Возможно небольшое увеличение по сравнению с более быстрыми дисками, но, как вы заметили, это операция линейного времени.

Длинный ответ заключается в том, что вы выходите за пределы своей текущей архитектуры, и вам будет полезно ее переосмыслить. В этом сценарии есть несколько вариантов, которые подробно описаны в Интернете (ваш собственный опыт должен будет подтвердить, какое решение лучше всего подходит для вас).

Несколько вариантов, сначала самые сложные:

  • 2-3 подчиненных устройства и автоматическое переключение при отказе, координируется ZooKeeper
  • использовать Redis Sentinel
  • twemproxy

Разделение ваших данных на данном этапе не поможет вам, ИМО, поскольку ваш набор данных все еще относительно невелик. В целом, при сохранении настойчивости вам необходимо решить проблему доступности и координации мастера.

Наконец, более сложный ответ выше включает горизонтальное масштабирование. Вы испытываете стресс в BGSAVE с одним хостом и небольшим набором данных: вам следует подумать о масштабировании по вертикали, чтобы решить вашу непосредственную проблему (т.е. более мощная машина для мастера). Таким образом вы полностью уклонитесь от проблемы BGSAVE на подчиненном устройстве / перезапуске главного устройства / загрузке с подчиненного устройства, по крайней мере, пока. Скорее всего, в краткосрочной перспективе это также окажется более рентабельным.