2013-06-04 11 views
16

Si consideri, ho 4 set replicato e la configurazione è la seguente:Come convertire una replica MongoDB impostata su un solo server stand

{ 
"_id": "rs_0", 
"version": 5, 
"members" : [ 
    {"_id": 1, "host": "127.0.0.1:27001"}, 
    {"_id": 2, "host": "127.0.0.1:27002"}, 
    {"_id": 3, "host": "127.0.0.1:27003"}, 
    {"_id": 4, "host": "127.0.0.1:27004"} 
] 
} 

io sono in grado di connettersi a tutti i set con mongo --port <port>

Ci sono documenti per ottenere informazioni su Convert a Standalone to a Replica Set, ma qualcuno può dirmi come riconvertirsi in standalone dal set di repliche?

risposta

12

Basta rimuovere un host dal set di repliche (rs.remove('host:port')), riavviarlo senza il parametro replSet ed è di nuovo indipendente.

+3

Se non si vuole che tenere la sua informazioni è anche possibile eliminare il 'local' db – Sammaye

+1

Non funziona: ' '' bippo: PRIMARY> rs.remove ('rudi.dev:27017'); { "errmsg": "eccezione: non riesce a trovare sé in nuova configurazione replset", "codice": 13433, "ok": 0 } bippo: PRIMARIO> rs.config() { " _ID": "bippo", "versione": 1, "membri": [{ "_id": 0, "host": "rudi.dev:27017" } ] } ' ' ' –

+0

Scrivi un documento completo per convertire ReplicaSet su server singolo [tecnicume] (http://tecnicume.blogspot.it/2016/02/mongodb-migrazione-da-replicaset.html). – Furetto

25

Rimuovere tutti gli host secondari dal set di repliche (rs.remove ('host: port')), riavviare il mongo deamon senza il parametro replSet (modifica /etc/mongo.conf) e gli host secondari si avviano nuovamente in modalità standalone.

L'host primario è difficile, perché non è possibile rimuoverlo dal set di repliche con rs.remove. Una volta che hai solo il nodo primario nel set di repliche, dovresti uscire da mongo shell e fermare mongo. Quindi si modifica /etc/mongo.conf e si rimuove il parametro replSet e si avvia nuovamente mongo. volta che si avvia Mongo si è già in modalità stand-alone, ma la shell mongo verrà chiesto un messaggio del tipo:

2015-07-31T12: 02: 51,112 + 0100 [initandlisten] ** ATTENZIONE: mongod avviato senza - -replSet ancora 1 documenti sono presenti in local.system.replset

per rimuovere l'avviso si può fare 2 procedure: 1) droping locale mongo db e il riavvio:

use local 
db.dropDatabase(); 

/etc/init.d/mongod restart 

2) O se non vuoi per essere così radicali, si può fare:

use local 
db.system.replset.find() 

e vi verrà chiesto un messaggio del tipo:

{ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] } 

allora si avrà cancellarlo usando:

db.system.replset.remove({ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] }) 

e sarà probabilmente pronta :

WriteResult({ "nRemoved" : 1 }) 

Ora, è possibile riavviare il mongo e l'avviso dovrebbe essere andato, e avrete il vostro mongo in modalità standalone senza avvisi

+0

Ho dovuto eseguire 'rs.initiate()' per ricreare nuovamente il cluster di replica e rendere PRIMARY il nodo. Grazie! – Tristan

+2

'' 'non autorizzato su local per eseguire il comando {delete: \" system.replset \ ", cancella: [{q: {_id: \" rs0 \ "}, limite: 0.0}], ordinato: vero}' ' 'a fare la rimozione. Quale ruolo è necessario per essere in grado di eliminare da '' 'system.replset'''? –

1

1) Vai mongo shell sul server secondari

2) Arrestare il server secondari utilizzando sotto comando:

use admin 
    db.shutdownServer() 

Il server primario diventerà automaticamente server autonomo.

Per ulteriori informazioni, consultare il link sottostante: http://www.learnit.net.in/2016/03/stopping-and-starting-mongodb.html

+0

ha funzionato per me grazie mille ....... –

Problemi correlati