Контекст:
У нас есть кластер Cassandra с 3 узлами, развернутыми как Stateful Set в Openshift. Три узла настроены в одном центре обработки данных, в одной стойке.
Я также сделал скрипт для проверки ошибок уровня согласованности Cassandra. Он работает как модуль в Openshift, подключается к кластеру и выполняет запрос выбора в цикле. Он знает IP-адреса всех узлов Cassandra.
Проблема:
Если я уменьшу номер реплики с 3 до 2 в наборе с отслеживанием состояния (который также запускается nodetool drain
на этом узле) скрипт больше не может подключиться к кластеру. Я получаю следующую ошибку:
cassandra.cluster.NoHostAvailable: ('Невозможно подключиться к каким-либо серверам', {'172.17.0.10': OSError (Нет, «Попытка подключиться к [('172.17.0.10', 9042)]. Последняя ошибка: истекло время ожидания») , '172.17.0.9': AuthenticationFailed ('Не удалось пройти аутентификацию на 172.17.0.9: Ошибка или с сервера: code = 0100 [Bad credentials] message = "Ошибка при аутентификации пользователя admin: org.apache.cassandra.excepti ons.UnavailableException : Не удается достичь уровня согласованности LOCAL_ONE "',),' 172.17.0.8 ': ConnectionRefusedError (111," Пытался подключиться к [(' 172.17.0.8 ', 9042)]. Последняя ошибка: В соединении отказано "),' 172.17.0.11 ': AuthenticationFailed (' Не удалось пройти аутентификацию на 172.17.0.11: Ошибка с сервера: code = 0100 [Bad credentials] message = "Ошибка во время аутентификации пользователя admin: org.apache.cassandra.exceptions.UnavailableException: не удалось достичь уровня согласованности LOCAL_ONE" ',)})
Вопрос:
Поскольку два узла все еще доступны, почему аутентификация не может получить уровень согласованности LOCAL_ONE и как я могу решить свою проблему?
Когда вы создавали кластер - вы меняли коэффициент репликации для system_auth
пространство клавиш? Если нет, то вам нужно вернуть этот узел и изменить коэффициент репликации для него на 3.
См. Подробные инструкции Вот.