Mongodb——shard切片+replset复制集结合的集群架构案例详解

mongodb的shard切片简单架构图
Mongodb——shard切片+replset复制集结合的集群架构案例详解

实战搭建分片与复制集结合的环境
环境结构图
Mongodb——shard切片+replset复制集结合的集群架构案例详解
第一步:做好三个分片的复制集
vim /etc/mongodb/shard1.conf
dbpath=/data/shard1
logpath=/data/mlog/shard1.log
logappend=true
journal=true # 用于数据故障恢复和持久化数据的,它以日志方式来记录, journal除了故障恢复的作用之外,还可以提高写入的性能,批量提交(batch-commit),journal一般默认100ms刷新一次, 在这个过程中,所有的写入都可以一次提交,是单事务的,全部成功或者全部失败,刷新时间,可以更改,范围是2-300ms。
quiet=true #安静输出
bind_ip=0.0.0.0
port=27017
fork=true
replSet=shard1
shardsvr=true
maxConns=20000

scp /etc/mongodb/shard1.conf [email protected]:/etc/mongodb/shard1
scp /etc/mongodb/shard1.conf [email protected]:/etc/mongodb/shard1

启动shard1
./mongod -f /etc/mongodb/shard1.conf

./mongo --port 27017

var rsconf={
_id:“shard1”,
members:[
{
_id:0,
host:“172.26.130.66:27017”
},
{
_id:1,
host:“172.26.130.61:27017”
},
{
_id:2,
host:“172.26.130.60:27017”
}
]
}

rs.initiate(rsconf)
rs.status()

注意:shard2、shard3同理

第二步:搭建configsvr
mkdir /etc/mongodb
vim /etc/mongodb/config.conf
#configsvr.conf
dbpath=/data/conf
logpath=/data/mlog/conf.log
logappend=true
bind_ip=0.0.0.0
port=30000
fork=true
replSet=configs
configsvr=true
maxConns=20000 #最大连接数

scp config.conf [email protected]:/etc/mongodb
scp config.conf [email protected]:/etc/mongodb

分别到三台服务器上启动configsvr
cd /usr/local/mongodb/bin
./mongod -f /etc/mongodb/config.conf

./mongo --port 30000
var rsconf={
_id:“configs”,
members:[
{
_id:0,
host:“172.26.130.66:30000”
},
{
_id:1,
host:“172.26.130.61:30000”
},
{
_id:2,
host:“172.26.130.60:30000”
}
]
}

rs.initiate(rsconf)
rs.status()

第三步:启动mongos连接configsvr
vim /etc/mongodb/mongos.conf
logpath=/data/mlog/mongos.conf
logappend=true
bind_ip=0.0.0.0
port=40000
fork=true
configdb=configs/172.26.130.66:30000,172.26.130.61:30000,172.26.130.60:30000
maxConns=20000

scp mongos.conf [email protected]:/etc/mongodb
scp mongos.conf [email protected]:/etc/mongodb

分别到三台服务器上启动mongos
./mongos -f /etc/mongodb/mongos.conf

./mongo --port 40000

sh.addShard(“shard1/172.26.130.66:27017,172.26.130.61:27017,172.26.130.60:27017”)
sh.addShard(“shard2/172.26.130.66:27018,172.26.130.61:27018,172.26.130.60:27018”)
sh.addShard(“shard3/172.26.130.66:27019,172.26.130.61:27019,172.26.130.60:27019”)

sh.status()

1:添加待分片的库
sh.enableSharding(‘dbName’);

2、添加待分片的表
sh.shardCollection(“dbName.collectionName”,{field:1});
field是collection的一个字段,系统将会利用field的值,来计算应该分到哪一个片上。
这个filed叫“片键”,shard key

问题汇总:
1、waiting until next sessions refresh interval: Collection config.system.sessions is not sharded.
在执行 sh.shardCollection(“dbName.collectionName”,{field:1});一直无法成功制定好分片规则,即写好shard key

原因:在做shard1、shard2、shard3片时,启动时没有加上–shardsvr或shardsvr=true这个参数,告诉系统他是一个片,不然无法分片

2、chunk size的值默认 为64MB,取值范围是1MB到1024MB。那它的大小应该怎样根据实际情况调整
在数据量很大的情况下,考虑网络带宽,如果发现带宽占满,可以考虑调小chunk size,这样migration造成的传输量会降低

在服务器硬件很好的情况下,比如我的服务器cpu 24 core, memory 128 GB, disk 96 TB. 考虑调大chunk size,减少不必要的分片。

1. 

use config
2.
db.settings.save( { _id:“chunksize”, value: 63 )