Linux环境下MongoDB配置的关键技巧
/usr/local/mongodb/bin)添加到系统PATH中,可通过修改~/.bashrc(用户级)或/etc/bashrc(系统级)文件实现,使用source命令使更改立即生效,方便全局调用mongod、mongo等命令。/var/lib/mongodb用于数据存储、/var/log/mongodb用于日志存储),并通过chown -R mongodb:mongodb命令将所有权赋予MongoDB运行用户(通常为mongodb),确保进程有读写权限。WiredTiger(MongoDB默认存储引擎),支持文档级锁定、事务及数据压缩(默认压缩比为50%),配置storage.wiredTiger.engineConfig.cacheSizeGB参数调整缓存大小(建议为服务器物理内存的50%-75%,避免占用过多内存影响系统及其他应用)。systemLog.logAppend: true),指定日志路径(systemLog.path: /var/log/mongodb/mongod.log);设置合理的日志刷新间隔(storage.journal.commitIntervalMs,默认100ms),平衡数据持久性与I/O性能。net.bindIp: 127.0.0.1仅本地访问,或0.0.0.0允许远程访问),设置端口(默认27017,可根据业务需求调整)。security.authorization: enabled),强制用户登录;若需副本集,设置replication.replSetName(如rs0)。storage.wiredTiger.engineConfig.cacheSizeGB参数限制WiredTiger使用的内存(如cacheSizeGB: 4表示使用4GB内存),避免缓存过大导致系统内存不足。需根据服务器内存容量(如16GB服务器可设置8-12GB)及业务负载调整。echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled命令禁用,并在/etc/rc.local中添加开机自启。swappiness:降低系统使用交换分区(Swap)的概率(如vm.swappiness=0),减少磁盘I/O压力,提升数据库性能。/etc/security/limits.conf,添加mongodb hard nofile 100000、mongodb soft nofile 100000,避免连接数过多导致进程崩溃。db.collection.createIndex({ field: 1 })),避免全表扫描;使用复合索引优化多字段查询(如db.collection.createIndex({ field1: 1, field2: -1 }));定期通过db.collection.explain("executionStats")分析查询性能,删除未使用的索引。db.collection.find({ field: 1 }, { _id: 0, field: 1 }))只返回必要字段,减少数据传输量;采用分页查询(limit()与skip()组合)避免一次性返回大量数据;避免在where子句中使用函数或运算符(如db.collection.find({ field: { $gt: 100 } })优于db.collection.find({ $where: "this.field > 100" }))。ext4或XFS文件系统(XFS对大文件支持更好,推荐用于MongoDB)。rs.initiate()命令初始化副本集,实现主节点故障时的自动选举,提升数据可靠性与读取性能(从节点可处理读请求)。sh.shardCollection("database.collection", { field: 1 })),选择均匀分布的分片键(如user_id、timestamp),避免数据倾斜;添加分片节点时,使用sh.addShard()命令将新节点加入集群。mongostat(监控每秒操作数、读写延迟等)、mongotop(监控集合级读写时间)命令实时查看数据库性能;使用db.serverStatus()命令查看内存、连接、锁等详细信息。grep "slow" /var/log/mongodb/mongod.log),找出慢查询;开启慢查询日志(operationProfiling.mode: slowOp,设置slowOpThresholdMs阈值,如100ms),记录执行时间超过阈值的查询。db.repairDatabase()命令修复损坏的数据库;定期重建索引(db.collection.reIndex()),优化索引结构;清理无用数据(如过期日志、临时集合),释放磁盘空间。security.authorization: enabled,强制用户登录;创建管理员用户(use admin; db.createUser({ user: "admin", pwd: "yourPassword", roles: ["userAdminAnyDatabase"] })),分配最小必要权限(如readWrite、dbAdmin)。net.bindIp限制访问IP(如仅允许应用服务器IP访问);使用防火墙(如ufw、firewalld)开放MongoDB端口(默认27017);避免使用默认端口(如修改为27018),降低被扫描的风险。