sudo apt update && sudo apt upgrade -y
libcurl4、openssl等库支持。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
通过APT安装MongoDB官方包(推荐),避免第三方源的安全风险。
sudo apt install -y mongodb-org
安装完成后,MongoDB服务会自动启动(可通过systemctl status mongod验证)。
副本集是MongoDB的核心高可用组件,至少需要3个节点(1主2从)。
mongod.conf编辑/etc/mongod.conf,修改以下关键参数(以节点1为例):
net:
port: 27017
bindIp: 0.0.0.0 # 生产环境建议限制为节点间IP
storage:
dbPath: /var/lib/mongodb # 数据存储路径
journal:
enabled: true # 启用日志,确保数据持久化
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log # 日志路径
replication:
replSetName: rs0 # 副本集名称(所有节点必须一致)
注意:从节点无需额外配置,只需确保
replSetName与主节点一致。
sudo systemctl restart mongod
sudo systemctl enable mongod # 设置开机自启
连接到任意节点(如节点1),执行初始化命令:
mongo --port 27017
在Mongo shell中输入:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "node1_ip:27017" },
{ _id: 1, host: "node2_ip:27017" },
{ _id: 2, host: "node3_ip:27017" }
]
})
替换node1_ip、node2_ip等为实际节点IP。
rs.status()
正常输出应显示所有节点状态为PRIMARY(主节点)或SECONDARY(从节点)。
若需处理大规模数据,需搭建分片集群(由配置服务器、分片服务器、路由服务器组成)。
配置服务器存储集群元数据(如分片映射),至少需要3个节点。
sudo mkdir -p /data/configdb
sudo chown -R mongodb:mongodb /data/configdb
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
mongo --port 27019
输入:rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "config1_ip:27019" },
{ _id: 1, host: "config2_ip:27019" },
{ _id: 2, host: "config3_ip:27019" }
]
})
每个分片也是一个副本集,用于存储实际数据。
sudo mkdir -p /data/shard1
sudo chown -R mongodb:mongodb /data/shard1
mongod --shardsvr --replSet shard1 --dbpath /data/shard1 --port 27018
mongo --port 27018
输入:rs.initiate({
_id: "shard1",
members: [
{ _id: 0, host: "shard1_node1_ip:27018" },
{ _id: 1, host: "shard1_node2_ip:27018" },
{ _id: 2, host: "shard1_node3_ip:27018" }
]
})
路由服务器是客户端访问集群的入口,负责将请求路由到对应分片。
mongos --configdb configReplSet/config1_ip:27019,config2_ip:27019,config3_ip:27019 --port 27017
注意:
--configdb参数需指向所有配置服务器,逗号分隔。
连接到mongos,添加分片:
mongo --port 27017
输入:
sh.addShard("shard1/shard1_node1_ip:27018,shard1_node2_ip:27018,shard1_node3_ip:27018")
sh.enableSharding("your_database")
user_id),避免热点问题。sh.shardCollection("your_database.your_collection", { "user_id": 1 })
sh.status()
输出应显示配置服务器、分片服务器及分片映射信息。
启用身份验证:
mongo --port 27017
输入:use admin
db.createUser({
user: "admin",
pwd: "strong_password",
roles: [{ role: "root", db: "admin" }]
})
mongod.conf,启用认证:security:
authorization: enabled
sudo systemctl restart mongod
配置防火墙:仅允许客户端IP访问27017(mongod)、27017(mongos)端口。
sudo ufw allow from client_ip to any port 27017
备份策略:定期使用mongodump备份数据,存储到异地。
rs.status()sh.status()mongostat(命令行)或MongoDB Compass(图形化工具)。/var/log/mongodb/mongod.log排查问题。以上步骤覆盖了MongoDB在Debian上的集群搭建全流程,可根据实际需求调整节点数量、分片策略及安全配置。生产环境中建议使用Docker或Kubernetes进一步简化管理。