Удаленные узлы недоступны в наборе реплик из трех узлов

У меня есть два ПК с IP-адресами 10.1.1.52 и 10.1.1.11. Я хочу настроить репликацию монго (без сегментирования) с одним первичным и одним вторичным узлом, работающим на 10.1.1.52, и одним вторичным узлом, работающим на 10.1.1.11.

Я выполнил следующие шаги:

Запустил три сервера конфигурации на ПК 10.1.1.11 со следующими командами:

mongod --configsvr --port 26050 --logpath /data/db/log.cfg0 --logappend --dbpath /data/db/cfg0 –fork
mongod --configsvr --port 26051 --logpath /data/db/log.cfg1 --logappend --dbpath /data/db/cfg1 –fork
mongod --configsvr --port 26052 --logpath /data/db/log.cfg2 --logappend --dbpath /data/db/cfg2 –fork

После чего я создал набор реплик («a») и добавил к нему три узла, используя следующие команды (первый на 10.1.1.11 и два других на 10.1.1.52):

mongod  --replSet a --dbpath /data/a/a0 --logpath /data/a/log.a0 --port 27000 --fork --logappend --smallfiles --oplogSize 50
mongod  --replSet a --dbpath /data/a/a1 --logpath /data/a/log.a1 --port 27001 --fork --logappend --smallfiles --oplogSize 50
mongod  --replSet a --dbpath /data/a/a2 --logpath /data/a/log.a2 --port 27002 --fork --logappend --smallfiles --oplogSize 50

Я настроил маршрутизаторы запросов на 10.1.1.11 с помощью следующей команды:

mongos --configdb gaugedata-elastic:26050,gaugedata-elastic:26051,gaugedata-elastic:26052 --fork --logappend --logpath /data/db/log.mongos --port 26060

После этого я ввел следующую команду, чтобы подключиться из mongos и инициировать набор реплик:

mongo --port 27000
rs.initiate()

Проблема, с которой сталкиваются, возникает после добавления узлов:

rs.add("10.1.1.52:27001")
rs.add("10.1.1.52:27002")

Узлы, работающие на удаленном ПК, например 10.1.1.52, недоступны и неработоспособны. Однако узел, работающий на моем ПК, то есть 10.1.1.11, автоматически объявляется ВТОРИЧНЫМ.


person Sidd    schedule 18.11.2016    source источник
comment
Возможно ли, что правило брандмауэра блокирует связь через порты 27001 и 27002?   -  person Vince Bowdren    schedule 21.11.2016


Ответы (2)


Необходимо проверить, что правило, принимающее порты, активировано. В противном случае используйте команду sudo ufw allow <start port number>:<end port number> в ОС Ubuntu, чтобы включить все порты между начальным номером порта и конечным номером порта.

person HARA ZANG Ulrich    schedule 28.04.2021

ОК .. Здесь мало ошибок. ЕСЛИ вам не нужен шардинг, вам не нужны mongoS или конфигурационные серверы... Чистый набор реплик (в данном случае) - это только те две машины, на которых запущен ТОЛЬКО процесс mongod...

Итак, запустите процессы mongod (на двух разных машинах)

mongod --replSet=a --dbpath=/data/ --logpath=/data/mongod.log --port=27017 --fork --logappend --smallfiles --oplogSize=50

Затем подключитесь к одной из нод с помощью mongo:

монго 10.1.1.11

Затем вы делаете набор реплик начальным с помощью одной команды:

rs.initiate( { _id: "a", версия: 1, участники: [ { _id: 0, хост: "10.1.1.11:27017", приоритет: 2}, { _id: 1, хост: "10.1.1.52: 27017", приоритет: 1 } ] } )

И если вы действительно хотите иметь два разных узла RS на одной физической машине, вы, конечно, можете добавить еще один с другим портом...

Вот рабочий пример с одной машиной:

#> mkdir /data 
#> mkdir /data2

#> mongod --replSet=a --dbpath=/data --logpath=/data/mongod.log --port=27001 --fork --logappend --smallfiles --oplogSize=50

#> mongod --replSet=a --dbpath=/data2 --logpath=/data2/mongod.log --port=27001 --fork --logappend --smallfiles --oplogSize=50

#> mongo --port=27000

MongoDB Enterprise > rs.initiate({_id:"a", version:1, members:[{_id:0,host:"127.0.0.1:27000",priority:2},{_id:1,host:"127.0.0.1:27001",priority:1}]})
{ "ok" : 1 }
MongoDB Enterprise a:OTHER>
MongoDB Enterprise a:PRIMARY> rs.status()
{
        "set" : "a",
        "date" : ISODate("2016-12-04T08:47:33.254Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "127.0.0.1:27000",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 451,
                        "optime" : {
                                "ts" : Timestamp(1480841055, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2016-12-04T08:44:15Z"),
                        "electionTime" : Timestamp(1480841054, 1),
                        "electionDate" : ISODate("2016-12-04T08:44:14Z"),
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "127.0.0.1:27001",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 209,
                        "optime" : {
                                "ts" : Timestamp(1480841055, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2016-12-04T08:44:15Z"),
                        "lastHeartbeat" : ISODate("2016-12-04T08:47:32.831Z"),
                        "lastHeartbeatRecv" : ISODate("2016-12-04T08:47:33.128Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "127.0.0.1:27000",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
person JJussi    schedule 19.11.2016
comment
Я сделал именно так, как ты сказал. Когда я подключаюсь к одному из узлов с помощью mongo 10.1.1.11, он говорит Этот узел не был запущен с параметром replSet Пожалуйста, дайте мне знать, что мне делать дальше. - person Sidd; 21.11.2016
comment
ХОРОШО. Я сделал mongo --port 27000, а затем использовал rs.initiate( { _id: a, версия: 1, члены: [ { _id: 0, хост: 10.1.1.11:27000, приоритет :2 }, { _id: 1, хост: 10.1.1.52:27001, приоритет: 1}, { _id: 2, хост: 10.1.1.52:27002, приоритет: 2 } ] } ) Выход был после rs.status() показал, что id:1 и id:2 по-прежнему недоступны. Есть идеи ? - person Sidd; 21.11.2016