我正在寻找使用Docker和Kubernetes时通过边车自动设置MongoDb副本集的过程。
以上的设置是不是非常重要的 ,它归结为是,我需要能够调用蒙戈副本集命令(例如rs.initiate(),rs.add('anotherserver'),rs.conf(),rs.reconfig(),等)从一个Node.js应用程式。
rs.initiate()
rs.add('anotherserver')
rs.conf()
rs.reconfig()
注意:它不一定来自节点应用程序,如果有人知道完成同一件事的另一种方法,请分享您的想法。
更新: 我能够使此工作正常进行,并已将sidecar开源供其他人使用。
该rs.*副本集管理助手的mongo外壳是你可以从任何驱动程序发送的MongoDB命令包装。
rs.*
mongo
您可以通过参考MongoDB文档来查看每个shell助手包装了哪些命令:
replSetInitiate
rs.add()
replSetReconfig
replSetGetConfig
请注意,mongoshell助手可能会对配置进行一些额外的验证或操作,因为它们打算通过交互式mongoshell使用。
您可以通过在外壳程序中调用命令而不用括号括起来来确认如何实现任何外壳程序助手,例如:
> rs.initiate function (c) { return db._adminCommand({ replSetInitiate: c }); }
可以使用command()以下方法通过Node.js驱动程序API来实现等效逻辑:
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); }); });
可以mongo在--eval命令中调用Shell 来运行Shell Helper ,而不是在Node.js中重新实现副本集Helper (提示:包括--quiet以消除不必要的消息)。
--eval
--quiet
例如,从您的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); });