Comment les assistants d'administration de l'ensemble de répliques sont-ils implémentés ?
Le rs.*
assistants d'administration du jeu de répliques
dans le mongo
shell sont des wrappers pour les commandes MongoDB que vous pouvez envoyer depuis n'importe quel pilote.
Vous pouvez voir quelle(s) commande(s) chaque assistant shell encapsule en vous référant à la documentation MongoDB :
rs.initiate()
fournit un wrapper autour dereplSetInitiate
commande de base de données.rs.add()
fournit un wrapper autour de certaines des fonctionnalités dereplSetReconfig
commande de base de données et l'assistant de shell mongo correspondantrs.reconfig()
.rs.conf()
enveloppe lereplSetGetConfig
commande de base de données.
Notez que le mongo
les aides shell peuvent effectuer une validation ou une manipulation supplémentaire des configurations car elles sont destinées à être utilisées via le mongo
interactif coque.
Vous pouvez confirmer comment l'un des assistants du shell est implémenté en appelant la commande dans le shell sans parenthèses à la fin, par exemple :
> rs.initiate
function (c) { return db._adminCommand({ replSetInitiate: c }); }
Appel des commandes de base de données du jeu de réplicas depuis Node.js
La logique équivalente peut être implémentée via l'API du pilote Node.js en utilisant 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);
});
});
Plutôt que de réimplémenter les assistants de jeu de répliques dans Node.js, vous pouvez invoquer un mongo
shell avec le --eval
commande pour exécuter l'assistant shell (astuce :inclure --quiet
pour supprimer les messages inutiles).
Par exemple, en appelant depuis votre application 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);
});