¿Cómo se implementan los auxiliares de administración del conjunto de réplicas?
El rs.*
auxiliares de administración del conjunto de réplicas
en el mongo
shell son contenedores para los comandos de MongoDB que puede enviar desde cualquier controlador.
Puede ver qué comando(s) envuelve cada asistente de shell consultando la documentación de MongoDB:
rs.initiate()
proporciona un contenedor alrededor dereplSetInitiate
comando de base de datos.rs.add()
proporciona un contenedor alrededor de algunas de las funciones dereplSetReconfig
comando de base de datos y el ayudante de shell mongo correspondienters.reconfig()
.rs.conf()
envuelve elreplSetGetConfig
comando de base de datos.
Tenga en cuenta que mongo
los ayudantes de shell pueden realizar una validación o manipulación adicional de las configuraciones, ya que están destinadas a ser utilizadas a través del mongo
interactivo concha.
Puede confirmar cómo se implementan cualquiera de los ayudantes de shell invocando el comando en el shell sin paréntesis finales, por ejemplo:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Llamar a los comandos de la base de datos del conjunto de réplicas desde Node.js
La lógica equivalente se puede implementar a través de la API del controlador Node.js usando command()
:
// Rough equivalent of rs.initiate()
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// Use the admin database for commands
var adminDb = db.admin();
// Default replica set conf
var conf = {};
adminDb.command({replSetInitiate: conf}, function(err, info) {
console.log(info);
});
});
En lugar de volver a implementar los asistentes del conjunto de réplicas en Node.js, podría invocar un mongo
shell con el --eval
comando para ejecutar el ayudante de shell (consejo:incluya --quiet
para suprimir mensajes innecesarios).
Por ejemplo, llamando desde su aplicación Node:
var exec = require('child_process').exec;
var rsAdmin = exec('mongo --eval "var res = rs.initiate(); printjson(res)" --quiet', function (error, stdout, stderr) {
// output is in stdout
console.log(stdout);
});