У меня есть кластер Cassandra, настроенный на 5 узлах EC2. Узлы могут нормально обмениваться данными с использованием частных IP-адресов, но при использовании частного внутреннего DNS-имени возникают сбои соединения. Localhost тоже не работает.
Я пытаюсь использовать инструмент cassandra-stress, но получаю Failed to connect over JMX; not collecting these stats
, а при включении подробного ведения журнала я получаю следующий стек:
java.lang.RuntimeException: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: ip-172-1-2-2.eu-west-1.compute.internal; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)]
at org.apache.cassandra.stress.util.JmxCollector.connect(JmxCollector.java:99)
at org.apache.cassandra.stress.util.JmxCollector.<init>(JmxCollector.java:85)
at org.apache.cassandra.stress.StressMetrics.<init>(StressMetrics.java:62)
at org.apache.cassandra.stress.StressAction.run(StressAction.java:198)
at org.apache.cassandra.stress.StressAction.runMulti(StressAction.java:126)
at org.apache.cassandra.stress.StressAction.run(StressAction.java:72)
at org.apache.cassandra.stress.Stress.main(Stress.java:109)
Когда я бегу cqlsh
Я должен указать частный IP-адрес (./cqlsh 172.1.2.3
), поскольку использование локального хоста по умолчанию не работает.
Требуется ли какая-то дополнительная конфигурация для сопоставления этого внутреннего имени с localhost или для разрешения частных IP-адресов на каждом узле?
РЕДАКТИРОВАТЬ:
Бег host ip-172-1-2-3.eu-west-1.compute.internal
дает правильный результат:
ip-172-1-2-3.eu-west-1.compute.internal has address 172.1.2.3
Так что похоже, что DNS работает правильно.
Для моих настроек cassandra.yaml у меня есть listen_address
закомментировано, но я использую:
listen_interface: eth0
broadcast_address: 172.1.2.3
rpc_address: 172.1.2.3
Репликация отлично работает с этими настройками. Я не уверен, как настроить JMX для явного прослушивания частного IP-адреса.
Ваша команда cqlsh 172.1.2.3
не работает, потому что вы настроили rpc_address
слушать только по заданному адресу. Если вы хотите везде прослушивать CQL-трафик, вам нужно установить rpc_address
к 0.0.0.0
, и установите broadcast_rpc_address
к 172.1.2.3
- все это описано в cassandra.yaml
сам.
Что касается JMX - на самом деле не обязательно, чтобы он был включен - он собирает некоторые данные о сборке мусора и т. Д., Которые, возможно, еще не нужны, если вы только начинаете. Рекомендую сконцентрироваться на самом тестировании, вроде описанном в Эта статья, например.
Но если вы действительно хотите выставить JMX снаружи, вам нужно изучить cassandra-env.sh
- в нем есть подробные комментарии о том, что делать. Вам нужно только убедиться, что вы защитили JMX, иначе кто угодно сможет делать с вашим кластером практически все, что угодно - стирать данные, настраивать их и т. Д.