简介:本文详细解析MongoDB单机部署与集群部署(含单机副本集)的完整流程,涵盖环境准备、配置优化、故障恢复及适用场景分析,为开发者提供可落地的技术方案。
单机部署适用于开发测试环境、小型应用或对数据可用性要求不高的场景。其核心优势在于部署简单、资源占用低,但存在单点故障风险。典型场景包括:
# 更新系统包sudo apt update && sudo apt upgrade -y# 安装依赖工具sudo apt install -y wget curl gnupg2 lsb-release
# 导入公钥wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -# 添加源(以MongoDB 6.0为例)echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list# 安装MongoDBsudo apt update && sudo apt install -y mongodb-org# 启动服务sudo systemctl start mongodsudo systemctl enable mongod
编辑/etc/mongod.conf文件进行关键配置:
storage:dbPath: /var/lib/mongodbjournal:enabled: truesystemLog:destination: filepath: /var/log/mongodb/mongod.loglogAppend: truenet:port: 27017bindIp: 0.0.0.0 # 生产环境建议改为127.0.0.1或内网IP
# 检查服务状态sudo systemctl status mongod# 连接测试mongo --host 127.0.0.1 --port 27017> db.runCommand({ping: 1})
MongoDB副本集通过主从复制和数据冗余实现:
| 节点 | 角色 | IP地址 | 配置建议 |
|---|---|---|---|
| Node1 | Primary | 192.168.1.10 | 4核8G+ |
| Node2 | Secondary | 192.168.1.11 | 2核4G+ |
| Node3 | Arbiter | 192.168.1.12 | 1核1G(仅仲裁) |
在每个节点上修改配置文件:
replication:replSetName: "rs0"enableMajorityReadConcern: true
在Primary节点执行:
rs.initiate({_id: "rs0",version: 1,members: [{ _id: 0, host: "192.168.1.10:27017", priority: 2 },{ _id: 1, host: "192.168.1.11:27017", priority: 1 },{ _id: 2, host: "192.168.1.12:27017", arbiterOnly: true }]})
验证副本集状态:
rs.status()// 正常状态应显示PRIMARY、SECONDARY、ARBITER各1个
// 设置从节点可读(延迟敏感型应用慎用)cfg = rs.conf()cfg.settings = { getLastErrorModes: { "majority": { w: "majority" } } }rs.reconfig(cfg)// 客户端连接时指定读偏好mongo --host 192.168.1.10 --eval "db.getMongo().setReadPref('secondaryPreferred')"
模拟Primary故障:
sudo systemctl stop mongod # 在Primary节点执行
观察选举过程:
// 在任意存活节点执行while(true) {var status = rs.status();printjson(status.members.map(m=>m.name+":"+m.stateStr));sleep(1000);}
通过单节点运行副本集模式,满足以下需求:
修改配置文件启用副本集:
replication:replSetName: "devrs"
启动时指定副本集参数:
mongod --replSet devrs --dbpath /data/db --port 27017 --fork --logpath /var/log/mongodb/mongod.log
初始化单节点副本集:
rs.initiate({_id: "devrs",members: [{ _id: 0, host: "localhost:27017" }]})
| 评估维度 | 单机部署 | 副本集集群 |
|---|---|---|
| 数据可靠性 | 低(单点故障) | 高(自动冗余) |
| 运维复杂度 | ★☆☆ | ★★★ |
| 硬件成本 | 低 | 中高(至少3节点) |
| 适用场景 | 开发/测试/非关键业务 | 生产环境/关键业务系统 |
| 扩展能力 | 垂直扩展 | 水平扩展+自动故障转移 |
开发环境:
processManagement:fork: truesystemLog:path: /tmp/mongodb.logstorage:wiredTiger:engineConfig:cacheSizeGB: 1 # 限制内存使用
生产环境:
# 使用mongostat监控mongostat --host <primary_ip> --port 27017 --discover
混合部署方案:
检查网络连通性:
telnet 192.168.1.11 27017
验证时间同步:
# 在所有节点执行timedatectl status
检查日志关键错误:
grep -i "repl set" /var/log/mongodb/mongod.log
存储引擎调优(WiredTiger):
storage:wiredTiger:engineConfig:cacheSizeGB: 4 # 通常设为可用内存的50%collectionConfig:blockCompressor: zlib
连接池配置:
// 客户端连接字符串示例mongodb://user:pass@host1:27017,host2:27017/db?replicaSet=rs0&maxPoolSize=100&waitQueueTimeoutMS=5000
MongoDB的部署方案选择需要平衡可用性、成本和运维复杂度。单机部署适合资源受限的非关键场景,而副本集集群则是生产环境的标准配置。随着MongoDB 6.0引入的分布式事务和更精细的副本集控制,集群部署的灵活性和可靠性得到进一步提升。建议开发者根据业务重要性建立分级部署策略,核心系统采用多区域副本集部署,非关键业务采用混合架构,在保证可用性的同时优化资源利用率。