外观
MongoDB 核心配置参数
MongoDB 使用 YAML 格式的配置文件(默认名为 mongod.conf)来配置服务器的运行参数。配置文件包含了 MongoDB 服务器的核心设置,包括网络、存储、安全、日志等方面。理解和正确配置这些参数对于确保 MongoDB 服务器的性能、可靠性和安全性至关重要。
配置文件结构
yaml
# 系统日志配置
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# 存储配置
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# 进程管理配置
processManagement:
fork: true # 后台运行
pidFilePath: /var/run/mongodb/mongod.pid
# 网络配置
net:
port: 27017
bindIp: 127.0.0.1
# 复制集配置
replication:
replSetName: rs0
# 分片集群配置
sharding:
clusterRole: shardServer
# 安全配置
security:
authorization: enabled
keyFile: /etc/mongodb/keyfile核心配置参数详解
1. 系统日志配置(systemLog)
destination
- 描述:指定日志输出目标,可选值为
file或syslog - 默认值:
file - 最佳实践:生产环境建议使用
file,便于日志管理和分析
logAppend
- 描述:指定是否追加到现有日志文件,而不是覆盖
- 默认值:
true - 最佳实践:保持默认值
true,避免日志丢失
path
- 描述:指定日志文件的路径
- 默认值:无,必须显式指定
- 最佳实践:使用标准路径,如
/var/log/mongodb/mongod.log
logRotate
- 描述:指定日志轮换方式,可选值为
rename或reopen - 默认值:
rename - 最佳实践:使用
rename配合外部日志轮换工具(如 logrotate)
verbosity
- 描述:指定日志详细级别,范围为 0-5
- 默认值:0(最少日志)
- 最佳实践:生产环境使用 0-1,调试时使用 3-5
2. 存储配置(storage)
dbPath
- 描述:指定数据文件存储路径
- 默认值:
/data/db(Linux/macOS)或%SYSTEMDRIVE%\data\db(Windows) - 最佳实践:使用高性能存储设备,确保足够的磁盘空间
journal.enabled
- 描述:启用或禁用日记功能
- 默认值:
true(64位系统),false(32位系统) - 最佳实践:生产环境必须启用,确保数据一致性
journal.commitIntervalMs
- 描述:日记提交间隔,单位为毫秒
- 默认值:100
- 最佳实践:保持默认值,或根据写入性能需求调整
engine
- 描述:指定存储引擎,可选值为
wiredTiger、inMemory等 - 默认值:
wiredTiger(MongoDB 3.2+) - 最佳实践:大多数场景使用
wiredTiger,内存数据库场景使用inMemory
wiredTiger.engineConfig.cacheSizeGB
- 描述:WiredTiger 缓存大小,单位为GB
- 默认值:系统内存的 50%
- 最佳实践:根据服务器内存和负载调整,建议预留足够内存给操作系统和其他进程
wiredTiger.engineConfig.directoryForIndexes
- 描述:是否将索引存储在单独的目录
- 默认值:
false - 最佳实践:对于I/O密集型工作负载,可以考虑设置为
true,将索引存储在高性能存储设备上
3. 进程管理配置(processManagement)
fork
- 描述:指定是否在后台运行 MongoDB 进程
- 默认值:
false - 最佳实践:生产环境建议设置为
true,便于进程管理
pidFilePath
- 描述:指定 PID 文件的路径
- 默认值:无
- 最佳实践:使用标准路径,如
/var/run/mongodb/mongod.pid
4. 网络配置(net)
port
- 描述:指定 MongoDB 监听的端口
- 默认值:27017
- 最佳实践:生产环境可以考虑使用非默认端口,提高安全性
bindIp
- 描述:指定 MongoDB 绑定的 IP 地址
- 默认值:127.0.0.1(仅本地访问)
- 最佳实践:生产环境根据需要配置,如
0.0.0.0(所有网卡)或特定IP地址
bindIpAll
- 描述:是否绑定到所有 IP 地址,替代 bindIp
- 默认值:
false - 最佳实践:生产环境根据网络架构选择合适的绑定方式
maxIncomingConnections
- 描述:指定允许的最大并发连接数
- 默认值:65536
- 最佳实践:根据服务器资源和应用需求调整
wireObjectCheck
- 描述:指定是否检查客户端发送的 BSON 对象的有效性
- 默认值:
true - 最佳实践:保持默认值,确保数据完整性
ipv6
- 描述:启用或禁用 IPv6 支持
- 默认值:
false - 最佳实践:根据网络环境需求配置
5. 复制集配置(replication)
replSetName
- 描述:指定复制集名称
- 默认值:无
- 最佳实践:使用有意义的名称,如
rs0、prod-rs等
oplogSizeMB
- 描述:指定 oplog 的大小,单位为 MB
- 默认值:根据磁盘大小自动计算
- 最佳实践:根据业务需求调整,建议保持 24-72 小时的 oplog 窗口
enableMajorityReadConcern
- 描述:启用或禁用 majority 读取关注点
- 默认值:
true(MongoDB 3.6+) - 最佳实践:保持默认值,确保读取数据的一致性
6. 分片集群配置(sharding)
clusterRole
- 描述:指定节点在分片集群中的角色,可选值为
configsvr或shardsvr - 默认值:无
- 最佳实践:根据节点角色正确配置
configDB
- 描述:指定配置服务器的连接字符串,仅用于 mongos 实例
- 默认值:无
- 最佳实践:使用完整的配置服务器复制集连接字符串
7. 安全配置(security)
authorization
- 描述:启用或禁用基于角色的访问控制
- 默认值:
disabled - 最佳实践:生产环境必须启用,设置为
enabled
keyFile
- 描述:指定用于复制集和分片集群内部认证的密钥文件路径
- 默认值:无
- 最佳实践:生产环境必须配置,确保集群内部通信安全
clusterAuthMode
- 描述:指定集群内部认证模式,可选值为
keyFile、sendKeyFile、sendX509或x509 - 默认值:
keyFile - 最佳实践:生产环境使用
x509进行证书认证,提供更高的安全性
ssl
- 描述:配置 TLS/SSL 加密
- 默认值:无
- 最佳实践:生产环境建议启用,确保数据传输安全
8. 操作配置(operationProfiling)
mode
- 描述:指定性能分析器模式,可选值为
off、slowOp或all - 默认值:
off - 最佳实践:生产环境建议设置为
slowOp,仅记录慢查询
slowOpThresholdMs
- 描述:指定慢查询阈值,单位为毫秒
- 默认值:100
- 最佳实践:根据业务需求调整,如 500ms 或 1000ms
slowOpSampleRate
- 描述:指定慢查询采样率,范围为 0.0 到 1.0
- 默认值:1.0(所有慢查询)
- 最佳实践:对于高负载环境,可以降低采样率,如 0.1
9. 审计配置(auditLog)
destination
- 描述:指定审计日志输出目标,可选值为
file、syslog或console - 默认值:无
- 最佳实践:生产环境建议使用
file,便于审计和合规
format
- 描述:指定审计日志格式,可选值为
JSON或BSON - 默认值:
JSON - 最佳实践:保持默认值
JSON,便于日志分析
path
- 描述:指定审计日志文件路径
- 默认值:无,必须显式指定
- 最佳实践:使用标准路径,如
/var/log/mongodb/audit.log
filter
- 描述:指定审计日志过滤条件
- 默认值:无
- 最佳实践:根据审计需求配置过滤条件,减少日志量
配置文件最佳实践
使用版本控制管理配置文件:
- 将配置文件纳入版本控制,便于跟踪变更
- 记录配置变更的原因和影响
- 定期审查配置文件
按环境分离配置文件:
- 为开发、测试、生产环境创建不同的配置文件
- 根据环境特点调整配置参数
- 确保生产环境配置的安全性和性能
使用配置模板:
- 创建标准化的配置模板
- 确保所有 MongoDB 实例配置的一致性
- 便于新实例的快速部署
定期备份配置文件:
- 定期备份配置文件,避免配置丢失
- 备份文件应存储在安全位置
- 测试备份文件的可用性
监控配置变更:
- 监控配置文件的变更
- 记录变更时间和变更人
- 验证变更的有效性
遵循最小权限原则:
- 仅配置必要的参数
- 避免过度配置
- 根据实际需求调整参数
配置参数调优建议
内存配置:
- 为 WiredTiger 缓存分配足够的内存,但不要超过系统内存的 50%
- 预留足够内存给操作系统和其他进程
- 对于大型数据库,考虑增加内存容量
存储配置:
- 使用高性能存储设备,如 SSD
- 启用日记功能,确保数据一致性
- 根据写入负载调整日记提交间隔
网络配置:
- 根据实际需求配置绑定 IP 和端口
- 限制最大连接数,避免资源耗尽
- 生产环境启用 TLS/SSL 加密
安全配置:
- 启用基于角色的访问控制
- 配置密钥文件或证书认证
- 启用审计日志,便于合规和安全审计
日志配置:
- 使用合适的日志级别,避免过多日志影响性能
- 配置日志轮换,避免日志文件过大
- 定期归档和清理日志文件
常见问题与解决方案
问题:配置文件语法错误导致 MongoDB 无法启动
解决方案:
- 使用
mongod --config /path/to/mongod.conf --validate验证配置文件语法 - 检查 YAML 格式是否正确,特别是缩进和冒号
- 查看日志文件,获取详细的错误信息
问题:修改配置参数后需要重启 MongoDB 吗?
解决方案:
- 大多数配置参数需要重启 MongoDB 才能生效
- 部分参数可以通过
db.adminCommand({ setParameter: 1, parameterName: value })动态修改 - 建议在业务低峰期重启 MongoDB
问题:如何备份和恢复配置文件?
解决方案:
- 使用
cp命令备份配置文件:cp /etc/mongod.conf /etc/mongod.conf.backup - 恢复配置文件:
cp /etc/mongod.conf.backup /etc/mongod.conf - 确保备份文件权限正确:
chmod 600 /etc/mongod.conf
问题:如何优化配置文件以提高性能?
解决方案:
- 根据服务器硬件和业务需求调整配置参数
- 监控 MongoDB 性能指标,识别瓶颈
- 参考 MongoDB 官方文档和最佳实践
- 定期测试和调整配置参数
常见问题(FAQ)
Q1: MongoDB 配置文件的默认位置是什么?
A1: MongoDB 配置文件的默认位置因操作系统而异:
- Linux:
/etc/mongod.conf - macOS:
/usr/local/etc/mongod.conf - Windows:
C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
Q2: 如何验证配置文件的语法正确性?
A2: 使用 mongod --config /path/to/mongod.conf --validate 命令验证配置文件语法。如果配置文件语法正确,命令将返回 mongod --config /path/to/mongod.conf --validate。
Q3: 哪些配置参数可以动态修改而不需要重启 MongoDB?
A3: 部分配置参数可以通过 db.adminCommand({ setParameter: 1, parameterName: value }) 动态修改,如 logLevel、slowMS、maxConns 等。具体可参考 MongoDB 官方文档。
Q4: 如何配置 MongoDB 以使用 TLS/SSL 加密?
A4: 在配置文件中添加以下 SSL 配置:
yaml
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/mongodb/server.pem
CAFile: /etc/mongodb/ca.pemQ5: 如何配置 MongoDB 以使用密钥文件进行复制集认证?
A5: 在配置文件中添加以下安全配置:
yaml
security:
keyFile: /etc/mongodb/keyfile
authorization: enabled同时,确保密钥文件的权限为 600:chmod 600 /etc/mongodb/keyfile。
