Размер rdb моей машины redis составляет около 1 ГБ. Мое приложение интенсивно использует redis и не может позволить мастеру обрабатывать bgsave, иначе это замедлит работу всей системы на главной машине. Итак, я должен запретить мастеру выполнять bgsave и позволить только подчиненному выполнять работу с постоянством.
Проблема возникает, когда необходимо перезапустить мастер. Он должен скопировать rdb из ведомого устройства, чтобы загрузить исходные данные в память. Этот процесс занял около 30-60 секунд. Если мой redis станет больше, время на процесс увеличится.
Я пробовал NFS, чтобы позволить ведущему и ведомому использовать один и тот же rdb для чтения / записи, но процесс репликации заставляет ведущего выполнять bgsave при первом подключении ведомого к ведущему, и он не может выполнить эту работу, потому что исходный rdb (ведущий) и целевой rdb ( раб) находится там же.
Возникает вопрос: «Есть ли лучший способ выполнить эту первоначальную загрузку rdb в память?».
Короткий ответ заключается в том, что по сути не существует «более быстрого» способа ускорить загрузку данных в Redis из AOF или RDB. Возможно небольшое увеличение по сравнению с более быстрыми дисками, но, как вы заметили, это операция линейного времени.
Длинный ответ заключается в том, что вы выходите за пределы своей текущей архитектуры, и вам будет полезно ее переосмыслить. В этом сценарии есть несколько вариантов, которые подробно описаны в Интернете (ваш собственный опыт должен будет подтвердить, какое решение лучше всего подходит для вас).
Несколько вариантов, сначала самые сложные:
Разделение ваших данных на данном этапе не поможет вам, ИМО, поскольку ваш набор данных все еще относительно невелик. В целом, при сохранении настойчивости вам необходимо решить проблему доступности и координации мастера.
Наконец, более сложный ответ выше включает горизонтальное масштабирование. Вы испытываете стресс в BGSAVE
с одним хостом и небольшим набором данных: вам следует подумать о масштабировании по вертикали, чтобы решить вашу непосредственную проблему (т.е. более мощная машина для мастера). Таким образом вы полностью уклонитесь от проблемы BGSAVE
на подчиненном устройстве / перезапуске главного устройства / загрузке с подчиненного устройства, по крайней мере, пока. Скорее всего, в краткосрочной перспективе это также окажется более рентабельным.