MongoDB 提升 Ubuntu 稳定性的实用方案
一 运行环境与进程管理
- 使用 systemd 托管 MongoDB,确保异常退出能自动拉起并设置开机自启:创建或检查服务单元 /lib/systemd/system/mongod.service,关键项为 Restart=always、RestartSec=3、User=mongodb、ExecStart=/usr/bin/mongod --config /etc/mongod.conf;执行 systemctl daemon-reload && systemctl enable --now mongod 启用。日常用 systemctl status mongod 与 journalctl -u mongod -f 观测状态与日志,便于快速定位故障与恢复。为降低风险,建议仅在内网开放访问,必要时将 bindIp 设为内网网段而非 0.0.0.0。
二 高可用架构
- 部署 副本集(Replica Set) 提供数据冗余与自动故障转移:在各节点 /etc/mongod.conf 中配置相同的 replSet=rs0,启动后在主节点执行 rs.initiate(),通过 rs.add(“host:27017”) 添加从节点;若仅有 2 个数据节点,可加入仲裁节点 rs.addArb(“arbiter:27017”) 以维持奇数投票成员;必要时用 rs.reconfig(cfg) 调整 priority 与 votes 优化主选举稳定性。副本集能显著降低单点故障概率,是提升稳定性的核心手段。
三 系统资源与内核优化
- 资源与内核参数:为 mongod 设置合理的文件句柄与进程数(如 /etc/security/limits.d/mongodb.conf 中配置 nofile 64000、nproc 64000),减少连接耗尽与进程受限;将 vm.swappiness=1 降低换页、提升稳定性;将 net.ipv4.tcp_keepalive_time=600 优化长连接存活;文件系统优先 ext4/xfs,并按需挂载数据盘,避免与系统盘争用。
- 禁用透明大页(THP):创建 /etc/systemd/system/disable-thp.service,在 [Service] 中执行写入 /sys/kernel/mm/transparent_hugepage/enabled 与 defrag 为 never,然后 systemctl daemon-reload && systemctl enable --now disable-thp.service,可减少内存管理抖动与延迟尖峰。
- WiredTiger 缓存:在 /etc/mongod.conf 设置 storage.wiredTiger.engineConfig.cacheSizeGB,建议不超过物理内存的 50%(留出内存给操作系统与文件系统缓存),避免 OOM 与抖动。
四 安全与访问控制
- 启用认证与最小权限:在 /etc/mongod.conf 打开 security.authorization: enabled,通过 mongosh 在 admin 库创建管理员与业务用户,按最小权限分配角色,避免滥用高权限账户。
- 网络与访问控制:默认仅本地访问更安全;若需远程,仅在内网开放并将 bindIp 限制为内网 CIDR,同时结合防火墙(如 ufw)仅放行应用与运维网段到 27017,减少暴露面与暴力扫描风险。
五 监控 备份与恢复
- 监控与告警:使用 systemctl status、journalctl -u mongod -f 做即时排查;结合 mongostat、mongotop 观察吞吐、锁与慢操作;建议接入 Prometheus + Grafana 做长期可视化监控与阈值告警,提前识别性能退化与异常。
- 备份与演练:制定定期备份策略(如按日快照/导出关键库表),并定期做恢复演练验证可用性与完整性;在副本集架构下,亦可使用 mongodump 对从节点做一致性备份,降低对线上主的影响。