Skip to content

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

  • 描述:指定日志输出目标,可选值为 filesyslog
  • 默认值file
  • 最佳实践:生产环境建议使用 file,便于日志管理和分析

logAppend

  • 描述:指定是否追加到现有日志文件,而不是覆盖
  • 默认值true
  • 最佳实践:保持默认值 true,避免日志丢失

path

  • 描述:指定日志文件的路径
  • 默认值:无,必须显式指定
  • 最佳实践:使用标准路径,如 /var/log/mongodb/mongod.log

logRotate

  • 描述:指定日志轮换方式,可选值为 renamereopen
  • 默认值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

  • 描述:指定存储引擎,可选值为 wiredTigerinMemory
  • 默认值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

  • 描述:指定复制集名称
  • 默认值:无
  • 最佳实践:使用有意义的名称,如 rs0prod-rs

oplogSizeMB

  • 描述:指定 oplog 的大小,单位为 MB
  • 默认值:根据磁盘大小自动计算
  • 最佳实践:根据业务需求调整,建议保持 24-72 小时的 oplog 窗口

enableMajorityReadConcern

  • 描述:启用或禁用 majority 读取关注点
  • 默认值true(MongoDB 3.6+)
  • 最佳实践:保持默认值,确保读取数据的一致性

6. 分片集群配置(sharding)

clusterRole

  • 描述:指定节点在分片集群中的角色,可选值为 configsvrshardsvr
  • 默认值:无
  • 最佳实践:根据节点角色正确配置

configDB

  • 描述:指定配置服务器的连接字符串,仅用于 mongos 实例
  • 默认值:无
  • 最佳实践:使用完整的配置服务器复制集连接字符串

7. 安全配置(security)

authorization

  • 描述:启用或禁用基于角色的访问控制
  • 默认值disabled
  • 最佳实践:生产环境必须启用,设置为 enabled

keyFile

  • 描述:指定用于复制集和分片集群内部认证的密钥文件路径
  • 默认值:无
  • 最佳实践:生产环境必须配置,确保集群内部通信安全

clusterAuthMode

  • 描述:指定集群内部认证模式,可选值为 keyFilesendKeyFilesendX509x509
  • 默认值keyFile
  • 最佳实践:生产环境使用 x509 进行证书认证,提供更高的安全性

ssl

  • 描述:配置 TLS/SSL 加密
  • 默认值:无
  • 最佳实践:生产环境建议启用,确保数据传输安全

8. 操作配置(operationProfiling)

mode

  • 描述:指定性能分析器模式,可选值为 offslowOpall
  • 默认值off
  • 最佳实践:生产环境建议设置为 slowOp,仅记录慢查询

slowOpThresholdMs

  • 描述:指定慢查询阈值,单位为毫秒
  • 默认值:100
  • 最佳实践:根据业务需求调整,如 500ms 或 1000ms

slowOpSampleRate

  • 描述:指定慢查询采样率,范围为 0.0 到 1.0
  • 默认值:1.0(所有慢查询)
  • 最佳实践:对于高负载环境,可以降低采样率,如 0.1

9. 审计配置(auditLog)

destination

  • 描述:指定审计日志输出目标,可选值为 filesyslogconsole
  • 默认值:无
  • 最佳实践:生产环境建议使用 file,便于审计和合规

format

  • 描述:指定审计日志格式,可选值为 JSONBSON
  • 默认值JSON
  • 最佳实践:保持默认值 JSON,便于日志分析

path

  • 描述:指定审计日志文件路径
  • 默认值:无,必须显式指定
  • 最佳实践:使用标准路径,如 /var/log/mongodb/audit.log

filter

  • 描述:指定审计日志过滤条件
  • 默认值:无
  • 最佳实践:根据审计需求配置过滤条件,减少日志量

配置文件最佳实践

  1. 使用版本控制管理配置文件

    • 将配置文件纳入版本控制,便于跟踪变更
    • 记录配置变更的原因和影响
    • 定期审查配置文件
  2. 按环境分离配置文件

    • 为开发、测试、生产环境创建不同的配置文件
    • 根据环境特点调整配置参数
    • 确保生产环境配置的安全性和性能
  3. 使用配置模板

    • 创建标准化的配置模板
    • 确保所有 MongoDB 实例配置的一致性
    • 便于新实例的快速部署
  4. 定期备份配置文件

    • 定期备份配置文件,避免配置丢失
    • 备份文件应存储在安全位置
    • 测试备份文件的可用性
  5. 监控配置变更

    • 监控配置文件的变更
    • 记录变更时间和变更人
    • 验证变更的有效性
  6. 遵循最小权限原则

    • 仅配置必要的参数
    • 避免过度配置
    • 根据实际需求调整参数

配置参数调优建议

  1. 内存配置

    • 为 WiredTiger 缓存分配足够的内存,但不要超过系统内存的 50%
    • 预留足够内存给操作系统和其他进程
    • 对于大型数据库,考虑增加内存容量
  2. 存储配置

    • 使用高性能存储设备,如 SSD
    • 启用日记功能,确保数据一致性
    • 根据写入负载调整日记提交间隔
  3. 网络配置

    • 根据实际需求配置绑定 IP 和端口
    • 限制最大连接数,避免资源耗尽
    • 生产环境启用 TLS/SSL 加密
  4. 安全配置

    • 启用基于角色的访问控制
    • 配置密钥文件或证书认证
    • 启用审计日志,便于合规和安全审计
  5. 日志配置

    • 使用合适的日志级别,避免过多日志影响性能
    • 配置日志轮换,避免日志文件过大
    • 定期归档和清理日志文件

常见问题与解决方案

问题:配置文件语法错误导致 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 }) 动态修改,如 logLevelslowMSmaxConns 等。具体可参考 MongoDB 官方文档。

Q4: 如何配置 MongoDB 以使用 TLS/SSL 加密?

A4: 在配置文件中添加以下 SSL 配置:

yaml
net:
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/mongodb/server.pem
    CAFile: /etc/mongodb/ca.pem

Q5: 如何配置 MongoDB 以使用密钥文件进行复制集认证?

A5: 在配置文件中添加以下安全配置:

yaml
security:
  keyFile: /etc/mongodb/keyfile
  authorization: enabled

同时,确保密钥文件的权限为 600:chmod 600 /etc/mongodb/keyfile