OpsCenter не может распознать узлы Cassandra в той же сети

Я экспериментирую с 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 устарел в пользу собственного протокола, но повлияет ли это на соединение между узлами и клиент-узел?


person stackoverflower    schedule 04.09.2015    source источник
comment
закомментируйте Broadcast_rpc_address и это, вероятно, сработает   -  person LHWizard    schedule 04.09.2015
comment
@LHWizard, комментирование Broad_rpc_address приведет к тому, что клиенты попытаются подключиться к IP-адресу подсети (для любого неначального узла). Для клиента, не входящего в подсеть, это не удастся.   -  person stackoverflower    schedule 04.09.2015
comment
Мое намерение состоит в том, чтобы заставить работать как а) OpsCenter в одной подсети, так и б) клиента вне подсети.   -  person stackoverflower    schedule 04.09.2015
comment
вы можете попробовать установить rpc_address на 0.0.0.0   -  person LHWizard    schedule 04.09.2015
comment
также ваше утверждение в вопросе 2 неверно. Семена не сообщают IP-адреса клиентам.   -  person LHWizard    schedule 04.09.2015
comment
@LHWizard, если исходные узлы не сообщают IP-адреса, как клиент подключается к неисходным узлам? Если у меня есть кластер из 100 узлов, нужно ли указывать их все вручную, чтобы клиент мог подключиться?   -  person stackoverflower    schedule 05.09.2015
comment
Драйвер @stackoverflower выбирает 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
comment
@arre, спасибо, это проясняет ситуацию. Я напишу об этом в блоге.   -  person stackoverflower    schedule 05.09.2015


Ответы (1)


Вопрос 1

Это правильное поведение OpsCenter? Почему не используется agent_rpc_broadcast_address?

Это на данный момент. OpsCenter (через базовый драйвер Python) получает адрес rpc от самой Cassandra, поэтому он получает значения broadcast_rpc_address, которые недоступны. agent_rpc_broadcast_address используется для подключения к агентам, а не к самим узлам Cassandra.

Я не уверен, почему вы блокируете доступ к широковещательному адресу из той же подсети (даже из той же группы безопасности?), а также разрешаете доступ к нему из-за пределов подсети.

Был бы признателен, если бы вы также пояснили, как rpc (бережливость) и собственный (двоичный) протокол используются клиентом и OpsCenter.

Начиная с версии 5.2 OpsCenter не использует экономию для связи с Cassandra, полагаясь на собственный протокол для opscenterd и собственный протокол + jmx для агентов.

person arre    schedule 04.09.2015
comment
Доступ к широковещательному адресу заблокирован, потому что шлюз направляет запрос, который маскирует исходный IP-адрес под общедоступный, который заблокирован группой безопасности (публичный IP-адрес назначается динамически, поэтому я не могу легко внести его в белый список). Все было бы хорошо, если бы он подключался к частному IP. - person stackoverflower; 05.09.2015
comment
Означает ли это, что клиенты имеют статические адреса? Как добавить приложение в белый список? - person arre; 05.09.2015
comment
Приложения находятся в другой сети, шлюз которой занесен в белый список. Похоже, мне, вероятно, следует развернуть OpsCenter в этой сети вместо сети Cassandra. - person stackoverflower; 05.09.2015