一、MongoDB单机部署:快速入门与核心配置
1.1 单机部署适用场景
MongoDB单机部署适用于开发测试环境、小型应用或对数据高可用性要求不高的场景。其优势在于部署简单、资源占用低,但存在单点故障风险。典型场景包括:
- 本地开发环境快速搭建
- 初创公司验证业务逻辑
- 非关键数据存储(如日志、临时数据)
1.2 单机部署详细步骤
环境准备
- 操作系统:推荐CentOS 7/8或Ubuntu 20.04 LTS
- 硬件配置:最低2核4GB内存,建议4核8GB以上
- 软件依赖:
wget、libcurl4、openssl等基础库
安装流程
# 添加MongoDB官方仓库(以Ubuntu为例)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/ubuntu $(lsb_release -cs)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.listsudo apt-get updatesudo apt-get install -y mongodb-org# 启动服务sudo systemctl enable mongodsudo systemctl start mongod
核心配置优化
修改/etc/mongod.conf文件关键参数:
storage:dbPath: /var/lib/mongodbjournal:enabled: truewiredTiger:engineConfig:cacheSizeGB: 2 # 根据内存调整net:bindIp: 0.0.0.0 # 允许远程连接(生产环境建议限制IP)port: 27017security:authorization: enabled # 启用认证
1.3 单机部署常见问题
- 端口冲突:检查27017端口是否被占用
- 数据目录权限:确保
mongod用户对/var/lib/mongodb有读写权限 - 性能瓶颈:通过
mongostat监控,发现QPS过高时考虑升级硬件
二、MongoDB集群部署:副本集架构解析
2.1 副本集核心价值
MongoDB副本集通过主从复制实现:
- 高可用性:主节点故障时自动选举新主节点
- 数据冗余:数据在多个节点同步
- 读写分离:可配置从节点承担读请求
2.2 单机副本集部署方案
适用场景
- 开发环境模拟生产集群
- 资源有限但需要高可用验证
- 边缘计算节点部署
部署步骤
2.2.1 创建数据目录
mkdir -p /data/db{1,2,3}chmod -R 0755 /data/db*
2.2.2 启动三个MongoDB实例
# 节点1(主节点)mongod --replSet rs0 --dbpath /data/db1 --port 27017 --fork --logpath /var/log/mongodb/mongod1.log# 节点2(从节点)mongod --replSet rs0 --dbpath /data/db2 --port 27018 --fork --logpath /var/log/mongodb/mongod2.log# 节点3(仲裁节点)mongod --replSet rs0 --dbpath /data/db3 --port 27019 --fork --logpath /var/log/mongodb/mongod3.log
2.2.3 初始化副本集
// 连接任意节点mongo --port 27017// 初始化配置rs.initiate({_id: "rs0",members: [{ _id: 0, host: "localhost:27017" },{ _id: 1, host: "localhost:27018" },{ _id: 2, host: "localhost:27019", arbiterOnly: true }]})
2.2.4 验证副本集状态
rs.status()// 正常应显示PRIMARY、SECONDARY、ARBITER各一个
2.3 副本集高级配置
读写分离配置
// 设置从节点可读(默认仅主节点可写)cfg = rs.conf()cfg.settings = { getLastErrorDefaults: { w: "majority", wtimeout: 5000 } }rs.reconfig(cfg)// 客户端连接时指定readPreference// 例如Python驱动from pymongo import MongoClient, ReadPreferenceclient = MongoClient("mongodb://localhost:27017",read_preference=ReadPreference.SECONDARY_PREFERRED)
故障自动转移测试
# 模拟主节点宕机kill $(ps aux | grep '27017' | grep -v grep | awk '{print $2}')# 观察选举过程(约30秒)rs.status()
三、生产环境部署建议
3.1 硬件选型原则
| 组件 | 开发环境 | 生产环境 |
|---|---|---|
| CPU核心数 | 2 | 8-16 |
| 内存 | 4GB | 32GB+ |
| 磁盘类型 | HDD | SSD/NVMe |
| 网络带宽 | 100Mbps | 1Gbps+ |
3.2 监控体系搭建
# 安装Prometheus Operatorkubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml# 配置MongoDB Exporter- job_name: 'mongodb'static_configs:- targets: ['mongodb:9216']
3.3 备份恢复策略
逻辑备份
mongodump --host=localhost --port=27017 --db=test --out=/backup/mongorestore --host=localhost --port=27017 --db=test /backup/test/
物理备份(需关闭实例)
# 停止服务sudo systemctl stop mongod# 复制数据文件cp -r /var/lib/mongodb /backup/mongodb_backup_$(date +%Y%m%d)# 恢复时停止服务并替换文件
四、性能对比与选型建议
4.1 单机与副本集性能对比
| 指标 | 单机模式 | 副本集模式 |
|---|---|---|
| 写入吞吐量 | 1.2万TPS | 1.1万TPS |
| 读取吞吐量 | 0.8万QPS | 2.3万QPS |
| 故障恢复时间 | N/A | 30-120秒 |
| 资源占用率 | 60% | 85% |
4.2 选型决策树
-
业务连续性要求:
- 允许小时级中断 → 单机
- 要求分钟级恢复 → 副本集
-
数据量规模:
- <100GB → 单机
- 100GB-1TB → 3节点副本集
-
1TB → 分片集群
-
预算限制:
- 开发测试 → 单机
- 生产环境 → 至少3节点副本集
五、最佳实践总结
- 开发环境:使用单机部署+Docker容器化,快速迭代
- 预发布环境:部署3节点副本集,验证高可用逻辑
-
生产环境:
- 跨可用区部署
- 启用加密传输(TLS)
- 配置慢查询日志
- 定期进行故障演练
-
升级策略:
- 先升级从节点,再升级主节点
- 使用
rs.stepDown()主动降级主节点
通过本文的详细指导,开发者可以清晰理解MongoDB单机部署与集群部署的差异,掌握单机副本集的部署技巧,并根据实际业务需求做出合理的架构选择。