1. 首页 > MongoDB教程 > 正文

MongoDB教程FG003-MongoDB配置文件参数官方详解与调优

本文档风哥主要介绍MongoDB配置文件参数官方详解与调优,包括MongoDB配置文件基础概念、配置文件结构、配置参数分类、配置规划、性能调优建议、安全配置建议、基础配置、高级配置、副本集配置、配置实战案例、参数调优实战、配置验证实战等内容,风哥教程参考MongoDB官方文档Configuration File Options内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 MongoDB配置文件基础概念

MongoDB的配置文件是一个YAML格式的文件,用于配置MongoDB服务器的各种参数。配置文件可以指定MongoDB的运行方式、存储设置、网络参数、安全选项等。更多视频教程www.fgedu.net.cn

配置文件的作用:

  • 指定数据存储位置
  • 配置网络参数
  • 设置安全选项
  • 调整性能参数
  • 配置复制和分片

1.2 MongoDB配置文件结构

MongoDB配置文件采用YAML格式,由多个配置部分组成,每个部分包含相关的配置参数:

# MongoDB配置文件结构示例
storage:
dbPath: /mongodb/fgdata
journal:
enabled: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4

systemLog:
destination: file
logAppend: true
path: /mongodb/log/mongod.log

net:
port: 27017
bindIp: 0.0.0.0

processManagement:
fork: true
pidFilePath: /mongodb/app/mongod.pid

security:
authorization: enabled
keyFile: /mongodb/conf/keyfile

replication:
replSetName: rs0

sharding:
clusterRole: shardServer

1.3 MongoDB配置参数分类

MongoDB的配置参数可以分为以下几类:

# MongoDB配置参数分类

## 存储相关参数
– storage.dbPath:数据存储路径
– storage.journal.enabled:是否启用日志
– storage.engine:存储引擎
– storage.wiredTiger:WiredTiger存储引擎参数

## 日志相关参数
– systemLog.destination:日志输出目标
– systemLog.logAppend:是否追加日志
– systemLog.path:日志文件路径
– systemLog.verbosity:日志详细程度

## 网络相关参数
– net.port:监听端口
– net.bindIp:绑定IP地址
– net.maxIncomingConnections:最大连接数
– net.tcp.keepAlive:TCP keepalive设置

## 进程管理参数
– processManagement.fork:是否后台运行
– processManagement.pidFilePath:PID文件路径

## 安全相关参数
– security.authorization:是否启用认证
– security.keyFile:keyfile路径
– security.ssl:SSL配置

## 复制相关参数
– replication.replSetName:副本集名称
– replication.oplogSizeMB:oplog大小
– replication.enableMajorityReadConcern:是否启用多数读关注

## 分片相关参数
– sharding.clusterRole:集群角色
– sharding.archiveMovedChunks:是否归档移动的块

风哥提示:MongoDB的配置参数非常丰富,需要根据实际部署场景和业务需求进行合理配置。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 MongoDB配置规划

在生产环境中,需要根据部署模式和业务需求进行配置规划:

# 配置规划

## 单节点部署配置规划
– 数据目录:/mongodb/fgdata
– 日志目录:/mongodb/log
– 配置目录:/mongodb/conf
– 端口:27017
– 内存:根据数据量和并发需求配置

## 副本集部署配置规划
– 副本集名称:rs0
– 节点数量:至少3个
– 数据目录:/mongodb/fgdata
– 日志目录:/mongodb/log
– 配置目录:/mongodb/conf
– 端口:27017
– keyFile:/mongodb/conf/keyfile

## 分片集群部署配置规划
– 配置服务器:3个节点
– mongos:至少2个
– 分片:至少2个,每个分片为副本集
– 数据目录:/mongodb/fgdata
– 日志目录:/mongodb/log
– 配置目录:/mongodb/conf
– 端口:27017(mongod),27018(mongos)

2.2 MongoDB性能调优建议

MongoDB性能调优的建议:

