本文档风哥主要介绍MongoDB配置文件参数官方详解与调优,包括MongoDB配置文件基础概念、配置文件结构、配置参数分类、配置规划、性能调优建议、安全配置建议、基础配置、高级配置、副本集配置、配置实战案例、参数调优实战、配置验证实战等内容,风哥教程参考MongoDB官方文档Configuration File Options内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 MongoDB配置文件基础概念
MongoDB的配置文件是一个YAML格式的文件,用于配置MongoDB服务器的各种参数。配置文件可以指定MongoDB的运行方式、存储设置、网络参数、安全选项等。更多视频教程www.fgedu.net.cn
- 指定数据存储位置
- 配置网络参数
- 设置安全选项
- 调整性能参数
- 配置复制和分片
1.2 MongoDB配置文件结构
MongoDB配置文件采用YAML格式,由多个配置部分组成,每个部分包含相关的配置参数:
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的配置参数可以分为以下几类:
## 存储相关参数
– 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:是否归档移动的块
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版本
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服务
$ 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()
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
Part05-风哥经验总结与分享
5.1 MongoDB配置最佳实践
MongoDB配置的最佳实践建议:
## 配置文件管理
– 使用版本控制系统管理配置文件
– 为不同环境(开发、测试、生产)使用不同的配置文件
– 定期备份配置文件
– 文档化配置变更
## 存储配置
– 使用SSD存储
– 合理规划数据目录
– 启用journal
– 选择合适的存储引擎
## 内存配置
– 为WiredTiger分配足够的缓存
– 关闭透明大页
– 避免内存交换
– 监控内存使用情况
## 网络配置
– 限制绑定IP
– 调整最大连接数
– 启用SSL/TLS
– 监控网络流量
## 安全配置
– 启用认证和授权
– 使用keyFile进行副本集认证
– 定期更新密码
– 配置防火墙规则
5.2 MongoDB调优最佳实践
MongoDB调优的最佳实践建议:
## 性能监控
– 监控系统资源使用情况
– 监控MongoDB性能指标
– 监控慢查询
– 监控副本集状态
## 索引优化
– 创建适当的索引
– 避免过多的索引
– 定期重建索引
– 使用覆盖索引
## 查询优化
– 优化查询语句
– 避免全表扫描
– 限制返回数据量
– 使用聚合管道
## 写入优化
– 批量写入操作
– 调整写入关注级别
– 使用异步写入
– 避免频繁更新大文档
## 存储优化
– 启用压缩
– 定期整理碎片
– 合理设计文档结构
– 避免过大的文档
5.3 MongoDB配置常见问题解决
MongoDB配置常见问题的解决方案:
## 配置文件错误
– 症状:启动MongoDB时报错”Error parsing YAML configuration file”
– 解决方案:
– 检查YAML语法
– 确保缩进正确
– 检查参数名称是否正确
## 内存使用过高
– 症状:MongoDB内存使用持续增长
– 解决方案:
– 调整WiredTiger缓存大小
– 检查是否有内存泄漏
– 优化查询和索引
## 连接数过多
– 症状:连接数达到上限
– 解决方案:
– 增加maxIncomingConnections参数
– 使用连接池
– 检查应用程序是否正确关闭连接
## 复制延迟
– 症状:副本集从节点同步延迟
– 解决方案:
– 检查网络连接
– 调整oplog大小
– 确保从节点有足够的资源
– 优化写入操作
## 性能下降
– 症状:MongoDB性能突然下降
– 解决方案:
– 检查慢查询
– 检查索引使用情况
– 监控系统资源
– 调整配置参数
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
