我正在尝试在 mongodb 中创建一个复制的分片集群。最初我创建了两个分片,每个分片中有一个包含三个成员的副本集。所有的分片和副本集都在一台机器上运行。我跟着
http://docs.mongodb.org/manual/tutorial/convert-replica-set-to-replicated-shard-cluster/
部署这种结构并且效果很好。
但是当我在 AWS 实例中为业务应用程序运行我的 mongodb 并将我的 node.js 服务器与数据库连接时,我想在多个 aws 实例中对数据库进行负载平衡,以便数据库即使在巨大的情况下也能正常工作流量负载,即使一个实例变得不健康或不可用,我也可以从其他实例中运行的副本集访问数据库。
根据我上一个问题中不同用户的建议
http://stackoverflow.com/questions/24671205/mongodb-load-balancing-in-multiple-aws-instances
我正在尝试将数据库划分为分片,每个分片将有一个具有 3 个或更多成员的副本集,这些成员在单独的 aws 实例中运行。为了创建这个结构,我首先尝试在本地部署它。
我有两个副本集 firstset 和 secondset
第一组有三个成员 192.168.1.10:27018(Primary), 192.168.1.11.27018(Secondary) & 192.168.1.9:27018(arbiter)
第二组有三个成员 192.168.1.6:27019(Primary), 192.168.1.9:27019(Secondary) & 192.169.1.11:27019(arbiter)
创建我写的第一个副本
mongod --dbpath /replica-data --port 27018 --replSet firstset --oplogSize 10
在 192.168.1.10、192.168.1.11 和 192.168.1.9
然后启动我写的副本集
mongo --port 27018
在 192.168.1.10 然后,
use admin
db.runCommand({
"replSetInitiate": {
"_id": "firstset",
"members": [{
"_id": 1,
"host": "192.168.1.10:27018",
"priority": 10
}, {
"_id": 2,
"host": "192.168.1.11:27018",
"priority": 2
}, {
"_id": 3,
"host": "192.168.1.9:27018",
"priority": 1,
"arbiterOnly": true
}]
}
});
我以类似的方式创建了 secondset 副本并且它有效。
然后我尝试在三台单独的机器上创建三个 configsvrs,这样即使一台机器关闭,其他 configsvrs 也会运行。configsv 将在 192.168.1.10:27020、192.168.1.11:27020 和 192.168.1.6:27020 中运行
所以我写了
mongod --configsvr --dbpath /shard-data -port 27020
在 192.168.1.10、192.168.1.11 和 192.168.1.6 中。
然后我尝试在 27017 端口的 192.168.1.10 中运行 mongos,三个运行的 configdb。所以,我写了
mongos --configdb 192.168.1.10:27020,192.168.1.11:27020,192.168.1.6:27020 --port 27017 --chunkSize 1
然后因为我必须在 mongos 中添加分片,并且 mongos 在 27017 端口中运行,所以我写了:-
mongo --port 27017
但它显示
errno:111 conncetion refused.
但以前当我在一台机器上测试它时它工作得很好。
请帮助我为什么会收到此错误以及如何解决它。
我还有另一个困惑。我在 192.168.1.10 中运行 mongos,然后将我的 node.js 服务器与该 mongos 连接,但如果该机器关闭,我就会遇到问题。那么我是否还需要在其他机器上运行 mongos,以便随时运行至少一个 mongos 来路由与数据库的连接?如果我必须创建多个同时运行不同机器的 mongos,那么我将如何从 node.js 服务器连接任何一个 mongos 以访问数据库?