# 性能调优建议

## 存储引擎调优
– 使用WiredTiger存储引擎
– 调整WiredTiger缓存大小(一般为系统内存的50%)
– 启用压缩(snappy或zlib)
– 配置适当的写入策略

## 内存调优
– 确保有足够的内存容纳热数据
– 关闭透明大页
– 调整操作系统内存参数

## 网络调优
– 使用千兆或万兆网络
– 调整TCP参数
– 限制连接数

## 日志调优
– 启用日志轮转
– 调整日志级别
– 避免过度记录日志

## 查询调优
– 创建适当的索引
– 优化查询语句
– 使用覆盖索引
– 限制返回数据量

2.3 MongoDB安全配置建议

MongoDB安全配置的建议:

# 安全配置建议

## 认证与授权
– 启用认证(security.authorization: enabled)
– 创建管理员用户
– 配置基于角色的访问控制
– 定期更新密码

## 网络安全
– 限制绑定IP(net.bindIp)
– 使用防火墙限制访问
– 启用SSL/TLS加密传输
– 配置keyFile用于副本集认证

## 审计
– 启用审计日志
– 配置审计过滤器
– 定期检查审计日志

## 其他安全措施
– 定期备份数据
– 限制MongoDB用户权限
– 避免使用默认端口
– 定期更新MongoDB版本

生产环境建议:在生产环境中,安全配置是非常重要的,必须启用认证和授权,限制网络访问,并定期进行安全审计。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 MongoDB基础配置

3.1.1 基本配置文件

# 基本配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # 存储配置 storage: dbPath: /mongodb/fgdata journal: enabled: true engine: wiredTiger # 日志配置 systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log # 网络配置 net: port: 27017 bindIp: 0.0.0.0 # 进程管理 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid # 安全配置 security: authorization: enabled EOF

3.1.2 启动MongoDB服务

# 启动MongoDB服务
$ sudo -u mongodb /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 12345
child process started successfully, parent exiting

# 检查服务状态
$ ps -ef | grep mongod
mongodb 12345 1 0 10:00 ? 00:00:01 /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf

# 检查端口
$ netstat -tuln | grep 27017
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN

3.2 MongoDB高级配置

3.2.1 高级配置文件

# 高级配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # 存储配置 storage: dbPath: /mongodb/fgdata journal: enabled: true engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 4 directoryForIndexes: true collectionConfig: blockCompressor: snappy indexConfig: prefixCompression: true # 日志配置 systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log logRotate: reopen verbosity: 0 # 网络配置 net: port: 27017 bindIp: 0.0.0.0 maxIncomingConnections: 65536 wireObjectCheck: true ipv6: false # 进程管理 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid # 安全配置 security: authorization: enabled keyFile: /mongodb/conf/keyfile # 复制配置 replication: replSetName: rs0 oplogSizeMB: 10240 enableMajorityReadConcern: true # 操作配置 operationProfiling: slowOpThresholdMs: 100 mode: slowOp EOF

3.2.2 配置参数说明

# 配置参数说明

## 存储参数
– storage.wiredTiger.engineConfig.cacheSizeGB:WiredTiger缓存大小
– storage.wiredTiger.collectionConfig.blockCompressor:集合压缩算法
– storage.wiredTiger.indexConfig.prefixCompression:索引前缀压缩

## 日志参数
– systemLog.logRotate:日志轮转方式
– systemLog.verbosity:日志详细程度

## 网络参数
– net.maxIncomingConnections:最大连接数
– net.wireObjectCheck:是否检查对象有效性

## 复制参数
– replication.oplogSizeMB:oplog大小
– replication.enableMajorityReadConcern:是否启用多数读关注

## 操作参数
– operationProfiling.slowOpThresholdMs:慢查询阈值
– operationProfiling.mode:性能分析模式

3.3 MongoDB副本集配置

3.3.1 副本集配置文件

