Контейнер Docker не может подключиться к набору реплик MongoDB

Я использую Docker Swarm для создания кластера веб-приложений и баз данных.

] У меня работает четыре контейнера, три из них представляют собой один набор реплик mongodb, а последний - asp. Опубликованный порт: 80-> 80

Mongo1: Опубликованный порт: 1234-> 27017

Mongo2: Опубликованный порт: 1235-> 27017

Mongo3: Опубликованный порт: 1236-> 27017

Строка подключения выглядит следующим образом:

"mongodb: // admin: password @ mongo1 , mongo2, mongo3 / replicaSet = example & authSource = admin"

1
задан 2 February 2018 в 16:55
1 ответ

Для поддержки аварийного переключения и реконфигурации набора реплик клиенты с подключением набора реплик используют имена хостов, настроенные в наборе реплик , в соответствии с требованиями MongoDB Server Discovery и спецификация мониторинга (SDAM) . Это гарантирует, что клиентское представление набора реплик согласуется с конфигурацией и состоянием набора реплик.

Я могу подключаться к каждому узлу индивидуально, а не как набор реплик извне.

Это ожидаемое поведение если внешний хост / порт отличается от конфигурации набора реплик. Если вы подключаетесь к Единому серверу (т.е. без указания соединения с набором реплик), клиенты не обнаруживают серверов. Это может быть полезно для подключения к определенному члену набора реплик в целях резервного копирования или администрирования, или для предотвращения обнаружения сервера, когда вы подключаетесь через перенаправленное имя хоста или комбинацию портов, которая не соответствует конфигурации набора реплик.

С подключением набора реплик клиенты подключаются и запускают команду isMaster , чтобы узнать текущую конфигурацию и состояние набора реплик. В соответствии со спецификацией SDAM клиенты затем настраивают мониторинг набора реплик, поэтому любые изменения в конфигурации или состоянии будут автоматически обнаруживаться клиентом.

Mongo1: Опубликованный порт: 1234-> 27017 Mongo2: опубликованный порт: 1235-> 27017 Mongo3: Опубликованный порт: 1236-> 27017

Чтобы использовать соединение набора реплик с открытыми портами Docker, вам необходимо:

  • Убедитесь, что имена хостов используются в конфигурации набора реплик ( Mongo1 , Mongo2 , Mongo3 ) можно разрешить в контейнере, из которого вы пытаетесь подключиться.
  • Сделайте порты в образах Docker уникальными и предоставьте те же порты в среде вашего хоста (например: 27017, 27018, 27019).

Похоже, разрешение имен уже работает правильно, если вы можете подключиться из контейнера приложения, но порты в конфигурации набора реплик не соответствуют тому, что вы открыли через Docker .

0
ответ дан 4 December 2019 в 04:14

Теги

Похожие вопросы