Как подключиться с хоста к Cassandra с помощью Docker Desktop для Windows

Я хочу настроить среду тестирования разработки, и хотя у меня в основном все настроено, у меня возникают трудности с подключением с хост-компьютера (на котором работает Visual Studio) к кластеру Cassandra в докере (используя Docker Desktop для Windows< /сильный>). Я предполагаю, что я просто испортил настройки конфигурации и/или пропустил настройку; но не могу определить, как это сделать (это работает для одного узла, а не для нескольких узлов, с чем я хочу работать)

Что у меня настроено:

docker run --name tnode1 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_BROADCAST_ADDRESS=10.0.75.2 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra

Я также пробовал с ключом -p

docker run --name tnode1 -d -p 9042:9042 -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_BROADCAST_ADDRESS=10.0.75.2 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra

Кажется, это работает с точки зрения того, что если я помещу данные в это, а затем подключусь к 10.0.75.2 из Visual Studio, все будет работать так, как я ожидал. Проблема возникает, когда я добавляю еще один узел.

Я пробовал несколько способов, но похоже, что все они заканчиваются запуском второй заметки, а затем выходом и никогда не присоединяются к кластеру. Если я пропущу CASSANDRA_BORADCAST_ADDRESS при настройке tnode1, тогда кластер работает, но я не могу получить к нему доступ из Visual Studio.

Второй узел (общая информация)

docker inspect -f '{{ .NetworkSettings.IPAddress }}' tnode1 возвращает 172.17.0.2 docker exe -it tnode1 статус nodetool имеет адрес 10.0.75.2

Второй узел (Попытка 1)

docker run --name tnode2 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_SEEDS=172.17.0.2 ca ssandra результат: запущенный статус nodetool не показывает tnode2... running docker ps -a показывает «Вышел (3) 30 секунд назад» для статуса

Второй узел (Попытка 2)

docker run --name tnode2 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_SEEDS=10.0.75.2 ca ssandra результат: запущенный статус nodetool не показывает tnode2... running docker ps -a показывает «Вышел (3) 28 секунд назад» для статуса

Кажется, что начальное значение не соединяется, и в результате новый узел останавливается. Опять же, если я уберу широковещательный адрес, то создание узла будет работать, но я не могу подключиться с хост-компьютера; Я попытался добавить адрес слушателя и параметр -p при создании tnode1, но результаты были аналогичными.

Будем очень благодарны любой помощи.


person ChrisHDog    schedule 02.09.2017    source источник
comment
Я с удовольствием уберу все элементы вещания, если буду знать, как подключиться к кластеру; когда я делаю это и пытаюсь использовать 10.0.75.2, 127.0.0.1 или 172.17.0.2, все они терпят неудачу с NoHostAvailableException, а затем я добавляю широковещательную рассылку, которая исчезает и разрешает соединение.   -  person ChrisHDog    schedule 02.09.2017
comment
Это не специфично для cassandra, но при создании кластеров обычно проще запускать все узлы на определяемая пользователем сеть, чтобы все они могли общаться, как в физической сети, без промежуточного Docker. Используя определение docker compose v2+ для кластера, вы настроите сеть, дефолт.   -  person Matt    schedule 03.09.2017
comment
@Matt, спасибо, это то, что у меня изначально было для всех кластеров, но потом я не смог подключиться к нему с хост-компьютера (где была визуальная студия/экземпляр кода) ... поэтому я добавил широковещательный флаг, чтобы получить это подключение работает, и с этим я потерял возможность подключать узлы ... так что это кажется близким; просто нужно знать, где/как указать узлы, чтобы все они видели друг друга, и я мог подключиться извне   -  person ChrisHDog    schedule 03.09.2017


Ответы (1)


Для меня работает следующее определение составного кластера, я могу подключиться с помощью cqlsh с хоста Docker и запустить тестовый cql.

Память уменьшена по сравнению со значением по умолчанию 1,5 ГБ, так как каждый раз, когда я запускал новый узел, предыдущий узел закрывался из-за нехватки памяти в виртуальной машине Docker.

version: "2.1"

services:
  cassandra-1:
    image: cassandra
    environment:
      CASSANDRA_CLUSTER_NAME: tcluster
      CASSANDRA_DC: TDC1
      MAX_HEAP_SIZE: 600M
      HEAP_NEWSIZE: 100M
    ports:
      - '9042:9042'
      - '9160:9160'
    networks:
      cassclus:
        ipv4_address: 10.0.75.11

  cassandra-2:
    image: cassandra
    environment:
      CASSANDRA_CLUSTER_NAME: tcluster
      CASSANDRA_DC: TDC1
      CASSANDRA_SEEDS: 10.0.75.11
      MAX_HEAP_SIZE: 600M
      HEAP_NEWSIZE: 100M
    networks:
      cassclus:
        ipv4_address: 10.0.75.12

  cassandra-3:
    image: cassandra
    environment:
      CASSANDRA_CLUSTER_NAME: tcluster
      CASSANDRA_DC: TDC1
      CASSANDRA_SEEDS: 10.0.75.11
      MAX_HEAP_SIZE: 600M
      HEAP_NEWSIZE: 100M
    networks:
      cassclus:
        ipv4_address: 10.0.75.13

networks:
  cassclus:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.0.75.0/24
          gateway: 10.0.75.1
person Matt    schedule 05.09.2017