# 副本集配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # 存储配置 storage: dbPath: /mongodb/fgdata journal: enabled: true engine: wiredTiger # 日志配置 systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log # 网络配置 net: port: 27017 bindIp: 0.0.0.0 # 进程管理 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid # 安全配置 security: authorization: enabled keyFile: /mongodb/conf/keyfile # 复制配置 replication: replSetName: rs0 oplogSizeMB: 10240 enableMajorityReadConcern: true EOF

3.3.2 初始化副本集

# 初始化副本集
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

fgedu.net.cn> rs.initiate({
… _id: “rs0”,
… members: [
… { _id: 0, host: “192.168.1.101:27017” },
… { _id: 1, host: “192.168.1.102:27017” },
… { _id: 2, host: “192.168.1.103:27017” }
… ]
… })

# 查看副本集状态
fgedu.net.cn> rs.status()

风哥提示:副本集配置中,keyFile是必须的,用于节点间的认证。oplogSizeMB应该根据数据量和写入频率进行合理配置。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 MongoDB配置实战案例

以下是一个生产环境中的MongoDB配置实战案例:

# 生产环境配置案例

## 环境信息
– 操作系统:Oracle Linux 9.3
– 服务器:3台(192.168.1.101, 192.168.1.102, 192.168.1.103)
– MongoDB版本:5.0.13
– 部署模式:副本集
– 内存:32GB
– 存储:SSD 500GB

## 配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # 存储配置 storage: dbPath: /mongodb/fgdata journal: enabled: true engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 16 directoryForIndexes: true collectionConfig: blockCompressor: snappy indexConfig: prefixCompression: true # 日志配置 systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log logRotate: reopen verbosity: 0 # 网络配置 net: port: 27017 bindIp: 0.0.0.0 maxIncomingConnections: 65536 wireObjectCheck: true # 进程管理 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid # 安全配置 security: authorization: enabled keyFile: /mongodb/conf/keyfile # 复制配置 replication: replSetName: rs0 oplogSizeMB: 20480 enableMajorityReadConcern: true # 操作配置 operationProfiling: slowOpThresholdMs: 100 mode: slowOp EOF ## 启动服务 $ sudo -u mongodb /mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf ## 初始化副本集 $ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 --authenticationDatabase admin fgedu.net.cn> rs.initiate({
… _id: “rs0”,
… members: [
… { _id: 0, host: “192.168.1.101:27017” },
… { _id: 1, host: “192.168.1.102:27017” },
… { _id: 2, host: “192.168.1.103:27017” }
… ]
… })

4.2 MongoDB参数调优实战

以下是MongoDB参数调优的实战案例:

# 参数调优实战

## 1. 内存调优

### 调整WiredTiger缓存大小
# 根据系统内存调整,一般为系统内存的50%
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 16

### 关闭透明大页
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
$ echo never > /sys/kernel/mm/transparent_hugepage/defrag

## 2. 存储调优

### 启用压缩
storage:
wiredTiger:
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true

### 调整journal
storage:
journal:
enabled: true
commitIntervalMs: 100

## 3. 网络调优

### 调整最大连接数
net:
maxIncomingConnections: 65536

### 调整TCP参数
$ cat > /etc/sysctl.d/mongodb.conf << EOF net.core.somaxconn = 4096 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_fin_timeout = 30 EOF $ sysctl -p /etc/sysctl.d/mongodb.conf ## 4. 复制调优 ### 调整oplog大小 replication: oplogSizeMB: 20480 ### 启用多数读关注 replication: enableMajorityReadConcern: true ## 5. 操作调优 ### 调整慢查询阈值 operationProfiling: slowOpThresholdMs: 100 mode: slowOp

4.3 MongoDB配置验证实战

以下是MongoDB配置验证的实战案例:

# 配置验证实战

## 1. 检查配置文件
$ /mongodb/app/bin/mongod –config /mongodb/conf/mongod.conf –validate

