MongoDB 单机部署全指南:从安装到优化的完整实践

MongoDB 单机部署全指南:从安装到优化的完整实践

一、单机部署的适用场景与核心价值

MongoDB单机部署适用于开发测试环境、小型应用或资源受限的边缘计算场景。其核心价值在于快速启动、零依赖管理以及成本效益,尤其适合需要快速验证数据模型或搭建个人项目的场景。相较于集群部署,单机模式无需处理分片路由、副本集选举等复杂机制,但需注意数据持久性风险。

1.1 典型应用场景

  • 开发环境:快速搭建与应用程序同构的测试数据库
  • 微服务架构:为单个服务提供专用数据存储
  • 物联网设备:嵌入式系统或边缘网关的本地数据缓存
  • 临时分析:一次性数据清洗或报表生成任务

1.2 部署前的关键考量

  • 数据重要性:单机模式无自动容错机制,需定期备份
  • 性能需求:评估并发连接数、读写吞吐量是否在单机承载范围内
  • 扩展预期:明确未来是否需要平滑升级为集群架构

二、环境准备与安装流程

2.1 系统要求与依赖检查

项目 推荐配置 最低要求
操作系统 Ubuntu 20.04 LTS/CentOS 8 Linux 64位内核3.10+
内存 8GB+(生产环境) 2GB
磁盘空间 SSD 200GB+(数据目录) 50GB
依赖库 libcurl4, openssl 1.1+ glibc 2.17+

2.2 安装步骤详解

方法一:官方包管理器安装(推荐)

  1. # Ubuntu/Debian系统
  2. sudo apt-get install wget gnupg
  3. wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
  4. 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.list
  5. sudo apt-get update
  6. sudo apt-get install -y mongodb-org
  7. # 启动服务
  8. sudo systemctl enable mongod
  9. sudo systemctl start mongod

方法二:手动下载安装(适用于离线环境)

  1. 从MongoDB下载中心获取对应平台的TGZ包
  2. 解压并配置环境变量:
    1. tar -zxvf mongodb-linux-*-6.0.x.tgz
    2. mv mongodb-linux-*-6.0.x /opt/mongodb
    3. echo 'export PATH=/opt/mongodb/bin:$PATH' >> ~/.bashrc
    4. source ~/.bashrc

三、核心配置与安全加固

3.1 主配置文件优化(/etc/mongod.conf)

  1. storage:
  2. dbPath: /var/lib/mongodb
  3. journal:
  4. enabled: true
  5. wiredTiger:
  6. engineConfig:
  7. cacheSizeGB: 2.0 # 根据内存大小调整,建议为总内存50%
  8. systemLog:
  9. destination: file
  10. path: /var/log/mongodb/mongod.log
  11. logAppend: true
  12. net:
  13. port: 27017
  14. bindIp: 127.0.0.1,192.168.1.100 # 限制访问IP
  15. security:
  16. authorization: enabled # 启用认证
  17. # 生成密钥文件(集群部署时必需)
  18. # openssl rand -base64 756 > /opt/mongodb/keyfile
  19. # chmod 400 /opt/mongodb/keyfile

3.2 用户权限管理

  1. // 进入admin数据库创建管理员
  2. use admin
  3. db.createUser({
  4. user: "admin",
  5. pwd: "SecurePassword123!",
  6. roles: ["root"]
  7. })
  8. // 创建应用专用用户
  9. use appdb
  10. db.createUser({
  11. user: "appuser",
  12. pwd: "AppSpecificPassword",
  13. roles: ["readWrite", "dbAdmin"]
  14. })

3.3 防火墙配置示例

  1. # Ubuntu使用UFW
  2. sudo ufw allow from 192.168.1.0/24 to any port 27017
  3. sudo ufw enable
  4. # CentOS使用firewalld
  5. sudo firewall-cmd --permanent --add-port=27017/tcp
  6. sudo firewall-cmd --permanent --add-source=192.168.1.0/24
  7. sudo firewall-cmd --reload

四、性能调优与监控

4.1 关键参数调整

参数 推荐值(4核8GB) 说明
net.maxIncomingConnections 1000 根据并发连接数调整
operationProfiling.mode slowOp 开启慢查询日志
storage.wiredTiger.engineConfig.cacheSizeGB 4.0 通常设为内存的50-60%

