"Недостаточно рабов, чтобы написать" в Google Memorystore (Redis)
У меня есть приложение Node.js, которое подписывается на тему Google PubSub, обрабатывает сообщения и помещает данные в экземпляр Redis, который ранее размещался на Kubernetes Engine. Это работало довольно хорошо, но я решил попробовать использовать Google Memorystore вместо Redis.
Некоторое время Memorystore работал нормально, но потом дела пошли плохо. Вчера мое приложение начало кидать NOREPLICAS Not enough good slaves to write
исключений, и я ничего не мог сделать, чтобы Memorystore снова начал работать. В итоге я удалил экземпляр Memorystory и запустил новый. Теперь, около 4:00 утра, эта проблема снова началась, и около 4:30 утра все полностью сломалось.
Мой сетевой ввод и использование памяти отображаются нормально до тех пор, пока не начнутся эти ошибки (см. Рисунки ниже). Кроме того, ошибка, кажется, будет продолжаться вечно. Около 8 утра я выключил приложение, которое помещает данные в Memorystore, и проблема все еще остается. Я получил доступ к Memorystore через Redis-Cli, чтобы запустить FLUSHALL
, но я просто получаю ту же ошибку, поэтому я даже не могу этого сделать. Сам экземпляр Memorystore продолжает показывать состояние "восстановления", после чего следует короткое время готовности (в котором все еще не удается выполнить запись), а затем снова "восстановление".
Итак, мои конкретные вопросы:
- Что вызывает
NOREPLICAS Not enough good slaves to write
ошибка? Я нахожу только эту ошибку, упомянутую в отчетах о проблемах Github, и обычно ответ "Мы работаем над исправлением этой ошибки". Мы будем благодарны за любую справочную информацию или советы о том, как избежать возникновения этой проблемы. - Если я получаю эту ошибку, как мне заставить Memorystore корректно ее обработать? Учитывая характер приложения, вполне нормально, если это случается так часто, а некоторые данные теряются или у меня возникают простои. Однако сейчас, похоже, единственный способ решить проблему - это удалить экземпляр Memorystore.
Незначительное обновление: в 16:00, когда мое приложение было отключено в течение последних 8 часов, поэтому ничего не отправляло данные или не считывало данные из Memorystore, Memorystore наконец-то снова начал работать. По крайней мере, время безотказной работы начало расти, а память наконец-то стала плоской. Раньше время работы зависало каждые 30–60 секунд, как показано ниже. Несмотря на это, мои вопросы остаются в силе. Отмечу, что проблемы появились ровно в 4 часа утра и исчезли ровно в 4 часа дня. Я не уверен, что это полезная информация.
Обновление 2: испытав сегодня кучу проблем, я подумал, что добавлю некоторые журналы на случай, если это поможет. Я получаю этот журнал, повторяющийся весь день (даже при том, что ничто не связывается с redis).
A 1:S 20 May 10:02:39.244 # Server started, Redis version 3.2.11
A 1:S 20 May 10:02:39.858 # Error reply to PING from master: '-LOADING Redis is loading the dataset in memory'
A 1:S 20 May 10:02:40.887 # Error reply to PING from master: '-LOADING Redis is loading the dataset in memory'
Как и этот:
A 1:S 20 May 10:03:09.501 # Server started, Redis version 3.2.11
A 1:S 20 May 10:03:16.412 * DB loaded from disk: 27.948 seconds
A 1:S 20 May 10:03:16.412 * The server is now ready to accept connections on port 6379
A 1:signal-handler (1526810597) Received SIGTERM scheduling shutdown...
A 1:S 20 May 10:03:17.916 # User requested shutdown...
A 1:S 20 May 10:03:17.916 * Removing the pid file.
A 1:S 20 May 10:03:17.917 # Redis is now ready to exit, bye bye...