Кассандра и Гектор выпускают
Я настроил Cassandra на 1 узле и залил его данными. Затем я настроил второй узел, его начальный токен, семя и т. Д. И запустил на нем Cassandra. Теперь, когда я запустил свой код Гектора на кластере из 1 узла, он дал мне все данные. Но когда я запускаю один и тот же код на кластере из двух узлов, я получаю меньше данных (меньшее количество столбцов и строк) . Я не понимаю, что я делаю неправильно. Я даже пытался добавить строку хостов, используя CassandraHostConfigurator, но все же я не получаю полные данные. Я также пытался запустить восстановление nodetool, но все еще сталкивался с той же проблемой
пожалуйста, помогите мне
2 ответа
Когда вы добавляете узлы в кластер, вы должны начать этот узел с auto_bootstrap: true
в cassandra.yaml, чтобы другие узлы в кластере (в вашем случае единственный узел) передавали поток данных новому узлу (согласно токену).
Редактировать Для Casssandra-1.0 и выше нет никакой опции в качестве начальной загрузки, в этом случае мы должны запустить второй узел с вычисленным новым токеном, он начнет потоковую передачу данных. Как только потоковая передача закончится, запустите nodetool move <new_token>
, Для получения дополнительной информации см. Добавление узлов в кластер.
Если этого не сделать, второй узел не будет иметь данных, которые он должен хранить согласно токену. И когда вы пытаетесь прочитать данные из Cassandra, возможно, он ищет данные на вновь добавленном узле в соответствии с токеном, но, поскольку нет данных, вы не получите правильный результат.
- Пожалуйста, проверьте все настройки вашего брандмауэра, iptables config - принять узел, общаться с другим
после добавления узла в кольцо используйте nodetool ring
для просмотра примера загрузки данных мой кластер имеет 3 узла, результат будет аналогичным:
192.168.23.84 центр обработки данных1 стойка1 Вверх Нормально 37,52 ГБ 33,33%
192.168.23.85 ЦОД1, стойка1 Вверх Нормально 37,5 ГБ 33,33%
192.168.23.86 центр обработки данных1, стойка1 Вверх Нормально 37,5 ГБ 33,33%
если это похоже на то, что, когда вы используете hector, используйте этот код для проверки запроса hector к какому серверу:
MutationResult result = mutator.execute();
logger.info(" host:" + result.getHostUsed().getHost());
попробуйте написать много раз, чтобы перепроверить целевой хост, содержащий все ваши хосты.
я использую этот CassandraHostConfigurator, чтобы добавить множество хостов в кластер при использовании примера Гектора:
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
"192.168.23.84:9160,192.168.23.85:9160,192.168.23.86:9160");
cluster = HFactory.getOrCreateCluster("testcluster", cassandraHostConfigurator);