Репликация MongoDB 5.0: Монго::Ошибка::Недоступна

#ruby-on-rails #mongodb #replication #mongodb-replica-set

Вопрос:

Я хотел бы знать, как исправить следующую ошибку при включении репликации в MongoDB: <Server address=db-master:27017 UNKNOWN> это происходит только при включении репликации.

Ошибка

 Mongo::Error::NoServerAvailable (No nearest server is available in cluster: #<Cluster topology=ReplicaSetNoPrimary[db-master:27017,db-node2:27017,db-node1:27017,name=rs0,v=6,e=7fffffff0000000000000017] 
servers=[#<Server address=db-master:27017 UNKNOWN>,#<Server address=db-node2:27017 UNKNOWN>,#<Server address=db-node1:27017 UNKNOWN>]> with timeout=30, LT=0.015)
 

Связана ли эта проблема с разрешением DNS? Есть ли способ указать IP-адрес вместо псевдонима (из файла hosts) в топологии кластера?
Когда ssh'ing для первичного и вторичного узлов пинг, похоже, работает.

 [db-node2 server] $ ping db-master
PING db-master ([IP_IS_HERE]) 56(84) bytes of data.
64 bytes from db-master ([IP_IS_HERE]): icmp_seq=1 ttl=63 time=0.153 ms
64 bytes from db-master ([IP_IS_HERE]): icmp_seq=2 ttl=63 time=0.150 m
 

монго.конф

 net:
  port: 27017
  bindIp: 0.0.0.0,localhost,127.0.0.1,db-master,[IP_IS_HERE]
  bindIpAll: true
replication:
  replSetName: "rs0"
 

хосты ubuntu

 $ cat /etc/hosts
127.0.0.1 localhost
[IP_IS_HERE] db-master
[IP_IS_HERE] db-node1
[IP_IS_HERE] db-node2
 

Ответ №1:

Вы запустили службу mongod на других хостах?

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

 net:
  port: 27017
  bindIpAll: true
 

или

 net:
  port: 27017
  bindIp: 0.0.0.0
 

Если вы хотите ограничить подключение с определенного хоста, используйте

 net:
  port: 27017
  bindIp: localhost,db-master,[IP_IS_HERE]
 

ssh использует порт 22, но ваш MongoDB использует порт 27017, поэтому ваш брандмауэр может заблокировать соединение (то же самое относится и к ping нему ). Если вы хотите проверить, доступно ли соединение, вы можете использовать curl команду:

 curl --connect-timeout 3 --silent --show-error db-node1:27017
 

Если вы получите в качестве ответа

Похоже, что вы пытаетесь получить доступ к MongoDB по протоколу HTTP через собственный порт драйвера.

тогда подключение возможно.

Ответ на

Время ожидания соединения истекло через 3000 миллисекунд

указывает, что ваш брандмауэр блокирует попытку подключения.

Комментарии:

1. Спасибо за разъяснения по bindIpAll и bindIp, это работает : )