碰到的问题
windows不支持fork
shardsvr=true分片模式
rs.reconfig(cfg)重新装载配置,并重新⽣成集群节点。
STARTUP2正在启动状态
路由启动用mongos
sh.enableSharding("shd_resume")会自己创建数据库
use lg_resume;//切换到数据库的意思
Failed to target upsert by query :: could not extract exact shard key分片错误
怎么修改分片规则?
先删除
db.collections.remove({_id:'lg_resume.lg_resume_datas'});
再重新创建
分片最好不要用id,想用主键直接写_id,springboot会把id转为_id,导致id为空。
实现步骤
进入mongo:mongo --host=127.0.0.1 --port=17011
mongod -f E:\Program\MongoDB\Server\5.0\bin\mongod.cfg
启动路由配置集群;路由自己不会保存配置信息,需要搭建配置集群
mongod -f E:\Program\MongoDB\Server\5.0\config\configsvr\config-17011.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\configsvr\config-17013.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\configsvr\config-17015.conf
添加节点集群
use admin//注意配置集群是存在admin库中
var cfg ={"_id":"configsvr",
"members":[
{"_id":1,"host":"127.0.0.1:17011"},
{"_id":2,"host":"127.0.0.1:17013"},
{"_id":3,"host":"127.0.0.1:17015"}]
};
rs.initiate(cfg)
mongod -f E:\Program\MongoDB\Server\5.0\config\shard1\shard1-37011.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard1\shard1-37013.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard1\shard1-37015.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard1\shard1-37017.conf
mongo --host=127.0.0.1 --port=37011
集群1,不需要admin
var cfg ={"_id":"shard1",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"127.0.0.1:37011"},
{"_id":2,"host":"127.0.0.1:37013"},
{"_id":3,"host":"127.0.0.1:37015"},
{"_id":4,"host":"127.0.0.1:37017","arbiterOnly":true}
]
};
rs.initiate(cfg)
rs.status()
mongod -f E:\Program\MongoDB\Server\5.0\config\shard2\shard2-47011.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard2\shard2-47013.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard2\shard2-47015.conf
mongod -f E:\Program\MongoDB\Server\5.0\config\shard2\shard2-47017.conf
mongo --host=127.0.0.1 --port=47011
集群2
var cfg ={"_id":"shard2",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"127.0.0.1:47011"},
{"_id":2,"host":"127.0.0.1:47013"},
{"_id":3,"host":"127.0.0.1:47015"},
{"_id":4,"host":"127.0.0.1:47017"}
]
};
rs.initiate(cfg)
rs.status()
集群3//省略
集群4//省略
//使⽤ mongos (注意不是mongod)
mongos -f E:\Program\MongoDB\Server\5.0\config\router\route-27017.conf
mongo --host=127.0.0.1 --port=27017//进入mongoshell进行操作
路由加入分片节点
sh.status()//先查看状态
sh.addShard("shard1/127.0.0.1:37011,127.0.0.1:37013,127.0.0.1:37015,127.0.0.1:37017");
sh.addShard("shard2/127.0.0.1:47011,127.0.0.1:47013,127.0.0.1:47015,127.0.0.1:47017");
集群3//省略
集群4//省略
sh.status()
为数据库开启分⽚功能
sh.enableSharding("lg_resume")
为指定集合开启分⽚功能,指定hash
sh.shardCollection("lg_resume.lg_resume_datas",{"id":"hashed"})
//测试
db.lg_resume_datas.getIndexes()
for(var i=1;i<= 20;i++){
db.lg_resume_datas.insert({"id":"test"+i,
salary:(Math.random()*20000).toFixed(2)});
}
删掉片键
use config
db.collections.remove({_id:'lg_resume.lg_resume_datas'});
db.chunks.remove( { ns: "lg_resume.lg_resume_datas" } )//可能多余
db.locks.remove( { _id: "lg_resume.lg_resume_datas" } )//可能多余
use lg_resume
db.adminCommand("flushRouterConfig");
db.lg_resume_datas.createIndex({date:1,name:1})
sh.shardCollection("lg_resume.lg_resume_datas",{"name":"hashed"})
//删除片键导致一些麻烦
//换一个集合
sh.shardCollection("lg_resume.lg2_resume_datas",{"name":"hashed"})
创建用户
use lg_resume;//切换到数据库
db.createUser(
{
user:"xhr_gx",
pwd:"abc321",
roles:[{role:"readWrite",db:"lg_resume"}]
}
)
db.grantRolesToUser( 'lagou_gx' , [{ role: 'readWrite' , db: 'lg_resume'}])
db.auth("xhr_gx", "abc321")
db.lg_resume.users.find().pretty()