Программно сбрасывать данные на Кассандру каждый раз перед тем, как Кассандра выключится
Я использую встроенную Кассандру. Когда я выключаюсь и перезагружаюсь, данные моей службы Cassandra теряются. Я думаю, что приличные данные не правильно сбрасываются на диск. Поэтому я попытался использовать nodetool для ручной очистки данных и проверки доступности данных. Но nodetool не работает должным образом для встроенного сервиса Cassandra. Я получаю следующую ошибку:
c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain
Starting NodeTool
Failed to connect to '192.168.2.86:7199': Connection refused: connect
Я попытался установить свойства jmx, но я получаю сообщение об ошибке. Я добавил следующие строки в мой код:
System.setProperty("com.sun.management.jmxremote", "true");
System.setProperty("com.sun.management.jmxremote.port", "7197");
System.setProperty("com.sun.management.jmxremote.authenticate", "false");
System.setProperty("com.sun.management.jmxremote.ssl", "false");
System.setProperty("java.rmi.server.hostname", "my ip");
Итак, есть ли способ вручную сбросить данные на Cassandra без использования nodetool?
Изменить 1:
После нескольких часов попыток я теперь могу запустить nodetool (вместо добавления конфигураций jmx в код, который я добавил в конфигурации отладки Eclipse, и это сработало). Я запустил команду "слив", теперь данные правильно записаны на диск. Итак, теперь мой вопрос: почему данные не сбрасываются должным образом? Каждый раз, когда я перезагружаю сервис Cassandra, последние изменения пропадают.
4 ответа
Комитлоги не очищаются должным образом в версиях cassandra с 1.1.0 по 1.1.4. Это открытая проблема. Пожалуйста, обратитесь к следующему билету Jira.
Как вы останавливаете и запускаете сервер Cassandra? Вызов stopServer для демона Cassandra должен сбрасывать все незавершенные записи в журнал фиксации. Поток продолжит выполнять некоторую обработку даже после возврата метода, поэтому, если вы убиваете JVM после stopServer(), возможно, вы препятствуете записи данных.
Может случиться так, что флеш выдается, но не работает. Промывка должна быть записана в журналах. Убедитесь, что вы не смываете. Если вы промываете, и это не удается, должно быть какое-то указание на то, почему промывка не удалась.
Скорее всего из-за ваших настроек commitlog. Если вы используете периодический режим, попробуйте уменьшить окно синхронизации или пакет использования. Пакетный сделает записи чуть медленнее.
https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231