2013-12-14 6 views
1

Я пытаюсь осуществить репликацию MongoDB, состоящую из 4-х узлов в виде виртуальных машин,MongoDB replicaSet конфигурация - странное поведение

информации: Я использую VirtualBox, и v.machines общается друг с другом Повсеместно хост-только адаптер. Коммуникация протестирована, а узел ervery может пинговать другие узлы.

это выход rs.conf() команды:

rs0:PRIMARY> rs.conf() 
{ 
    "_id" : "rs0", 
    "version" : 4, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "192.168.56.1:27017" 
     }, 
     { 
      "_id" : 1, 
      "host" : "192.168.56.101:27018" 
     }, 
     { 
      "_id" : 2, 
      "host" : "192.168.56.102:27019" 
     }, 
     { 
      "_id" : 3, 
      "host" : "192.168.56.103:27020" 
     } 
    ] 
} 

это выход команды rs.status()

rs0:PRIMARY> rs.status() 
{ 
    "set" : "rs0", 
    "date" : ISODate("2013-12-14T16:09:36Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "192.168.56.1:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 3207, 
      "optime" : Timestamp(1387034904, 1), 
      "optimeDate" : ISODate("2013-12-14T15:28:24Z"), 
      "self" : true 
     }, 
     { 
      "_id" : 1, 
      "name" : "192.168.56.101:27018", 
      "health" : 1, 
      "state" : 6, 
      "stateStr" : "UNKNOWN", 
      "uptime" : 2542, 
      "optime" : Timestamp(0, 0), 
      "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
      "lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"), 
      "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
      "pingMs" : 1, 
      "lastHeartbeatMessage" : "still initializing" 
     }, 
     { 
      "_id" : 2, 
      "name" : "192.168.56.102:27019", 
      "health" : 1, 
      "state" : 6, 
      "stateStr" : "UNKNOWN", 
      "uptime" : 2497, 
      "optime" : Timestamp(0, 0), 
      "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
      "lastHeartbeat" : ISODate("2013-12-14T16:09:35Z"), 
      "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
      "pingMs" : 0, 
      "lastHeartbeatMessage" : "still initializing" 
     }, 
     { 
      "_id" : 3, 
      "name" : "192.168.56.103:27020", 
      "health" : 1, 
      "state" : 6, 
      "stateStr" : "UNKNOWN", 
      "uptime" : 2472, 
      "optime" : Timestamp(0, 0), 
      "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 
      "lastHeartbeat" : ISODate("2013-12-14T16:09:36Z"), 
      "lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"), 
      "pingMs" : 1, 
      "lastHeartbeatMessage" : "still initializing" 
     } 
    ], 
    "ok" : 1 
} 

из последней команды Кажется, replicaSet все еще инициализирует, но, глядя на 4 экземпляра mongod, я не знаю, похоже, что здесь что-то не работает должным образом.

enter image description here

Им интересно, почему все узлы пытаются связаться только с основным экземпляром, игнорируя охер? И почему, когда соединение принимается, он пытается снова связаться с одним и тем же узлом, не выполнив этого, потому что он говорит, что «Не могу загрузить конфигурацию еще» .. Мне действительно нужна толчка для понимания проблемы, если это необходимо вывод команды или информация вообще, просто дайте мне знать, я опубликую их.

заранее спасибо за любую помощь

+0

Хотя вы проверили сетевое соединение с помощью ping, попытались ли вы подключить серверы в обоих направлениях? Я имею в виду, вы должны иметь возможность подключаться с одного сервера к оболочке всех других серверов. Возможно, ваш брандмауэр блокирует соединения. – rubenfa

+0

Если узел не видит первичный, то это похоже на постоянное инициирование выборов. Без первичного набора реплик не считается согласованным.Каждый узел должен быть зарегистрирован в основном в настоящее время и должен иметь возможность получать информацию из этого основного, даже если он продолжает синхронизировать с вторичным. – Sammaye

+0

@rubenfa: вы имеете в виду подключение к istances на пути «mongo --port 27019», нет, я не пытался его попробовать, я думал, что pinging было в порядке, я постараюсь скоро проверить этот путь – lese

ответ

0

решил - я только что проверил соединения Betweens все члены в пути соединения Монго, как rubenfa предложил в своем комментарии.

mongo --host 192.168.56.103 --port 27020 

и каждое соединение между каждыми членами работает должным образом с помощью Host-только адаптера.

Основная проблема, которую я опубликовал в начале, был связан с тем, что я не проверял внутри 3 вторичных узлов, если были другие базы данных local, созданные из предыдущих попыток настройки replicaSet. Я просто использовал для проверки основного узла и удалял локальный db оттуда, не проверяя другие узлы.

Кроме того, не забудьте удалить все local DBS из всех узлов, прежде чем попытаться перенастроить replicaSet

1

Для тех, кто еще спотыкаясь на этом:

Убедитесь, что имя хоста вашего основного является разрешимым из членов, или иным образом ваш replSetConfig использует ваш первичный IP вместо имени хоста или fqdn. По умолчанию mongo использует имя хоста основного в поле конфигурации хоста, , в результате чего все остальные члены не могут связаться с ним, если у них нет информации в файле/etc/hosts.

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