Come vengono implementati gli assistenti amministrativi del set di repliche?
Il rs.*
assistenti dell'amministratore del set di repliche
nel mongo
shell sono wrapper per i comandi MongoDB che puoi inviare da qualsiasi driver.
Puoi vedere quali comandi esegue il wrapping di ciascun helper della shell facendo riferimento alla documentazione di MongoDB:
rs.initiate()
fornisce un wrapper perreplSetInitiate
comando database.rs.add()
fornisce un wrapper attorno ad alcune delle funzionalità direplSetReconfig
comando database e il corrispondente helper della shell mongors.reconfig()
.rs.conf()
avvolgereplSetGetConfig
comando database.
Nota che il mongo
gli helper della shell possono fare qualche ulteriore convalida o manipolazione delle configurazioni poiché sono destinate ad essere utilizzate tramite l'interattivo mongo
guscio.
Puoi confermare come viene implementato uno qualsiasi degli helper della shell invocando il comando nella shell senza parentesi finali, ad esempio:
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Richiamare i comandi del database del set di repliche da Node.js
La logica equivalente può essere implementata tramite l'API del driver Node.js utilizzando 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);
});
});
Invece di reimplementare gli helper del set di repliche in Node.js, puoi invocare un mongo
shell con --eval
comando per eseguire l'helper della shell (suggerimento:include --quiet
per eliminare i messaggi non necessari).
Ad esempio, chiamando dall'app 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);
});