replicated - Cómo convertir un conjunto de réplicas de MongoDB en un servidor independiente
replicated to allow failover in mongodb (5)
1) Ir a mongo shell en servidores secundarios
2) Detenga los servidores secundarios utilizando el siguiente comando:
use admin
db.shutdownServer()
Su principal se convertirá automáticamente en un servidor independiente.
Para obtener más información, consulte el siguiente enlace: http://www.tutespace.com/2016/03/stopping-and-starting-mongodb.html
Considere, tengo 4 conjuntos replicados y la configuración es la siguiente:
{
"_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"}
]
}
Puedo conectarme a todos los conjuntos usando mongo --port <port>
Hay documentos para obtener información sobre Convertir un independiente a un conjunto de réplicas , pero ¿alguien puede decirme cómo volver a convertir en independiente del conjunto de réplicas?
Elimine todos los hosts secundarios del conjunto de réplicas (rs.remove (''host: port'')), reinicie el Mongo Deamon sin el parámetro replSet (editando /etc/mongo.conf) y los hosts secundarios volverán a comenzar en modo independiente.
El host principal es complicado, porque no puede eliminarlo del conjunto de réplicas con rs.remove. Una vez que tenga solo el nodo primario en el conjunto de réplicas, debe salir de mongo shell y detener mongo. Luego edita /etc/mongo.conf, elimina el parámetro replSet y comienza de nuevo mongo. Una vez que inicie mongo, ya estará en modo independiente, pero el shell mongo mostrará un mensaje como:
2015-07-31T12: 02: 51.112 + 0100 [initandlisten] ** ADVERTENCIA: mongod comenzó sin --replSet, sin embargo, hay 1 documentos en local.system.replset
para eliminar la advertencia, puede hacer 2 procedimientos: 1) Eliminar la base de datos local y reiniciar mongo:
use local
db.dropDatabase();
/etc/init.d/mongod restart
2) O si no quieres ser tan radical, puedes hacer:
use local
db.system.replset.find()
y aparecerá un mensaje como:
{ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] }
entonces lo borraras usando:
db.system.replset.remove({ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "host" : "hostprimary:mongoport" } ] })
y probablemente le pedirá:
WriteResult({ "nRemoved" : 1 })
Ahora, puede reiniciar el mongo y la advertencia debería haber desaparecido, y tendrá su mongo en modo independiente sin avisos.
En una máquina de Ubuntu
- Detén tu servidor mongo
- abrir /etc/mongod.conf
- Comenta la replicación y la línea replSetName
#replication: #replSetName: rs0
- Inicia tu servidor mongo y ve a mongo shell
- eliminar la base de datos local
use local
db.dropDatabase()
- Reiniciar mongo
La documentación de MongoDB sugiere lo siguiente para realizar el mantenimiento en un miembro del conjunto de réplicas, que pone al miembro del conjunto de réplicas en modo independiente para futuras operaciones. Con poca modificación se puede hacer autónomo:
- Si el nodo en cuestión es el único nodo en un fragmento, drene los fragmentos a otros fragmentos según la documentación de MongoDB aquí , o la base de datos fragmentada se romperá, es decir
- Asegúrese de que el equilibrador esté habilitado conectándose a mongos y ejecute
sh.startBalancer(timeout, interval)
- Para el fragmento en cuestión, vaya a la base de datos de administración y
db.adminCommand( { removeShard: "mongodb0" } )
- Verifique el estado de drenaje repitiendo el comando removeShard anterior, espere a que se complete el drenaje
- Asegúrese de que el equilibrador esté habilitado conectándose a mongos y ejecute
- Si el nodo en cuestión es primario, haga
rs.stepDown(300)
- Detenga el nodo ejecutando
db.shutdownServer()
- Cambie la configuración de yaml por:
- comentando replication.replSetName (--replSetName en la línea de comandos)
- comentando sharding.clusterRole para el servidor de fragmentos o configuración (--shardsvc y --configsvr en la línea de comandos)
- comentando net.port , luego cámbielo a un puerto diferente (--port en la línea de comandos)
- Inicia la instancia mongod.
- Si el cambio es permanente, vaya a otra instancia de mongod y ejecute
rs.remove("host:port")
Después de esto, el nodo en cuestión debe estar activo y en ejecución en modo independiente.
Simplemente elimine un host del conjunto de réplicas ( rs.remove(''host:port'')
), replSet
iniciarlo sin el parámetro replSet
y replSet
de nuevo en modo independiente.