2015-06-10 3 views
2

Мне дали задание R & D на запуске Cassandra на Docker. Я работаю над XUbuntu 14.04.2 64 бит (установлен на VirtualBOX в 32-разрядной ОС Windows7).Cassandra on Docker - проблема подключения nodetool

Я следовал инструкциям, приведенным в Docker on Ubuntu и Pokle cassandra учебники, и я получил ConnectException, когда я попытался проверить статус конкретного узла с помощью nodetool.

Ниже приведен список шагов, которые я сделал.

[email protected]:~$ docker run -d --name cass1 poklet/cassandra start 
7b2ddfb60adf1c270a425c4440fe263e1fe56f5dc1c3205372bee3b8626e0624 

[email protected]:~$ docker run -d --name cass2 poklet/cassandra start $(/data/cassandra/scripts/ipof.sh cass1) 
4f98a194214e603242279226bb94cee20774058e84b6d0171a8d14d648e19016 

[email protected]:~$ docker run -d --name cass3 poklet/cassandra start $(/data/cassandra/scripts/ipof.sh cass1) 
394f9ce918121c0b79ed8282ba95c8f1badd4e3536d4ad3f24c4c21651e50b3c 

[email protected]:~$ docker ps 
CONTAINER ID  IMAGE      COMMAND    CREATED    STATUS    PORTS                  NAMES 
394f9ce91812  poklet/cassandra:latest "start 172.17.0.1" 6 seconds ago  Up 3 seconds  22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass3    
4f98a194214e  poklet/cassandra:latest "start 172.17.0.1" 31 seconds ago  Up 29 seconds  22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass2    
7b2ddfb60adf  poklet/cassandra:latest "start"    About a minute ago Up About a minute 22/tcp, 7000-7001/tcp, 7199/tcp, 8012/tcp, 9042/tcp, 9160/tcp, 61621/tcp cass1    

[email protected]:~$ docker run -i -t poklet/cassandra nodetool -h $(/data/cassandra/scripts/ipof.sh cass1) status 
nodetool: Failed to connect to '172.17.0.1:7199' - ConnectException: 'Connection refused'. 

Ifconfig показывает мне, что мой Docker работает на 172.17.42.1

Может кто-то пожалуйста, скажите мне, если я пропустил какие-либо конфигурации и/или, если я сделал что-то не так?

+0

Удалось ли исправить проблему? Я сейчас борюсь с этим :( – Aides

+0

@Aides Я просто отказался от использования Cassandra с докером. Я только что установил Cassandra в одиночку. Он отлично работает. Очень жаль, что я не могу вам помочь. :( – Asela

+1

на самом деле это похоже, что я, по крайней мере, решил проблему для себя. Вот подробности. https://github.com/pokle/cassandra/pull/28 Я планирую скоро загрузить изменения в репозиторий. – Aides

ответ

4

Я использую Fedora 22, но я не понимаю, почему он не должен работать на Ubuntu.

У меня была точно такая же проблема, и следующая команда работала для меня:

docker exec cass-1 nodetool status 

Обратите внимание, что cass1 это имя докер контейнера для узла Кассандры, его использовали вместо IP-адреса ,

  • Я пробовал это после прочтения this post, который оказался весьма полезным.
  • The docker exec command definition - Запустить команду в запущенном контейнере.

Мой выход:

Datacenter: datacenter1 
======================= 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address  Load  Tokens Owns (effective) Host ID        Rack 
UN 172.17.0.14 51.6 KB 256  100.0%   3dec79f4-4a6f-46e6-b4d5-14b8f56b6c13 rack1 
1

В cassandra-env.sh есть установка "LOCAL_JMX". По умолчанию это «да», установка «нет» позволит удаленные подключения к порту 7199.

Кроме того, вы можете отключить аутентификацию в том же файле конфигурации, добавив: JVM_OPTS = "$ JVM_OPTS -Dcom.sun. management.jmxremote.authenticate = ложь»

- Что касается Docker изображения pokle, я сделал запрос тянуть с вышеуказанными изменениями в start.sh (github.com/pokle/cassandra/pull/28), который был и теперь изображение докеров должно работать так, как ожидалось, в README.md.

3

Я немного поздно, но вот некоторые идеи:

Если начать Docker контейнера вам необходимо сопоставить порты для внешнего мира или ссылку на контейнеры вместе.

Картографирование портов выполняется параметром -p при запуске контейнеров Docker. Документация не найдена: https://docs.docker.com/articles/networking/

Контейнерное связывание выполняется с параметром --link, и оно работает так, как если обе связанные контейнеры работают на одном хосте. Документация: https://docs.docker.com/userguide/dockerlinks/

Чтобы ваш пример работал (доступ к другим контейнерам по их IP-адресу), вы должны открывать порты.В случае Кассандры это было бы

-p 7000: 7000 -p 9160: 9160 -p 9042: 9042 -p 7199: 7199

ориентировочные это команда, которую я выполнить на 2 физических хостов запустите кластер cassandra. Из-за сопоставлений портов может быть запущен только один экземпляр на хост! (чтобы отсоединить контейнер от командной строки, вам необходимо добавить ключ -d)

docker run --rm --name cassandra-`hostname \ 
    -v /data/cassandra/projectname:/var/lib/cassandra/data \ 
    -e CASSANDRA_CLUSTER_NAME=project-database 
    -e CASSANDRA_BROADCAST_ADDRESS=`hostname` 
    -p 7000:7000 -p 9160:9160 -p 9042:9042 -p 7199:7199 \ 
    -e CASSANDRA_SEEDS=<ip_of_host1>,<ip_of_host2> 
    cassandra:2.2.1 
+0

Публичные порты должны сделать их доступными извне хоста. Но в вопросе Asela развертывает 3 контейнера узла cass на одном и том же хосте. дополнительный контейнер, который запускает nodetool, также находится на одном и том же хосте и в той же сети моста по умолчанию, поэтому он обычно должен иметь возможность доступа к другим портам контейнера, нет необходимости экспортировать порты на хост. – Nicomak

Смежные вопросы