分片集群的搭建
MongoDB分片集群由mongos路由进程(轻量级且非持久化进程)、复制集组成的片shards(分片一般基于复制集故障转移和冗余备份功能)、一组配置服务器(存储元数据信息,一般冗余3台)构成。
192.168.118.22 分片0分片1 配置 路由
192.168.118.32 分片0分片1 配置
192.168.118.24 分片0分片1 配置
配置rs0分片
dbpath = /usr/local/mongodb/db_rs0/data/
logpath = /usr/local/mongodb/db_rs0/logs/1.log
logappend = true
journal = true
port = 40000
fork = true
maxConns = 5000
bind_ip = 0.0.0.0
replSet = rs0
shardsvr = true
auth = false
配置rs1分片
dbpath = /usr/local/mongodb/db_rs0/data/
logpath = /usr/local/mongodb/db_rs0/logs/1.log
logappend = true
journal = true
port = 40000
fork = true
maxConns = 5000
bind_ip = 0.0.0.0
replSet = rs1
shardsvr = true
auth = false
配置服务器
dbpath = /usr/local/mongodb/db_configs/data/
logpath = /usr/local/mongodb/db_configs/logs
logappend = true
port = 40002
maxConns = 5000
bind_ip = 0.0.0.0
replSet = cfgset
configsvr = true
auth = false
fork = true
路由服务器
logpath = /usr/local/mongodb/mongos/logs/
logappend = true
port = 40003
fork = true
maxConns = 5000
bind_ip = 0.0.0.0
configdb = cfgset/192.168.118.22:40002,192.168.118.24:40002,192.168.118.32:40002
- 启动所有的rs0 rs1 和 配置服务器
- mongod --config /usr/local/mongodb/db_rs0/config_rs0/rs0.conf
- mongod --config /usr/local/mongodb/db_rs1/config_rs1/rs1.conf
- mongod --config /usr/local/mongodb/db_configs/config_cfgservice/cfgserver.conf
- 初始化副本集rs0 rs1
rs.initiate({_id:"rs1", members:[{_id:1,host:"192.168.118.22:40001"},{_id:2,host:"192.168.118.24:40001"},{_id:3,host:"192.168.118.32:40001"}]})
rs.initiate({_id:"rs0", members:[{_id:1,host:"192.168.118.22:40000"},{_id:2,host:"192.168.118.24:40000"},{_id:3,host:"192.168.118.32:40000"}]})
- 初始化配置服务器
rs.initiate({_id:"cfgset",configsvr:true, members:[{_id:1,host:"192.168.118.22:40002"},{_id:2,host:"192.168.118.24:40002"},{_id:3,host:"192.168.118.32:40002"}]})
查看执行结果rs.status()
{
"ok" : 1,
"operationTime" : Timestamp(1559547423, 1),
"$gleStats" : {
"lastOpTime" : Timestamp(1559547423, 1),
"electionId" : ObjectId("000000000000000000000000")
},
"$clusterTime" : {
"clusterTime" : Timestamp(1559547423, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
- 启动路由服务 路由的启动方式不一样
mongos --config /usr/local/mongodb/db_mongo/cfg_mongo.conf
- 添加分片
sh.addShard("rs0/192.168.118.22:40000,192.168.118.24:40000,192.168.118.32:40000")
sh.addShard("rs1/192.168.118.22:40001,192.168.118.24:40001,192.168.118.32:40001")
- 分片的表和数据库要特殊处理 片键要有索引
mongos> use chavin
switched to db chavin
mongos> db.users.insert({userid:1,username:"ChavinKing",city:"beijing"})
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5cf4f0a047ab8a12968ff2cb")
}
shards:
{ "_id" : "rs0", "host" : "rs0/192.168.118.22:40000,192.168.118.24:40000,192.168.118.32:40000", "state" : 1 }
{ "_id" : "rs1", "host" : "rs1/192.168.118.22:40001,192.168.118.24:40001,192.168.118.32:40001", "state" : 1 }
active mongoses:
"3.6.11-22-g7861aff" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "chavin", "primary" : "rs1", "partitioned" : false }//
False说明没有分片保存
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
rs0 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 0)
10.创建索引
mongos> db.users.ensureIndex({city:1})
设置分片
- mongos> sh.shardCollection("chavin.users",{city:1})
- 保存数据
- mongos> for(var i=1;i<10000;i++) db.users.insert({userid:i,username:"chavin"+i,city:"beijing"})
- WriteResult({ "nInserted" : 1 })
- mongos> for(var i=1;i<10000;i++) db.users.insert({userid:i,username:"dbking"+i,city:"changsha"})
- WriteResult({ "nInserted" : 1 })
- mongos> sh.status()