1

я нашел учебник, чтобы создать mongo replica set using docker, мои команды былиМонго набор реплик не может найти первичный

создания сети кластера

sudo docker network create curator-cluster 

создать особый контейнер с именем mongo1, карта 27018 до 27017 внутри и установить имя rs0

sudo docker run \ 
-p 27018:27017 \ 
--name mongo1 \ 
--net curator-cluster \ 
mongo mongod --replSet rs0 

конфигурация мой,

config = { 
"_id" : "rs0", 
"members" : [{"_id" : 0, "host" : "mongo1:27017"}, 
{"_id" : 1, "host" : "mongo2:27017"}, 
{"_id" : 2, "host" : "mongo3:27017"}] 
} 

В конце концов, я создал 3 контейнера

5949826d5bb1  mongo      "/entrypoint.sh mongo" 22 hours ago  Up 22 hours   0.0.0.0:27020->27017/tcp mongo3 
dcf37866dbb6  mongo      "/entrypoint.sh mongo" 22 hours ago  Up 22 hours   0.0.0.0:27019->27017/tcp mongo2 
14202f76089f  mongo      "/entrypoint.sh mongo" 22 hours ago  Up 22 hours   0.0.0.0:27018->27017/tcp mongo1 

Результат sudo docker exec -it mongo1 mongo является

MongoDB shell version: 3.2.9 
connecting to: test 
Server has startup warnings: 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
2016-09-22T10:24:29.655+0000 I CONTROL [initandlisten] 
rs0:PRIMARY> 

Посмотрите, как у меня есть первичный сейчас, и попытался вставить Somethings на контейнере (например mongo1) , MongoDB могут хорошо синхронизироваться.

Теперь я пытался подключиться к набору на bryan базы данных с помощью команды (примечание 10.145.168.151 мой IP)

mongo --host rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 bryan 

мой результат

MongoDB shell version: 2.6.9 
connecting to: rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020/bryan 
2016-09-23T16:46:18.819+0800 starting new replica set monitor for replica set rs0 with seeds 10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 
2016-09-23T16:46:18.819+0800 [ReplicaSetMonitorWatcher] starting 
2016-09-23T16:46:18.819+0800 changing hosts to rs0/mongo1:27017,mongo2:27017,mongo3:27017 from rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 
2016-09-23T16:46:18.820+0800 getaddrinfo("mongo2") failed: Name or service not known 
2016-09-23T16:46:18.821+0800 getaddrinfo("mongo1") failed: Name or service not known 
2016-09-23T16:46:18.822+0800 getaddrinfo("mongo3") failed: Name or service not known 
2016-09-23T16:46:18.822+0800 Error: connect failed to replica set rs0/10.145.168.151:27018,10.145.168.151:27019,10.145.168.151:27020 at src/mongo/shell/mongo.js:148 
exception: connect failed 

Если я использую Nodejs (мангуста), я get MongoError: no primary found in replicaset

Я думаю, что проблема getaddrinfo("mongo2") failed: Name or service not known, поэтому мой вопрос заключается в том, как исправить эту вещь. Спасибо

+0

Вы проверили первый комментарий в своем учебнике? «... Он терпит неудачу, потому что он не может разрешить имена хостов mongo1-3 на хосте».Решение также детализировано, оно работает для вас? Я имею в виду этот сайт: http://www.sohamkamani.com/blog/2016/06/30/docker-mongo-replica-set/ – alexbt

+0

спасибо, я пропустил этот комментарий – Bryan

ответ

2

Извините за поздний ответ, но я столкнулся с этой проблемой с разными vnets и отсутствующими именами хостов. Я был под впечатлением, если я подключаюсь с помощью ips, тогда группа ответит с помощью ips. Я был неправ. Даже если вы подключаетесь к ips, имена хостов должны быть доступны.

Но, если вы хотите, вы можете изменить реализацию от имен хостов в ИСН (это для всех клиентов, хотя)

1) подключаются к Монго кли

2) cfg = rs.conf()

вас будет видеть cfg.members[0].host, как "hostname:27017" и т.д.

3) для каждой записи сделать cfg.members[i].host = "ip(i):27017"

пример: cfg.members[0].host = "10.0.0.1:27017"

4) rs.reconfig(cfg) вы должны получить ответ: { "ok" : 1 }

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

+0

Спасибо. Это помогло. – Neil

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