我试图在mongodb中创建一个复制的分片群集。最初我创建了两个分片,每个分片中都有一个副本集,其中包含三个成员。并且所有分片和复制集都在一台机器上运行。我跟着
http://docs.mongodb.org/manual/tutorial/convert-replica-set-to-replicated-shard-cluster/
部署这个结构并且运行良好。
但是,当我在AWS实例中为业务应用程序运行我的mongodb并且我将node.js服务器与数据库连接时,我想在多个aws实例中对数据库进行负载均衡,以便即使在一个实例变得不健康或不可用的情况下,数据库也能正常工作,即使一个实例变得不健康或不可用,我也能够从其他实例中运行的replicaset访问数据库。
取决于我之前提出的问题中不同用户的建议
http://stackoverflow.com/questions/24671205/mongodb-load-balancing-in-multiple-aws-instances
我试图在分片中划分数据库,每个分片都有一个副本集,其中有3个或更多成员在不同的aws实例中运行。 为了创建这个结构,我首先尝试在本地部署它。
我有两个复制品首次出现& secondset
第一集有三个成员192.168.1.10:27018(Primary),192.168.1.11.27018(中学)& 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
}]
}
});
我创建了第二套副本的方式与此类似,并且有效。
然后我尝试在三台独立的机器中创建三个configsvrs,这样即使一台机器关闭,其他的configsvrs也会运行。 configsvs将运行于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中添加碎片,并在27017端口运行mongos,我写道: -
mongo --port 27017
但它正在显示
errno:111 conncetion refused.
但之前我在一台机器上进行测试时效果很好。
请帮助我,为什么我会收到此错误以及如何解决此问题。
我还有另一种困惑。我在192.168.1.10中运行mongos然后我将我的node.js服务器与那些mongos连接,但是如果那台机器关闭我会遇到问题。那么我是否还需要在其他机器上运行mongos,以便至少运行一个mongos来随时与数据库建立连接?如果我要创建多个mongos同时运行单独的机器,那么我如何连接node.js服务器中的任何一个mongos来访问数据库?