2012-11-28 3 views
16

Ho fatto un errore durante la configurazione dei set di repliche in mongodb. Penso che quello che ho fatto di sbagliato è che ho fatto un rs.initialize() su entrambi i nodi, il che li ha resi confusi in qualche modo. Non ne sono sicuro.Ricominciare con la configurazione della replica in mongodb

Ora tutto ciò che voglio fare è ricominciare da capo, ma non sono riuscito a trovare un modo per inizializzare un nodo. Così ho seguito il consiglio di cancellare i file * db locali, resettando così le configurazioni. L'ho fatto, e ora niente funziona.

> 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 

Ho provato a rimuovere e reinstallare il pacchetto (che sto facendo questo su server Ubuntu), che appena ha fatto sì che il mio mongodb.conf scomparso e il mio script di init ha smesso di funzionare. Questo è ovviamente abbastanza facile da risolvere.

Quindi come ricominciare?

Nota: ho dato un'occhiata a this answer, ma dal momento che rs.conf() non funziona, questo non funziona neanche.

risposta

25

Se si forza una riconfig con una configurazione che è stata generata, risolve il problema?

Si potrebbe fare questo simile al seguito da: {{mongo}} shell:

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

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

potrebbe essere necessario per sintonizzare la variabile cfg di avere il vostro nome host e portname, come verrà restituito l'errore can't find self in new replset config alla shell se il set repl non riesce a trovare il nodo da cui è in esecuzione nella configurazione.

+5

Ho dovuto usare 'rs.initiate (cfg)' invece di 'rs.reconfig', altrimenti questo ha funzionato perfettamente! – obeq

+2

ha funzionato per me, ho dovuto usare "host": "127.0.0.1:27017" 'e' rs.initiate' però. server mongo '2.0.4-1ubuntu2.1' su ubuntu preciso – danza

+0

Ho anche dovuto usare rs.initiate (cfg) – machunter

54

Questo errore si verifica anche se il nome host della propria macchina non viene mappato su 127.0.0.1. Aggiorna il tuo/etc/hosts e/o il tuo/etc/hostname, e rs.initiate() con no config dovrebbe funzionare.

+2

Risolto il problema per me grazie. Se cambi il tuo nome host su un'istanza cloud assicurati di aggiungere il nuovo nome host a/etc/hosts –

+1

Ho anche corretto questo problema assicurandoti che il tuo indirizzo IP assegnato sia anche associato all'impostazione bind_ip in/etc/mongod. file conf. Apparentemente averlo associato a 127.0.0.1 non è sempre sufficiente. – Felby

+2

Dovevo fare qualcosa di simile: poiché l'IP LAN è stato risolto, ma non 127.0.0.1, ho aggiunto entrambi - 'bind_ip = 10.10.1.1.127.0.0.1'. –

9

Se si commenta lo bind_ip in /etc/mongod.conf, si otterrà il risultato corretto in modo che sia possibile riemettere un comando rs.initiate() per impostare o riconfigurare la replica.