## 2. 查看运行时配置
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> db.adminCommand({ getParameter: 1, “*”: 1 })

## 3. 检查服务状态
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> db.serverStatus()

## 4. 检查副本集状态
fgedu.net.cn> rs.status()

## 5. 性能测试
fgedu.net.cn> var start = new Date()
fgedu.net.cn> for (let i = 0; i < 10000; i++) { ... db.test_collection.insertOne({id: i, name: "test" + i, value: Math.random() * 1000}) ... } fgedu.net.cn> var end = new Date()
fgedu.net.cn> print(“插入时间: ” + (end – start) + “毫秒”)
插入时间: 1000毫秒

fgedu.net.cn> var start = new Date()
fgedu.net.cn> db.test_collection.find({id: {$gt: 5000}}).limit(1000)
fgedu.net.cn> var end = new Date()
fgedu.net.cn> print(“查询时间: ” + (end – start) + “毫秒”)
查询时间: 10毫秒

## 6. 日志检查
$ tail -n 100 /mongodb/log/mongod.log

生产环境建议:在生产环境中,需要定期验证配置的有效性,监控系统性能,并根据实际情况进行调整。from MongoDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 MongoDB配置最佳实践

MongoDB配置的最佳实践建议:

# MongoDB配置最佳实践

## 配置文件管理
– 使用版本控制系统管理配置文件
– 为不同环境(开发、测试、生产)使用不同的配置文件
– 定期备份配置文件
– 文档化配置变更

## 存储配置
– 使用SSD存储
– 合理规划数据目录
– 启用journal
– 选择合适的存储引擎

## 内存配置
– 为WiredTiger分配足够的缓存
– 关闭透明大页
– 避免内存交换
– 监控内存使用情况

## 网络配置
– 限制绑定IP
– 调整最大连接数
– 启用SSL/TLS
– 监控网络流量

## 安全配置
– 启用认证和授权
– 使用keyFile进行副本集认证
– 定期更新密码
– 配置防火墙规则

5.2 MongoDB调优最佳实践

MongoDB调优的最佳实践建议:

# MongoDB调优最佳实践

## 性能监控
– 监控系统资源使用情况
– 监控MongoDB性能指标
– 监控慢查询
– 监控副本集状态

## 索引优化
– 创建适当的索引
– 避免过多的索引
– 定期重建索引
– 使用覆盖索引

## 查询优化
– 优化查询语句
– 避免全表扫描
– 限制返回数据量
– 使用聚合管道

## 写入优化
– 批量写入操作
– 调整写入关注级别
– 使用异步写入
– 避免频繁更新大文档

## 存储优化
– 启用压缩
– 定期整理碎片
– 合理设计文档结构
– 避免过大的文档

5.3 MongoDB配置常见问题解决

MongoDB配置常见问题的解决方案:

# 常见问题及解决方案

## 配置文件错误
– 症状:启动MongoDB时报错”Error parsing YAML configuration file”
– 解决方案:
– 检查YAML语法
– 确保缩进正确
– 检查参数名称是否正确

## 内存使用过高
– 症状:MongoDB内存使用持续增长
– 解决方案:
– 调整WiredTiger缓存大小
– 检查是否有内存泄漏
– 优化查询和索引

## 连接数过多
– 症状:连接数达到上限
– 解决方案:
– 增加maxIncomingConnections参数
– 使用连接池
– 检查应用程序是否正确关闭连接

## 复制延迟
– 症状:副本集从节点同步延迟
– 解决方案:
– 检查网络连接
– 调整oplog大小
– 确保从节点有足够的资源
– 优化写入操作

## 性能下降
– 症状:MongoDB性能突然下降
– 解决方案:
– 检查慢查询
– 检查索引使用情况
– 监控系统资源
– 调整配置参数

风哥提示:MongoDB的配置和调优是一个持续的过程,需要根据业务需求和系统状态不断调整。建议建立监控体系,及时发现和解决问题。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息