Я экспериментирую с Datestax OpsCenter 5.2 и Cassandra 2.1.7. Одна проблема, с которой я столкнулся, заключается в том, что демон OpsCenter (то есть сервер), кажется, пытается подключиться к агентам Cassandra, используя broadcast_rpc_address
, который заблокирован группой безопасности (поскольку broadcast_rpc_address
является общедоступным IP-адресом на AWS).
Подробности
В кластере три узла (10.0.0.0/24 — подсеть VPC на AWS, 52.x.x.x — публичный IP-адрес)
Узел0
cassandra.yaml: широковещательный_адрес = 10.0.0.100, rpc_address = 10.0.0.100, широковещательный_адрес_rpc = 52.2.3.100
address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.100, agent_rpc_broadcast_address=10.0.0.100
Узел 1
cassandra.yaml: широковещательный_адрес = 10.0.0.101, rpc_address = 10.0.0.101, широковещательный_rpc_address = 52.2.3.101
address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.101, agent_rpc_broadcast_address=10.0.0.101
Узел2
cassandra.yaml: широковещательный_адрес = 10.0.0.102, rpc_address = 10.0.0.102, широковещательный_адрес_rpc = 52.2.3.102
address.yaml: stomp_interface=10.0.0.99, local_interface=10.0.0.102, agent_rpc_broadcast_address=10.0.0.102
Узел OpsCenter
Развернуто в той же подсети
ip=10.0.0.99
Симптомы
После добавления «10.0.0.100, 10.0.0.101, 10.0.0.102» в окно «Добавить кластер» в веб-консоли OpsCenter я получил следующее в opscenterd.log
:
2015-09-04 11:05:38+0000 [] INFO: New Cassandra host 52.2.3.100 discovered
2015-09-04 11:05:38+0000 [] INFO: New Cassandra host 52.2.3.101 discovered
...
2015-09-04 11:05:43+0000 [] WARN: [control connection] Error connecting to 52.2.3.100: errors=Timed out creating connection, last_host=None
2015-09-04 11:05:43+0000 [] ERROR: Control connection failed to connect, shutting down Cluster: ('Unable to connect to any servers', {'52.2.3.100': OperationTimedOut('errors=Timed out creating connection, last_host=None',)})
Обратите внимание, что OpsCenter пытается подключиться к узлам через их broadcast_rpc_address
, которые заблокированы группой безопасности. Это несмотря на то, что я установил agent_rpc_broadcast_address
для IP-адресов подсети.
Вопрос 1
Это правильное поведение OpsCenter? Почему agent_rpc_broadcast_address
не используется?
Вопрос 2
Если я изменю broadcast_rpc_address
на IP-адреса подсети, OpsCenter будет нормально подключаться. Но это не позволяет моим клиентам подключаться, потому что неисходные узлы будут иметь свой IP-адрес подсети, сообщаемый исходными узлами клиенту, который недоступен для клиента.
Я также могу открыть группу безопасности для сервера OpsCenter, но это рискованно и требует прохождения через шлюз.
Так как мне решить проблему в этом случае?
Мысли
Суть этой проблемы заключается в том, как «разумно» решить, к какому IP подключаться в зависимости от того, находится ли клиент внутри или вне подсети. Вся документация, которую я видел, не дает понять, как это работает.
Спасибо за любую помощь.
Дополнение 1
Был бы признателен, если бы вы также пояснили, как rpc (бережливость) и собственный (двоичный) протокол используются клиентом и OpsCenter.
У меня сложилось впечатление, что rpc устарел в пользу собственного протокола, но повлияет ли это на соединение между узлами и клиент-узел?
system.peers
на узлах, к которым у него есть доступ, и строит карту топологии следующим образом: github.com/datastax/python-driver/blob/master/cassandra/ || github.com/datastax/java-driver/blob/. Адрес в system.peers — это широковещательный_rpc_address || rpc_адрес IIRC. - person arre   schedule 05.09.2015