参考资料:https://www.mongodb.com/zh-cn/docs/v7.0/tutorial/convert-replica-set-to-replicated-shard-cluster/
安装参阅:Mongodb7.0 安装-优快云博客
1. 前期准备
所有服务器地址必须是以域名的方式存在,不能是IP
域名映射参考:hosts 域名映射-优快云博客
1.1 Config Server
config1.com:27040
config2.com:27040
config3.com:27040
ps: 配置服务器最低要求3台
1.2 Mongos Server
mongs1.com:27017
mongs2.com:27017
mongs3.com:27017
1.3 Node Server
mongod1.com:27041
mongod2.com:27041
mongod3.com:27041
1.4 Node-副本 Server
mongod11.com:27041
mongod22.com:27041
mongod33.com:27041
丐版的mongodb分片集群服务器就准备好了,如果只是搭建试试手参照以下方案:
1. 3台config搭建在一台机器上
2. mongos 于node 共用服务器
3. 1.4的副本集可以省略
2. 开始搭建
2.1 Config Sever
2.1.1 修改配置
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
sharding:
clusterRole: configsvr
replication:
replSetName: configReplSet
net:
bindIp: config1.com
port: 27040
其他几台服务参照配置只需修改【bindIp】 即可
2.1.2 初始化服务
连接服务器其中一台即可:
# 连接服务器
mongosh "mongodb://config1.com:27040"
# mongosh中执行
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "config1.com:27040" },
{ _id: 1, host: "config2.com:27040" },
{ _id: 2, host: "config3.com:27040" }
]
})
执行完成后会返回:{ ok: 1 }
2.2 Node Server
2.2.1 修改配置
分片集(replSetName)分配:shardReplSet1, shardReplSet2, shardReplSet3
# 分片Node配置
sharding:
clusterRole: shardsvr
replication:
replSetName: shardReplSet1
net:
bindIp: mongod1.com
port: 27041
#分片Node-副本配置
sharding:
clusterRole: shardsvr
replication:
replSetName: shardReplSet1
net:
bindIp: mongod11.com
port: 27041
#上面两个加起来形成一个副本集架构
副本集与分片集在配置上的区别:副本集replSetName 一致,分片集相反
其他几台服务参照配置只需修改【replSetName,bindIp】 即可
2.2.2 初始化服务
副本集初始化: 连接其中一台即可
分片集初始化: 一台都不能丢下
# 连接 分片1 初始化副本集
rs.initiate({
_id: "shardReplSet1",
members: [
{ _id: 0, host: "mongod1.com:27041" },
{ _id: 1, host: "mongod11.com:27041" }
]
})
# 连接 分片2 初始化副本集
rs.initiate({
_id: "shardReplSet2",
members: [
{ _id: 0, host: "mongod2.com:27041" },
{ _id: 1, host: "mongod22.com:27041" }
]
})
# 连接 分片3 初始化副本集
rs.initiate({
_id: "shardReplSet3",
members: [
{ _id: 0, host: "mongod3.com:27041" },
{ _id: 1, host: "mongod33.com:27041" }
]
})
以上分别连接对应的mongosh 执行初始化
2.3 Mongs Server
2.3.1 修改配置
net:
port: 27017
bindIp: mongs1.com
# configDB configReplSet->所有的配置服务器
sharding:
configDB: configReplSet/config1.com:27040,config2.com:27040,config3.com:27040
其他几台服务参照配置只需修改【bindIp】 即可
2.3.2 初始化服务
连接到其中一台mongos 完成分片添加即可
sh.addShard("shardReplSet1/mongod1.com:27041,mongod11.com:27041")
sh.addShard("shardReplSet2/mongod2.com:27041,mongod22.com:27041")
sh.addShard("shardReplSet3/mongod3.com:27041,mongod33.com:27041")
3. 测试
连接上一台mongos
mongosh "mongodb://mongs1.com:27017"
use testdatabase
# 从 MongoDB 6.0 开始,对集合分片无需首先运行 sh.enableSharding() 方法来配置数据库。
sh.shardCollection("testdatabase.testRole", { _id: "hashed"})
db.testRole.insertOne({
_id: 1,
roleName: "role10000",
age: 2
})
db.testRole.insertOne({
_id: 2,
roleName: "role10000",
age: 2
})
db.testRole.insertOne({
_id: 3,
roleName: "role10000",
age: 2
})
# 连接上所有节点服务器看看数据分布情况
丐版分片集搭建完成