环境说明
Linux:CentOS7
MongoDB:mongodb-linux-x86_64-enterprise-rhel70-4.0.13
服务器IP:192.168.6.128、192.168.6.129、192.168.6.130
参考官方说明
IP | 服务和端口 |
---|---|
192.168.6.128 | mongos:27017、shardServer:27018、configServer:27019 |
192.168.6.129 | mongos:27017、shardServer:27018、configServer:27019 |
192.168.6.130 | mongos:27017、shardServer:27018、configServer:27019 |
配置ConfigServer
-
创建log、data目录
configServer目录结构.png -
配置config_server.conf
processManagement:
fork: true
net:
bindIp: 192.168.6.x,127.0.0.1
port: 27019
storage:
dbPath: /usr/local/mongodb-4.0.13/shard/config/data
systemLog:
destination: file
path: "/usr/local/mongodb-4.0.13/shard/config/log/config_server.log"
logAppend: true
storage:
journal:
enabled: true
replication:
replSetName: config_set
sharding:
clusterRole: configsvr
- 启动configServer服务
[root@simon mongodb-4.0.13]# bin/mongod -f shard/config/config_server.conf
- 登录其中一个节点
[root@simon mongodb-4.0.13]# bin/mongo --port 27019
- 设置副本集成员
rs.initiate(
{
_id: "config_set",
configsvr: true,
members: [
{ _id : 0, host : "192.168.6.128:27019" },
{ _id : 1, host : "192.168.6.129:27019" },
{ _id : 2, host : "192.168.6.130:27019" }
]
}
)
配置ShardServer
这里只配置3个单例Mongodb实例
-
创建log、data目录
shardServer目录.png - 配置server.conf
processManagement:
fork: true
net:
bindIp: 192.168.6.x,127.0.0.1
port: 27018
storage:
dbPath: /usr/local/mongodb-4.0.13/shard/server/data
systemLog:
destination: file
path: "/usr/local/mongodb-4.0.13/shard/server/log/server.log"
logAppend: true
storage:
journal:
enabled: true
#replication: # 单实例不配置,也可打开配置。分配搭建完成后可添加服务器,组成分片+副本集的功能
# replSetName: config_set
sharding:
clusterRole: shardsvr
- 启动shardServer服务(就是启动单台mongo)
[root@simon mongodb-4.0.13]# bin/mongod -f shard/server/server.conf
配置mongos
-
创建log目录
mongos目录结构.png -
配置mongos.conf
processManagement:
fork: true
net:
bindIp: 192.168.6.x,127.0.0.1
port: 27017
systemLog:
destination: file
path: "/usr/local/mongodb-4.0.13/shard/route/log/route.log"
logAppend: true
sharding:
configDB: config_set/192.168.6.x:27019,192.168.6.x:27019,192.168.6.x:27019#注意这里配置要加上configReplSetName
- 启动mongos服务
[root@simon mongodb-4.0.13]# bin/mongos -f shard/route/mongos.conf
- 配置chunkSize(默认64M为测试我们调整为1M)
但是 MongoDB 3.4 removes sharding.chunkSize and sharding.autoSplit settings。修改方法参考官网说明。
三台服务器都要执行下面的操作
- 登录
[root@simon mongodb-4.0.13]# bin/mongo -port 27017
- 修改chunkSize
MongoDB Enterprise mongos> use config
MongoDB Enterprise mongos> db.settings.save({_id:"chunksize",value:1})
- 查看修改结果
MongoDB Enterprise mongos> db.settings.find()
{ "_id" : "chunksize", "value" : 1 }
配置sharding
- 添加分片成员参考官方说明
登录其中一台服务器,执行下面命令
MongoDB Enterprise mongos> db.runCommand({addShard:"192.168.6.128:27018"})
MongoDB Enterprise mongos> db.runCommand({addShard:"192.168.6.129:27018"})
MongoDB Enterprise mongos> db.runCommand({addShard:"192.168.6.130:27018"})
由于部署时我们没有设置副本集名称,所以此处不需填写replica_set
。
到此为止分片集群已经搭建完毕,但数据并不会马上分散存储在不同的分片上。还需要设置数据库分片,继续下面的命令。
设置数据库分配
MongoDB会自动创建数据库,所有这里我们不自己创建simon。
注意Mongodb官网这句话:If the collection already contains data, you must create an index that supports the shard key before sharding the collection. If the collection is empty, MongoDB creates the index as part of sh.shardCollection()
。
所以我们先创建索引。登录其中一台服务器,通过mongos执行下面命令。
- 将片键字段设置为索引
MongoDB Enterprise mongos> db.student.ensureIndex({age:"hashed"})
- 启用数据库分片
MongoDB Enterprise mongos> sh.enableSharding("simon")
- 集合启用分片
对simon数据库的stuent集合启用分片。{age:"hashed"}为片键的索引。
MongoDB Enterprise mongos> sh.shardCollection("simon.student",{age:"hashed"})
- 插入数据
MongoDB Enterprise mongos> use simon
MongoDB Enterprise mongos> for(var i=1;i<=10000;i++){db.student.insert({ age:i,name:"A" })}
- 验证
- 128
MongoDB Enterprise > use simon
switched to db simon
MongoDB Enterprise > db.student.count()
3350
- 129
MongoDB Enterprise > use simon
switched to db simon
MongoDB Enterprise > db.student.count()
3366
- 130
MongoDB Enterprise > use simon
switched to db simon
MongoDB Enterprise > db.student.count()
3284
网友评论