monogdb deploy-shard-cluster
参考文档:
https://docs.mongodb.com/master/tutorial/deploy-shard-cluster/
http://www.tuicool.com/articles/NnEBFb
http://blog.csdn.net/luonanqin/article/details/8497860
创建配置服务器
1 2 3
| bin/mongod -f config/configsvr-0.conf bin/mongod -f config/configsvr-1.conf bin/mongod -f config/configsvr-2.conf
|
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| sharding: clusterRole: configsvr replication: replSetName: configrs systemLog: destination: file path: "/opt/monogodb/mongo-shard/log/configsvr-0.log" logAppend: true storage: dbPath: "/opt/monogodb/mongo-shard/data/configsvr-0" journal: enabled: true processManagement: fork: true pidFilePath: "/opt/monogodb/mongo-shard/pid/configsvr-0.pid" net: bindIp: 192.168.2.185 port: 10000
|
initiate the replica set
1 2 3 4 5 6 7 8
| bin/mongo 192.168.2.185:10000 use admin rs.initiate( { _id : "configrs", configsvr: true, members: [ { _id : 0, host : "192.168.2.185:10000" }, { _id : 1, host : "192.168.2.185:10001" },{ _id : 2, host : "192.168.2.185:10002"}] })
|
创建分片服务器
此处仅列出与配置服务器不一致的地方
配置文件 sharding:
clusterRole: shardsvr
initiate the replica set:
rs.initiate( {
_id : “shardrs”,
members: [ { _id : 0, host : “192.168.2.185:20000” }, { _id : 1, host : “192.168.2.185:20001” },{ _id : 2, host : “192.168.2.185:20002”}]
})
创建路由服务器
此处仅列出与配置服务器不一致的地方,注意可选参数,多数参数只针对于mongod ,此处配置文件是针对于mongs
配置文件
1 2 3 4 5 6 7 8 9 10 11 12
| sharding: configDB: configsvr/192.168.2.185:10000,192.168.2.185:10001,192.168.2.185:10002 systemLog: destination: file path: "/opt/monogodb/mongo-router/log/router-0.log" logAppend: true processManagement: fork: true pidFilePath: "/opt/monogodb/mongo-router/pid/router-0.pid" net: bindIp: 192.168.2.185 port: 27017
|
执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| //start bin/mongos -f config/router-0.conf //connect bin/mongo 192.168.2.185:27017 sh.addShard("shardrs/192.168.2.185:20000") sh.addShard("192.168.2.185:30000") //enable sharding on the target database sh.enableSharding("<database>") //shard a Collection sh.shardCollection("<database>.<collection>", { <key> : <direction> } ) //The following operation shards the target collection using the hashed sharding strategy. sh.shardCollection("<database>.<collection>", { <key> : "hashed" } )
|
路由服务器没有集群配置,若配置多个,可以通过配置代理,做负载均衡的方式来实现
查看分片信息
1 2 3 4 5 6 7
| db.printShardingStatus(); //可以在 shards 集合中查到所有的片 db.shards.find(); //databases 集合含有已经在片上的数据库列表和一些相关信息 db.databases.find(); //块信息保存在 chunks 集合中,你可以看到数据到底是怎么切分到集群的。 db.chunks.find()
|
shard key 选取
若使用hashed sharding,必须在shard key上建立hashed索引
若集合为空,则 sh.shardCollection(“.“, { : “hashed” } )
若集合非空,db.person.createIndex({“idCode”:”hashed”})建立hashed索引 (??此处分片并未试验成功,待后续尝试)
注意不允许给唯一索引建立建立hashed索引,可以给hashed索引建立普通索引