общались между собой через тот же IP адрес и Порт, что и внешний клиент на другой машине.
те из container1 по 10.0.7.2:9042 я попадал в container2 (оба на host1)
и с host2 по 10.0.7.2:9042 я попадал в container2 (host1)
Зачем:
1. поднимаю Cassandra-кластер в докере и столкнулся с проблемой при подключении к ней внешнего клиента (на другой машине и НЕ в докере, эти условия поменять нет возможности)
2. У cassandra есть listen address, по умолчанию это 172.18.0.2 и 172.18.0.3(из compose) BROADCAST_ADDRESS - это тот ip по которому к ноде надо подключаться, те по-умолчанию такой же, на котором она слушается. CASSANDRA_SEEDS - то, к кому подключаемся, тут тоже используем 172 сеть
Чтобы подключиться из вне (см пункт 1) , поднимаем интерфейсы дополнительные (хочется использовать одинаковые порты) и маппим порты 172.18.0.2:9042 -> 10.0.7.2:9042, 172.18.0.3:9042 -> 10.0.7.3:9042
Пока всё кажется логичным, всё работает.
НО, когда подключается клиент к скажем к 10.0.7.2:9042, cassandra ему отвечает что есть ещё нода по адресу 172.18.0.3, клиент пытается туда тоже сходить и у него, разумеется, не получается.
Заставить говорить Cassandra что сосед это не 172.18.0.3, а 10.0.7.3 можно только используя его в конфигурации, но, тогда вообще ничего не заработает, потому что ИЗ node1 по адресу 10.0.7.3 в node2 НЕ попасть.
Как разрешить такой тупик?
Я попробовал создать network в докере такой же как подняты интерфейсы, типо поднимаем в линуксе auto eth1:2 iface eth1:2 inet static address 10.0.7.2 netmask 255.255.248.0 и в докере networks: cluster_net: driver: bridge enable_ipv6: false ipam: driver: default config: - subnet: 10.0.7.0/24 node1: image: cassandra:3.10 networks: cluster_net: ipv4_address: 10.0.7.2
Обсуждают сегодня