Невозможно оставить соединение открытым для MongoDb Cluster из-за «канонического адреса не совпадает» - PullRequest
0 голосов
/ 01 июля 2019

Я настраиваю микросервис Spring Boot для управления данными в базе данных Mongo, так как мне нужно выполнить некоторые шаги транзакций, мне пришлось настроить кластер Mongo с использованием образа bitnami mongo.Кластер вроде работает, я уже подключил его к монго-экспрессу без проблем.Но когда я пытаюсь подключиться к нему из приложения, я продолжаю терять соединение.

Похоже, проблема заключается в том, что IP-адрес, который я предоставляю для подключения, то есть удаленного хоста, отличается от того, который является внутренним для Mongo, чтоэто докер IPПонятно, что это не так, но это блокирует меня.Я не нашел решения, позволяющего сохранить соединение открытым, какие-либо идеи?

Я проверил конфигурацию mongo и установил bindIPAll в true, поэтому, если я не ошибаюсь, он должен принимать соединения от каждого ip,нет?

Вот мое свойство Spring Boot:

spring.data.mongodb.uri = mongodb: // пользователь: пароль @ == ip-1 ==:27017, == ip-1 ==: 27018, == ip-1 ==: 27019 / matchmaker? ReplicaSet = replicaset Я использую шаблонный Spring Boot, так что это моя единственная конфигурация кластера MongoDb

Вот журналы для одного соединения:

  • 2019-07-01 11: 23: 01.847 org.mongodb.driver.cluster: Добавление обнаруженного сервера == ip-1 ==: 27019 для клиентского представления кластера

  • 2019-07-01 11: 23: 02.102 org.mongodb.driver.connection: Открытое соединение [connectionId {localValue: 2, serverValue: 19}] to == ip-1 ==: 27019

  • 2019-07-01 11: 23: 02.161 org.mongodb.driver.cluster: Поток монитора успешно подключен к серверу с описаниемServerDescription {адрес === ip-1 ==, тип = REPLICA_SET_ARBITER, состояние = СОЕДИНЕНО, ок = истина, версия = ServerVersion {versionList = [4, 0, 10]}, minWireVersion = 0, maxWireVersion = 7, maxDocumentSize = 16777216, logicSessionTimeoutMinutes = 30, roundTripTimeNanos = 56078089, setName = 'replicaset', canonicalAddress === ip-2 ==: 27017, hosts = [== ip-3 ==: 27017, == ip-4 ==: 27017], passives = [], арбитры = [== ip-2 ==: 27017], первичные = '== ip-3 ==: 27017', tagSet = TagSet {[]} ,lectionId = null, setVersion = 3,lastWriteDate = Пн. 01 июля 11:22:58 CEST 2019, lastUpdateTimeNanos = 9210136534468}
  • 2019-07-01 11: 23: 02.167 org.mongodb.driver.cluster: Сервер == ip-1 ==:27019 больше не является членом набора реплик.Удаление из клиентского представления кластера.
  • 2019-07-01 11: 23: 02.169 org.mongodb.driver.cluster: Канонический адрес == ip-2 ==: 27017 не соответствует адресу сервера.Удаление == ip-1 ==: 27017 из клиентского кластера

Спасибо!


ОБНОВЛЕНИЕ

У меня естьнашел решение, но оно не оптимально, поэтому я собираюсь оставить этот вопрос открытым, может быть, кто-то может помочь мне.

Вот что я сделал:

  1. Добавлены MONGODB_ADVERTISED_HOSTNAME и MONGODB_PORT_NUMBER свыделенное имя и порт для каждого из трех образов кластера (например, монго-первичный: 27017, монго-вторичный: 27018, монго-арбитр: 27019)
  2. Добавлены в файл локальных хостов эти три имени хоста (монго-primary ...) указывающий на удаленный хост
  3. В свойствах Spring Boot я добавил эти три имени хоста в mongo uri
...