我设置了一个MongoDb Sharded Replica Set 2簇,但我不知道如何测试一切是否正常。如何验证MongoDb Sharded副本集是否工作正常?
我没有任何主机上的错误消息,这表明我的设置没问题。所有主机可以互相ping通,并使用默认端口27017.
以下是主机名。
碎片1:
- 蒙戈-rs1-1
- 蒙戈-rs1-2
- 蒙戈-rs1-3
碎片2:
- 蒙戈-RS2-1
- 蒙戈-RS2-2
- 蒙戈-rs2-3
3配置服务器:
- CFG-1
- CFG-2
- cfg-3
路由器(Mongos):
- mongos-1
这是我在运行sh.status()时:
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("562491c645300851d95d85bb")
}
shards:
{ "_id" : "rs1", "host" : "rs1/mongo-rs1-1:27017,mongo-rs1-2:27017,mon
go-rs1-3:27017" }
{ "_id" : "rs2", "host" : "rs2/mongo-rs2-1:27017,mongo-rs2-2:27017,mon
go-rs2-3:27017" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "testshard", "partitioned" : true, "primary" : "rs1" }
{ "_id" : "testrs2", "partitioned" : false, "primary" : "rs2" }
我跑我的mongos使用命令:
mongos --configdb cfg-1:27017,cfg-2:27017,cfg-3:27017
我运行我的配置服务器命令:
mongod --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017
我的命令运行我replicat套(RS1和RS2):
mongod --replSet rs1 --noprealloc --smallfiles
副本集设置是这样的:
rs1:PRIMARY> rs.status()
{
"set" : "rs1",
"date" : ISODate("2015-10-19T15:45:31Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongo-rs1-1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 28658,
"optime" : Timestamp(1445239630, 1),
"optimeDate" : ISODate("2015-10-19T07:27:10Z"),
"electionTime" : Timestamp(1445240879, 1),
"electionDate" : ISODate("2015-10-19T07:47:59Z"),
"self" : true
},
{
"_id" : 1,
"name" : "mongo-rs1-2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 28654,
"optime" : Timestamp(1445239630, 1),
"optimeDate" : ISODate("2015-10-19T07:27:10Z"),
"lastHeartbeat" : ISODate("2015-10-19T15:45:30Z"),
"lastHeartbeatRecv" : ISODate("2015-10-19T15:45:30Z"),
"pingMs" : 0,
"syncingTo" : "mongo-rs1-1:27017"
},
{
"_id" : 2,
"name" : "mongo-rs1-3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 28654,
"optime" : Timestamp(1445239630, 1),
"optimeDate" : ISODate("2015-10-19T07:27:10Z"),
"lastHeartbeat" : ISODate("2015-10-19T15:45:29Z"),
"lastHeartbeatRecv" : ISODate("2015-10-19T15:45:30Z"),
"pingMs" : 1,
"syncingTo" : "mongo-rs1-1:27017"
}
],
"ok" : 1
}
测试中,我提出:
- 我用我的MongoDB客户端连接到Mongos URL。
- 我创建了一个DB:“testshard”
- 我创建了一个文档中
- 我在3副本记录“testshard”:蒙戈 - rs1- *和蒙戈 - rs2- *以检查该数据被保存
结果
我注意到DB已于RS1创建(碎片1)和被复制在副本3:MONGO-rs1-1,蒙戈-rs1-2,蒙戈-rs1- 3。该数据库并未在分片2上创建;我认为这是正常的,因为分片功能保存在一个碎片上,但不能同时保存。
从这里,它看起来像复制品的作品。但是碎片2呢?如何检查数据是否可以保存到碎片2?
测试#2
- 我记录在Mongos和我创建的数据库RS2我强制RS2在Mongos的数据库“配置”。
- 我在testrs2中创建一个文档。
我期待看到在rs2中创建的新文档,但rs2仍然是一个空的数据库。
问题
Q1:如何测试了 “分片” 功能?我希望保存一个文档,并在正确的副本集(rs1或rs2)中查看它。 Q2:Mongo如何知道在rs1或rs2之间保存数据的位置?
问题3:有没有办法使分片自动化?我不想告诉哪个数据库应该在哪里,这应该是自动的。我期待数据在2个碎片之间随机保存。
问题4:在我的情况下,最好的备份策略是什么?我想我只需要做一个rs1和rs2的mongodump?
问题5:如果我说MongoDB的唯一访问点是通过Mongos?没有人应该查询副本集。
你的问题是在这里脱离主题它可能更适合在[dba.stackexchange.com](http://dba.stackexchange.com),但一定要阅读他们的[如何问](http:// dba .stackexchange.com/help/how-to-ask)页面,以便您了解该网站的内容。 – styvane