使用过elasticsearch的人应该都知道,es的动态分片很强大,看看下图,数据、备份节点管理由es自己完成
我在第7.1.1Spring操作mongodb之mongodb4.x集群搭建中参考了MongoDB4.0.2分片+副本集集群搭建,莫非mongodb的分片必须手工指定吗?
先看看10分钟完成MongoDB的容量规划及硬件配置
按照一主、一从、一仲裁的模式,每次新增节点岂不是3的倍数?
我们不需要再创建config server了,于是新增的节点中创建下面的目录,其中mongos.conf
内容不用改变
mkdir -p /application/data/mongodb/mongos/log
mkdir -p /application/data/mongodb/shard4/data
mkdir -p /application/data/mongodb/shard4/log
mkdir -p /application/data/mongodb/shard5/data
mkdir -p /application/data/mongodb/shard5/log
mkdir -p /application/data/mongodb/shard6/data
mkdir -p /application/data/mongodb/shard6/log
# shared4.conf
systemLog:
destination: file
logAppend: true
path: /application/data/mongodb/shard4/log/shared4.log
# Where and how to store data.
storage:
dbPath: /application/data/mongodb/shard4/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /application/data/mongodb/shard4/log/shard4.pid
# network interfaces
net:
port: 27004
bindIp: 0.0.0.0
#operationProfiling:
replication:
replSetName: shard4
sharding:
clusterRole: shardsvr
systemLog:
destination: file
logAppend: true
path: /application/data/mongodb/shard5/log/shared5.log
# Where and how to store data.
storage:
dbPath: /application/data/mongodb/shard5/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /application/data/mongodb/shard5/log/shard5.pid
# network interfaces
net:
port: 27005
bindIp: 0.0.0.0
#operationProfiling:
replication:
replSetName: shard5
sharding:
clusterRole: shardsvr
systemLog:
destination: file
logAppend: true
path: /application/data/mongodb/shard6/log/shared6.log
# Where and how to store data.
storage:
dbPath: /application/data/mongodb/shard6/data
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /application/data/mongodb/shard1/log/shard6.pid
# network interfaces
net:
port: 27006
bindIp: 0.0.0.0
#operationProfiling:
replication:
replSetName: shard6
sharding:
clusterRole: shardsvr
执行下面的命令,启动shard
mongod -f /application/data/mongodb/config/shard4.conf
mongod -f /application/data/mongodb/config/shard5.conf
mongod -f /application/data/mongodb/config/shard6.conf
再对分片进行配置
mongo --port 27004
config = {
_id : "shard4",
members : [
{_id : 0, host : "bwhs163:27004", priority : 2 },
{_id : 1, host : "bwhs164:27004" , arbiterOnly :true},
{_id : 2, host : "bwhs165:27004", priority : 1 }
]
}
rs.initiate(config)
mongo --port 27005
config = {
_id : "shard5",
members : [
{_id : 0, host : "bwhs163:27005", priority : 1 },
{_id : 1, host : "bwhs164:27005" , priority :2},
{_id : 2, host : "bwhs165:27005", arbiterOnly :true }
]
}
rs.initiate(config)
mongo --port 27006
config = {
_id : "shard6",
members : [
{_id : 0, host : "bwhs163:27006", arbiterOnly :true },
{_id : 1, host : "bwhs164:27006" , priority :2},
{_id : 2, host : "bwhs165:27006", priority : 2 }
]
}
rs.initiate(config)
执行命令mongos -f /application/data/mongodb/config/mongos.conf
,接着添加分片就可以了
mongo --port 20000
use admin
sh.addShard("shard4/bwhs163:27004,bwhs164:27004,bwhs164:27004")
sh.addShard("shard5/bwhs163:27005,bwhs164:27005,bwhs164:27005")
sh.addShard("shard6/bwhs163:27006,bwhs164:27006,bwhs164:27006")
执行db.stats()
就可以看到对应的数据库在哪个分片了。