sudo apt update && sudo apt upgrade -y
sudo apt install -y libcurl4 openssl liblzma5 gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
在所有节点上安装MongoDB:
sudo apt install -y mongodb-org
安装完成后,MongoDB服务会自动启动(默认端口27017)。
配置服务器存储集群元数据(如分片信息、集合分片规则),需至少3个节点以保证高可用。
sudo mkdir -p /data/configdb
sudo chown -R mongodb:mongodb /data/configdb
编辑配置文件,指定configsvr角色、副本集名称、端口(建议27019):
storage:
dbPath: /data/configdb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27019
bindIp: 0.0.0.0 # 允许所有节点访问
replication:
replSetName: configReplSet
sharding:
clusterRole: configsvr
sudo systemctl start mongod
sudo systemctl enable mongod # 设置开机自启
连接到任意配置服务器节点,执行初始化命令:
mongo --port 27019
在mongo shell中输入:
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "config1.example.com:27019" },
{ _id: 1, host: "config2.example.com:27019" },
{ _id: 2, host: "config3.example.com:27019" }
]
})
验证副本集状态:
rs.status()
分片服务器存储实际数据,每个分片应为一个副本集(建议3节点)。
sudo mkdir -p /data/shard1
sudo chown -R mongodb:mongodb /data/shard1
编辑配置文件,指定shardsvr角色、副本集名称、端口(建议27018):
storage:
dbPath: /data/shard1
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/shard1.log
net:
port: 27018
bindIp: 0.0.0.0
replication:
replSetName: shard1ReplSet
sharding:
clusterRole: shardsvr
sudo mongod --config /etc/mongod_shard1.conf
连接到分片服务器节点,执行初始化命令:
mongo --port 27018
在mongo shell中输入:
rs.initiate({
_id: "shard1ReplSet",
members: [
{ _id: 0, host: "shard1.example.com:27018" },
{ _id: 1, host: "shard1.example.com:27019" },
{ _id: 2, host: "shard1.example.com:27020" }
]
})
验证副本集状态:
rs.status()
重复上述步骤,配置其他分片(如shard2、shard3)。
mongos是客户端与集群的接口,负责请求路由。
sudo mkdir -p /data/mongos
sudo chown -R mongodb:mongodb /data/mongos
编辑配置文件,指定配置服务器地址(需包含所有config servers):
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongos.log
net:
port: 27017
bindIp: 0.0.0.0
sharding:
configDB: configReplSet/config1.example.com:27019,config2.example.com:27019,config3.example.com:27019
sudo mongos --config /etc/mongod_mongos.conf
连接到mongos节点,添加配置服务器(需与配置文件一致):
mongo --port 27017
在mongo shell中输入:
sh.addShardToCluster("configReplSet/config1.example.com:27019")
连接到mongos节点,将分片添加到集群:
mongo --port 27017
在mongo shell中输入(以shard1为例):
sh.addShard("shard1ReplSet/shard1.example.com:27018")
重复上述命令,添加其他分片(如shard2、shard3)。
sh.enableSharding("mydatabase") // 替换为你的数据库名
选择一个分片键(如_id或业务字段),执行分片操作:
sh.shardCollection("mydatabase.mycollection", { "shardKey": 1 }) // 替换为你的集合名和分片键
验证分片状态:
sh.status()
sh.status("configsvr")
sh.status()
use mydatabase
for (let i = 1; i <= 1000; i++) {
db.mycollection.insert({ "shardKey": i, "data": "test" + i })
}
db.mycollection.getShardDistribution()
security.authorization: enabled)和SSL/TLS加密。