2013-12-11 2 views
17

Я использую встроенную Кассандру. Когда я выключаю и перезапускаю данные службы 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"); 

Итак, есть ли способ, чтобы вручную очистить данные Кассандры без использования nodetool?

Edit 1:
После нескольких часов безуспешных попыток я теперь в состоянии запустить nodetool (вместо добавления конфигурации JMX в код, добавленный в Eclipse, отладка конфигурации, и она работала). Теперь я выполнил команду слива, и данные были правильно сброшены на диск. Итак, теперь мой вопрос: Почему данные не правильно очищены? Каждый раз, когда я перезапускаю службу Cassandra, последние изменения исчезли.

+2

Данные не должны быть промыты, пока memtable не достигнет определенного размера. До этого времени стойкость гарантируется фиксацией, которая * * краснеет во время написания справки. – RussS

+0

Вот в чем проблема: в моем случае, я думаю, что фиксация журналов неправильно очищена. Когда я очищаю данные с помощью nodetool перед отключением службы, это работает хорошо, данные доступны после перезапуска сервера. любой способ программно очищать данные каждый раз, когда сервер падает? – Vijay

+3

Я думаю, вам стоит попытаться выяснить, почему журнал фиксации не смывается. Он должен постоянно писать и стирать, если вы не отключили fsync или fsync, которые не корректно ведут себя в вашей системе. Как только это будет исправлено, вы не потеряете данные при перезагрузке, и вам не придется вручную очищать. – RussS

ответ

1

Commitlogs неправильно очищены в версиях cassandra с версии 1.1.0 до 1.1.4. Это открытая проблема. Пожалуйста, обратитесь к следующему билету jira.

Commitlog not replayed after restart

1

Как вы останавливаете и запускаете сервер Cassandra? Призыв stopServer на демоном Cassandra должен очищать любые записи в журнале фиксации. Поток будет продолжать выполнять некоторую обработку даже после возвращения метода, поэтому, если вы убиваете JVM после stopServer(), вы можете запретить запись данных.

+0

. Я пробовал надлежащее завершение работы, даже тогда проблема сохраняется. По-видимому, это связано с этим открытым билетом https: // issues. apache.org/jira/browse/CASSANDRA-4782 .. Я обновил свою кассандру до более высокой версии, которая решила проблему для меня .. Никакой другой не пошел ..! – Vijay

+2

Вы должны опубликовать это как ответ и принять его. – b4hand

0

Скорее всего, из-за ваших настроек фиксации. Если вы используете периодический режим, попробуйте уменьшить окно синхронизации или пакет использования. Пакет сделает записи немного медленнее.

https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231

+2

Я пробовал все возможные изменения в cassandra.yaml, связанные с этой проблемой .. ничего хорошего :( – Vijay

0

Это может быть, что на одном уровне выдается, но терпит неудачу. Промывка должна регистрироваться в журналах. Убедитесь, что вы не смываете. Если вы покраснетесь, и он не работает, должно быть некоторое указание на то, почему сброс не прошел.

Смежные вопросы