4.2 监控工具集成

使用mongosh内置监控

  1. // 查看实时状态
  2. db.serverStatus()
  3. // 检查慢查询
  4. use admin
  5. db.setProfilingLevel(1, { slowms: 100 }) // 记录超过100ms的查询
  6. db.system.profile.find().sort({ $natural: -1 }).limit(5)

Prometheus+Grafana监控方案

  1. 部署mongodb_exporter
  2. 配置Prometheus抓取任务:
    1. scrape_configs:
    2. - job_name: 'mongodb'
    3. static_configs:
    4. - targets: ['localhost:9216']
  3. 导入Grafana仪表盘模板(ID:13782)

五、故障排查与维护

5.1 常见问题解决方案

问题1:服务启动失败

  1. # 检查日志定位原因
  2. journalctl -u mongod -n 50 --no-pager
  3. # 常见原因:
  4. # - 数据目录权限不足:chown -R mongodb:mongodb /var/lib/mongodb
  5. # - 端口冲突:netstat -tulnp | grep 27017
  6. # - 配置文件语法错误:mongod --config /etc/mongod.conf --dryRun

问题2:性能下降

  1. // 检查锁状态
  2. db.currentOp().filter(op => op.secs_running > 1)
  3. // 分析索引使用情况
  4. db.collection.aggregate([
  5. { $indexStats: {} }
  6. ])

5.2 备份与恢复策略

逻辑备份(mongodump)

  1. mongodump --host 127.0.0.1 --port 27017 \
  2. --username admin --password SecurePassword123! \
  3. --authenticationDatabase admin \
  4. --out /backup/mongodb_$(date +%Y%m%d)

物理备份(文件系统快照)

  1. 执行fsyncLock锁定写入:
    1. use admin
    2. db.runCommand({ fsync: 1, lock: true })
  2. 复制数据文件后解锁:
    1. db.runCommand({ fsyncUnlock: 1 })

六、升级与迁移指南

6.1 版本升级流程(以5.0→6.0为例)

  1. 备份所有数据
  2. 停止服务:
    1. sudo systemctl stop mongod
  3. 安装新版本包(保持数据目录不变)
  4. 启动时添加--repair参数:
    1. mongod --config /etc/mongod.conf --repair
  5. 验证兼容性:
    1. db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })

6.2 迁移到集群架构

  1. 准备三台主机(主从从架构)
  2. 生成统一密钥文件:
    1. openssl rand -base64 756 > /opt/mongodb/keyfile
    2. chmod 400 /opt/mongodb/keyfile
  3. 修改各节点配置:
    1. replication:
    2. replSetName: "rs0"
    3. security:
    4. keyFile: "/opt/mongodb/keyfile"
  4. 初始化副本集:
    1. rs.initiate({
    2. _id: "rs0",
    3. members: [
    4. { _id: 0, host: "mongo1:27017" },
    5. { _id: 1, host: "mongo2:27017" },
    6. { _id: 2, host: "mongo3:27017" }
    7. ]
    8. })

七、最佳实践总结

  1. 资源隔离:为MongoDB分配专用磁盘分区,避免与其他服务争用I/O
  2. 定期维护:每周执行db.repairDatabase()(需预留2倍数据空间)
  3. 连接池管理:应用层设置合理的连接池大小(通常为CPU核心数的2-3倍)
  4. 索引优化:对高频查询字段建立复合索引,遵循EPO原则(Equality, Range, Order)
  5. 日志轮转:配置logrotate防止日志文件过大
    1. # /etc/logrotate.d/mongodb
    2. /var/log/mongodb/mongod.log {
    3. daily
    4. rotate 30
    5. compress
    6. delaycompress
    7. missingok
    8. notifempty
    9. copytruncate
    10. }

通过系统化的单机部署实践,开发者可以快速构建稳定高效的MongoDB环境。建议每季度进行一次全面的性能基准测试,根据业务增长情况及时评估是否需要升级为集群架构。记住,单机部署的简洁性不应以牺牲数据安全性为代价,务必建立完善的备份机制和访问控制策略。