sudo timedatectl set-ntp true),避免时间偏差导致副本集同步失败。在所有节点上执行以下命令安装MongoDB(以Ubuntu 22.04为例):
sudo apt update
sudo apt install -y mongodb-org
安装完成后,启动MongoDB服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
配置服务器存储集群元数据(如分片信息、集合分布),需至少3个节点以实现高可用。
sudo mkdir -p /data/configdb
sudo chown -R $(whoami) /data/configdb # 授予当前用户读写权限
以副本集模式启动配置服务器(假设节点IP为192.168.1.101、192.168.1.102、192.168.1.103):
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
连接到任意配置服务器,执行初始化命令:
mongo --port 27019
在mongo shell中输入:
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "192.168.1.101:27019" },
{ _id: 1, host: "192.168.1.102:27019" },
{ _id: 2, host: "192.168.1.103:27019" }
]
})
分片服务器存储实际数据,每个分片通常为一个副本集(建议至少3个节点)。
sudo mkdir -p /data/shard1
sudo chown -R $(whoami) /data/shard1
以副本集模式启动分片服务器(假设节点IP为192.168.1.201、192.168.1.202、192.168.1.203):
mongod --shardsvr --replSet shard1ReplSet --dbpath /data/shard1 --port 27018
连接到任意分片服务器,执行初始化命令:
mongo --port 27018
在mongo shell中输入:
rs.initiate({
_id: "shard1ReplSet",
members: [
{ _id: 0, host: "192.168.1.201:27018" },
{ _id: 1, host: "192.168.1.202:27018" },
{ _id: 2, host: "192.168.1.203:27018" }
]
})
重复上述步骤,配置其他分片服务器(如shard2ReplSet、shard3ReplSet)。
路由服务器是应用程序与分片集群的接口,负责请求路由。
mongos --configdb configReplSet/192.168.1.101:27019,192.168.1.102:27019,192.168.1.103:27019 --port 27017
注:
configReplSet需与配置服务器的副本集名称一致,节点IP需替换为实际地址。
连接到路由服务器,添加分片(以shard1ReplSet为例):
mongo --port 27017
在mongo shell中输入:
sh.addShard("shard1ReplSet/192.168.1.201:27018,192.168.1.202:27018,192.168.1.203:27018")
重复上述命令,添加其他分片(如shard2ReplSet、shard3ReplSet)。
sh.enableSharding("mydatabase") // 替换为实际数据库名
分片键决定了数据分布,需选择高基数(唯一值多)、低频率(变化少)的字段(如userId、orderId):
sh.shardCollection("mydatabase.mycollection", { "userId": 1 }) // 替换为实际集合名和分片键
注:
1表示升序索引,-1表示降序索引。
连接到路由服务器,查看集群状态:
mongo --port 27017
sh.status()
输出应包含配置服务器、分片服务器、路由服务器的信息,以及分片键、数据分布情况。
mongostat、mongotop或MongoDB Atlas监控集群性能,定期备份数据(如使用mongodump)。--auth参数)、配置防火墙(仅允许可信IP访问MongoDB端口),避免未授权访问。