У меня возникли проблемы с доступом к базе данных Apache Cassandra через spring-data-cassandra:
- Иногда сервер не может подключиться к базе данных на старте - обычно получается со 2-й попытки
- После запуска, пару раз в час, в случайные моменты, несколько запросов терпят неудачу с тайм-аутом, а затем продолжает работать нормально
- Наконец, через несколько часов драйвер начинает последовательно отклонять запросы, сообщая о тайм-аутах, и сервер необходимо перезапустить.
Приложение представляет собой небольшое серверное приложение Spring Boot (1.4.0), использующее Spring Data Cassandra (пробовали 1.4.2 и 1.4.4). Приложение собирает данные от удаленных клиентов и реализует некоторый административный графический интерфейс на основе интерфейса REST на стороне сервера, включая панель мониторинга, подготавливаемую каждые 10 секунд с помощью задач Spring @Scheduled и доставляющую данные клиентам (браузерам) по протоколу веб-сокета. Трафик защищен с помощью HTTPS и двусторонней аутентификации (серверные + клиентские сертификаты).
Текущее состояние приложения тестируется в настройке с базой данных (2.2.8), работающей на том же облачном сервере (подключение через петлевой адрес 127.0.0.1) с ОС Ubuntu 14.04. Несколько тестовых клиентов создают нагрузку, в результате чего вставляется около 300 000 записей базы данных в час (50 000 основных и 5x50 000 подробных записей), загружая данные каждые 5 секунд или около того. Приборная панель отслеживает трафик за последний час и создает статистику. Средняя загрузка ЦП утилитой sar составляет около 10%. Текущий размер базы данных составляет около 25 ГБ.
Вставка данных производится небольшими партиями - я пробовал также отдельные записи, но проблема не исчезла, просто загрузка ЦП увеличилась примерно на 50% при тестировании с одиночными записями.
Я провел много «исследований» Google по этой теме и не нашел ничего конкретного, но попробовал довольно много советов, например. добавление имени схемы во все запросы и несколько параметров конфигурации - по-видимому, не влияет на окончательный результат (заблокированный сервер требует перезагрузки). Сервер работает до 30 часов или около того, но иногда блокируется в течение 1-2 часов, обычно работает за 7-10 часов до зависания драйвера, без какой-либо очевидной закономерности в периоде работы.
Я следил за кучей - ничего особенного, никаких структур данных, накапливающихся со временем. Сервер запускается с -Xms2g -Xmx3g -XX:+PrintGCDetails
В итоге появляется ошибка:
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: inpresec-cassandra/127.0.1.1:9042 (com.datastax.driver.core.OperationTimedOutException: [inpresec-cassandra/127.0.1.1:9042] Operation timed out))
at com.datastax.driver.core.RequestHandler.reportNoMoreHosts(RequestHandler.java:217) ~[cassandra-driver-core-2.1.9.jar!/:na]
at com.datastax.driver.core.RequestHandler.access$1000(RequestHandler.java:44) ~[cassandra-driver-core-2.1.9.jar!/:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.sendRequest(RequestHandler.java:276) ~[cassandra-driver-core-2.1.9.jar!/:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution$1.run(RequestHandler.java:374) ~[cassandra-driver-core-2.1.9.jar!/:na]
... 3 common frames omitted
Что я также заметил, так это то, что процесс cassandra сообщает о размере виртуальной памяти, примерно соответствующем размеру базы данных - я заметил это, когда база данных была около 12 ГБ, и она точно следовала размеру базы данных - не уверен, что это имеет какое-либо отношение. с сервером проблема. Резидентная часть базы данных составляет от 2 до 3 ГБ. Резидентная часть сервера обычно занимает 1,5-2,5 ГБ. Общий объем памяти облачного сервера составляет 8 ГБ.
Прежде чем запускать Cassandra непосредственно в ОС виртуальной машины хоста, я запускал ее в Docker и имел ту же проблему — выход из Docker был сделан, чтобы исключить Docker из «списка подозреваемых».
Если у кого-то было что-то подобное, буду признателен за информацию или совет.
Cluster
/Session
с настроенными параметрами подключения/сокета/тайм-аута. - person mp911de   schedule 13.11.2016