Linux系统MongoDB配置最佳实践
/var/lib/mongodb)和日志目录(如/var/log/mongodb),并通过chown -R mongodb:mongodb将所有权赋予MongoDB运行用户(通常为mongodb),避免权限问题导致服务异常。/etc/mongod.conf作为主配置文件,通过systemctl管理服务(启动/停止/重启)。配置文件需包含数据路径(storage.dbPath)、日志路径(systemLog.path)、端口(net.port,默认27017)、后台运行(processManagement.fork: true)等核心参数。/etc/systemd/system/mongod.service),设置Restart=always,并通过systemctl enable mongod实现开机自动启动,确保系统重启后服务持续运行。security部分设置authorization: enabled,强制要求用户通过用户名/密码访问数据库。创建管理员用户(如admin)并分配root角色(db.createUser({ user: "admin", pwd: "yourPassword", roles: [{ role: "root", db: "admin" }] })),避免未授权访问。net.bindIp参数指定允许连接的IP地址(如bindIp: 127.0.0.1,192.168.1.100,替换为服务器实际IP),避免暴露数据库到公网。如需远程访问,务必配合防火墙(如ufw allow 27017)限制访问源。net.ssl配置SSL/TLS加密(如mode: requireSSL、PEMKeyFile: /path/to/cert.pem),保护数据传输安全,防止中间人攻击。storage.wiredTiger.engineConfig.cacheSizeGB参数,设置为服务器物理内存的50%-70%(如4GB内存设置为2-3GB),避免占用过多内存导致系统不稳定。vm.swappiness=10(减少交换空间使用)、vm.overcommit_memory=1(允许内存超额分配),通过sysctl命令持久化配置,提升内存使用效率。db.collection.createIndex({ field: 1 })),避免全表扫描。使用explain()方法分析查询性能,优化慢查询。net.maxIncomingConnections调整最大连接数(默认10000),根据实际负载调整,避免连接数过多导致资源耗尽。rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "mongo1:27017" }, { _id: 1, host: "mongo2:27017" }, { _id: 2, host: "mongo3:27017" }]})),实现主节点故障自动切换,提升数据可靠性。sh.addShard("mongo1:27017")、sh.enableSharding("mydatabase")),通过水平扩展提升读写性能。replication.oplogSizeMB参数(如50GB),确保oplog足够存储复制操作,避免主节点故障时数据丢失。systemLog.verbosity调整日志详细程度(0-5,默认0),如设置为1可输出更多诊断信息,便于排查问题。systemLog.logRotate: reopen,配合Linux的logrotate工具(配置/etc/logrotate.d/mongod),实现日志定期切割(如每天切割、保留7天),避免日志文件过大占用磁盘空间。operationProfiling.slowOpThresholdMs设置慢查询阈值(如100ms),启用慢查询日志(operationProfiling.mode: slowOp),记录执行时间超过阈值的查询,优化查询性能。auditLog.destination: file、auditLog.path: /var/log/mongodb/audit.json),满足合规性要求。mongostat监控操作速率、mongotop监控集合级读写时间)、第三方工具(如Prometheus+Grafana)监控数据库性能,及时发现瓶颈。mongodump备份数据(如每天凌晨),存储到异地或云存储,避免数据丢失。恢复时使用mongorestore工具。