Ubuntu 上 MongoDB 配置的最佳实践
一 安全加固
- 启用认证与最小权限:在 /etc/mongod.conf 中开启 security.authorization: enabled,在 admin 库创建高权限管理员(如 root 或 userAdminAnyDatabase),并为业务库按需创建仅具 readWrite 等最小权限的用户。连接时通过 –authenticationDatabase admin 指定认证库。
- 限制网络暴露:默认仅本地访问,设置 net.bindIp: 127.0.0.1;如确需远程,仅放通受控网段或跳板机 IP,避免 bindIp: 0.0.0.0。
- 加密传输:启用 SSL/TLS,配置 net.ssl.mode: requireSSL,提供 PEMKeyFile 与 CAFile,生产环境关闭 sslAllowInvalidCertificates。
- 防火墙与端口治理:使用 ufw/iptables 仅允许白名单来源访问 27017/tcp,并定期审计规则。
- 系统账户与权限:为 MongoDB 创建专用系统用户(如 mongodb),避免使用 root 运行;按需在 /etc/security/limits.d/ 配置 nofile/nproc 等资源限制。
- 审计与日志:开启 systemLog.destination: file 与 logAppend: true,并视合规要求启用审计日志,集中收集与定期审查。
二 性能与存储优化
- 硬件与文件系统:优先使用 SSD,保证充足 RAM;MongoDB 为内存映射模型,更多内存可显著提升性能。
- WiredTiger 缓存:在 /etc/mongod.conf 中设置 storage.wiredTiger.engineConfig.cacheSizeGB,通常将可用内存的 70%–80% 分配给缓存(需结合实例上其他进程与系统需求)。
- 连接与队列:根据业务峰值设置 net.maxIncomingConnections,避免过小导致连接排队、过大引发资源争用。
- 索引策略:为高频查询路径建立合适索引;使用 explain(“executionStats”) 验证索引命中;定期清理无用索引,必要时重建以降低碎片。
- 查询优化:避免全表扫描,合理使用 projection 只返回必要字段,分页建议基于范围/游标而非 skip/limit 深翻。
- 慢查询与监控:开启 operationProfiling 以捕获慢查询,配合 mongostat/mongotop 与第三方监控(如 PMM)持续观测。
三 高可用与备份恢复
- 部署副本集:对生产环境建议部署 副本集(Replica Set) 以获得数据冗余与自动故障切换,并按需调整副本相关参数与优先级。
- 定期备份:使用 mongodump/mongorestore 执行定时备份与恢复演练,确保备份可用与恢复时效;重要变更前执行快照备份。
- 版本与修复:保持 MongoDB 稳定版本,及时应用修复版本与安全补丁。
四 Ubuntu 系统层面的优化
- 透明大页(THP):禁用 THP 以降低内存管理与页分配抖动,创建 systemd 服务写入 /sys/kernel/mm/transparent_hugepage/enabled 与 defrag 为 never,并设为开机启用。
- 资源限制:在 /etc/security/limits.d/mongodb.conf 中提升 nofile/nproc(如 64000),防止连接数或线程数受限。
- 服务与自启:使用 systemctl 管理 mongod 服务,启用开机自启,变更配置后按序 daemon-reload 与 restart。
五 推荐的 mongod.conf 最小安全模板(按需调整)
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 依据内存与实例共驻进程调整
net:
port: 27017
bindIp: 127.0.0.1 # 远程仅放通白名单IP
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongo.pem
CAFile: /etc/ssl/ca.pem
sslAllowInvalidCertificates: false
security:
authorization: enabled
operationProfiling:
slowOpThresholdMs: 100
mode: slowOp
以上模板涵盖认证、本地绑定、TLS 加密与慢查询分析等关键项,可作为上线前的安全基线。