2012-11-28 22 views
16

Zrobiłem błąd podczas konfigurowania zestawów replik w mongodb. Myślę, że to co zrobiłem źle jest to, że zrobiłem rs.initialize() na obu węzłach, co spowodowało, że oni byli w jakiś sposób zdezorientowani. Nie jestem pewny.Począwszy od konfiguracji repliki w mongodb

Teraz wszystko, co chcę zrobić, to zacząć od nowa, ale nie mogłem znaleźć sposobu na deinicjalizację węzła. Więc poszedłem za radą, aby usunąć lokalne pliki * db, resetując konfiguracje. Zrobiłem to, a teraz nic nie działa.

> rs.initiate() 
{ 
    "info2" : "no configuration explicitly specified -- making one", 
    "me" : "0.0.0.0:27017", 
    "errmsg" : "couldn't initiate : can't find self in the replset config", 
    "ok" : 0 
} 
> rs.conf() 
null 

Starałem się usunąć i ponownie zainstalować pakiet (robię to na serwerach Ubuntu), które po prostu oznaczało, że moja mongodb.conf zniknął i moja Skrypt startowy przestał działać. Jest to oczywiście łatwe do rozwiązania.

Więc jak zacząć od nowa?

Uwaga: Spojrzałem na this answer, ale ponieważ funkcja rs.conf() nie działa, to również nie działa.

Odpowiedz

25

Jeśli wymusisz rekonfigurację z wygenerowaną konfiguracją, czy to rozwiązuje problem?

Można to zrobić podobny do obserwacji z {{Mongo}} powłoki:

> cfg = { 
...  "_id" : "rs0", 
...  "version" : 1, 
...  "members" : [ 
...   { 
...    "_id" : 0, 
...    "host" : "0.0.0.0:27017" 
...   } 
...  ] 
... } 

>rs.reconfig(cfg, {force:true}) 

może musisz dostosować zmienną cfg mieć swoją nazwę hosta i nazwa_portu, jak to zostanie zwrócony błąd can't find self in new replset config do powłoki, jeśli zestaw replik nie może znaleźć węzła, z którego działa w konfiguracji.

+5

Musiałem użyć 'rs.initiate (cfg)' zamiast 'rs.reconfig', w przeciwnym razie działało to doskonale! – obeq

+2

pracował dla mnie, musiałem użyć '" hosta ":" 127.0.0.1:27017 "' i 'rs.initiate' chociaż. mongo serwer '2.0.4-1ubuntu2.1' na ubuntu exact – danza

+0

Musiałem też użyć rs.initiate (cfg) – machunter

54

Ten błąd zostanie wyświetlony, jeśli nazwa hosta komputera nie zostanie odwzorowana z powrotem do 127.0.0.1. Zaktualizuj swoje/etc/hosts i/lub swoje/etc/hostname, a rs.initiate() bez konfiguracji powinno działać.

+2

Naprawiono problem dla mnie dzięki. Jeśli zmienisz nazwę hosta w instancji chmury, dodaj nową nazwę hosta do/etc/hosts –

+1

. Poprawiłem również ten problem, upewniając się, że przypisany adres IP jest również powiązany z ustawieniem bind_ip w twoim/etc/mongod. plik conf. Najwyraźniej posiadanie go w wersji 127.0.0.1 nie zawsze wystarcza. – Felby

+2

Musiałem zrobić coś podobnego: od czasu rozwiązania IP LAN, ale nie 127.0.0.1, dodałem oba - "bind_ip = 10.10.1.1,127.0.0.1". –

9

Jeśli po prostu skomentuj bind_ip w /etc/mongod.conf to będzie osiągnąć prawidłowy wynik, dzięki czemu można ponownie wystawić na rs.initiate() polecenie set-up lub reconfig replikę.

Powiązane problemy