MongoDB分片配置

MongoDB分片配置涉及mongos路由进程、config server路由表服务和数据存储分片。选择高cardinality的shard key以分散数据,避免查询瓶颈。考虑使用hash key增加随机性,但可能影响query isolation。配置过程包括关闭config server、备份数据、重启config server等步骤。
摘要由CSDN通过智能技术生成
简单注解:
  1. mongos 路由进程, 应用程序接入mongos再查询到具体分片,监听端口默认27017
  2. config server 路由表服务, 每一台都具有全部chunk的路由信息 
  3. shard为数据存储分片, 每一片都可以是复制集(replica set)


部署分片集群

#配置mongoDB shareding时,使用hosts域名代替IP地址好处非常多,可以在很多迁移的地方,直接更换迁移服务器,IP地址变了也没关系
#例如在迁移config服务器时,只需要在mongos服务器里面把配置的config服务器的hosts绑定修改一下即可

step 1 启动config server
/usr/bin/mongod --configsvr --dbpath /data/mongodb/config/  --logpath/data/mongodb/config/log/configdb.log --port 20000
#正式生产环境一般启动3个config server,启动3个是为了做热备,三个config server中有一个失败则三个config server集群变成只读群集

step 2 启动mongos
/usr/bin/mongos --configdb 192.168.10.1:20000,192.168.10.2:20000,192.168.10.3:20000 --logpath/data/mongodb/mongos/mongos.log
#把所有要加入到分片的mongo配置文件都加入进来
step3 启动分片mongod
/usr/bin/mongod --shardsvr --replSet rs1 --dbpath /data/mongodb/data/ --logpath /tmp/sharda.log  --port 10000
/usr/bin/mongod --shardsvr --replSet rs2 --dbpath /data/mongodb/data/ --logpath /tmp/sharda.log  --port 10000
/usr/bin/mongod --shardsvr --replSet rs3 --dbpath /data/mongodb/data/ --logpath /tmp/sharda.log  --port 10000  –directoryperdb
#分片是一个mongo副本集,--replSet rs1是副本集的名称,生产环境即使分片是单台服务器,也建议这么设置,方便以后扩展
#上面是在3台不同的服务器上启动的三个副本集,名称分别上rs1,rs2,rs3
#可以启用这个命令, –directoryperdb

/usr/bin/mongod --shardsvr --dbpath /data/mongodb/data/ --logpath /tmp/sharda.log  --port 10000
#分片是一个普通的mongo服务器
 

step4 在mongos添加分片
mongo 127.0.0.1/admin
#用mongo 连接上mongos,切换到admin库
sh.addShard("rs1/192.168.10.1:20000") 
sh.addShard("rs2/192.168.10.2:20000") 
sh.addShard("rs3/192.168.10.3:20000") 
sh.addShard("rs3/192.168.10.3:20000","allowLocal :1") 
sh.addShard("shared4/10.26.79.89:27017,10.26.165.157:27017,10.26.165.112:27017") 
db.runCommand( { addshard : "127.0.0.1:27020", allowLocal :1} )
#添加一个 replica set副本集作为一个分片
#上面是添加了三个副本集,每个副本集目前只有一个成员,做了三个分片
#实际上在分片情况下在一个副本集中可以只有一个或者两个成员,不一定至少三个
#添加本地的分片时可能需要参数“allowLocal :1”
sh.addShard("192.168.10.1:20000")
#添加非replica set作为分片: 


step5 对某个数据库启用分片
sh.enableSharding("test")
#这里只是标识这个test数据库可以启用分片,但实际上还并没有进行分片。
 
step6 对collection进行分片
sh.shardCollection("records.people", { "zipcode": 1, "name": 1 } )
sh.shardCollection("people.addresses", { "state": 1, "_id": 1 } )
sh.shardCollection("assets.chairs", { "type": 1, "_id": 1 } ) 
#对某个库的某个表进行分片,分片的key可以使用单个字段,也可以使用多个字段
#这里分片用的key,就自动变成该表的索引字段
#至于具体哪一行分到哪一片了,只有config配置文件知道
#不像atlas可以明确的知道那行在哪个表里面
#对一个已经有数据的表进行分片时需要先建立索引,再把索引字段当作分片key来进行分片
db.alerts.ensureIndex( { _id : "hashed"} )
sh.shardCollection("events.alerts", { "_id": "hashed"} )
db.t3.ensureIndex({age:1} , {backgroud:true})
#对alerts表进行建立索引操作,增加一个_id索引字段,并对该字段生成随机hash值,这样就可以根据这个hash sharded key进行分片了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值