Кассандра Гектор Балансировка нагрузки

Недавно я настроил кластер Cassandra с двумя узлами. Коэффициент репликации установлен на 2, и они оба работают хорошо, если оба узла включены. Теперь, как я могу использовать hector таким образом, чтобы он продолжал работать, пока работает хотя бы один узел? На данный момент у меня есть что-то вроде следующего.

CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
       "localhost:9160,xx.xx.13.22:9160");
cassandraHostConfigurator.setMaxActive(20);
cassandraHostConfigurator.setMaxIdle(5);
cassandraHostConfigurator.setCassandraThriftSocketTimeout(3000);
cassandraHostConfigurator.setMaxWaitTimeWhenExhausted(4000);
Cluster cluster = HFactory.getOrCreateCluster("structspeech",
   cassandraHostConfigurator);
Keyspace keyspace = HFactory.createKeyspace("structspeech", cluster);
....

Допустим, если хост xx.xx.13.22 выходит из строя, я получаю следующее сообщение в своей консоли, и все мои вставки терпят неудачу, пока этот узел не появится.

Downed xx.xx.13.22(xx.xx.13.22):9160 host still appears to be down: Unable to open transport to xx.xx.13.22(xx.xx.13.22):9160 , java.net.ConnectException: Connection refused: connect

Вот как определяется мое пространство ключей

 update keyspace structspeech with placement_strategy = 
'org.apache.cassandra.locator.SimpleStrategy' 
 and strategy_options =[{replication_factor:2}];

Я уверен, что мне не хватает чего-то очень тривиального, любая помощь будет принята с благодарностью. Спасибо


person Sap    schedule 02.08.2011    source источник


Ответы (2)


По умолчанию Hector использует уровень согласованности Quorum, поэтому, если один из ваших узлов не работает, этот уровень не может быть удовлетворен.
Когда кворум RF = 2 означает, что вам нужно читать и записывать на оба узла, поэтому, если один из них не работает, вы не удается выполнить.
Вот хороший онлайн-инструмент, который демонстрирует NRW (N = коэффициент репликации, R = согласованность чтения и W = согласованность записи) http://www.ecyrd.com/cassandracalculator/
Чтобы изменить уровень согласованности при записи/чтении, используйте, например, AllOneConsistencyLevelPolicy HFactory.createKeyspace(String, Cluster, ConsistencyLevelPolicy)

person Ran    schedule 02.08.2011

Какой уровень согласованности вы используете при вставке? Если вы пишете в QUORUM или ALL, вам нужно, чтобы оба узла были готовы к записи с коэффициентом репликации 2 (кворум для 2 узлов равен 2, поэтому типичные кластеры cassandra используют нечетное число для коэффициента репликации)

person sbridges    schedule 02.08.2011
comment
Я так новичок в этом, не могли бы вы рассказать мне, как мне его настроить и какое идеальное число для кластера из двух... - person Sap; 02.08.2011
comment
Здесь есть некоторые примечания, datastax.com/docs/0.8/consistency/index . Какой уровень согласованности зависит от вашего варианта использования, но хорошей отправной точкой является кластер из 3 с коэффициентом репликации 3 и чтением и записью в QUORUM, это позволяет вам пережить сбой одного узла. - person sbridges; 03.08.2011