MongoDB 配置详解
目录
1. 配置文件基本结构
MongoDB 使用 YAML 格式的配置文件 (mongod.conf),结构清晰,层次分明。
# MongoDB 配置文件示例
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
net:
port: 27017
bindIp: 127.0.0.1
processManagement:
fork: true
# 安全配置
security:
authorization: enabled
配置层级说明
flowchart TD
A[mongod.conf] --> B[systemLog<br>系统日志]
A --> C[storage<br>存储引擎]
A --> D[net<br>网络配置]
A --> E[processManagement<br>进程管理]
A --> F[security<br>安全设置]
A --> G[replication<br>副本集]
A --> H[sharding<br>分片]
B --> B1[destination]
B --> B2[path]
B --> B3[logAppend]
C --> C1[dbPath]
C --> C2[journal]
C --> C3[engine]
D --> D1[port]
D --> D2[bindIp]
D --> D3[maxIncomingConnections]
E --> E1[fork]
E --> E2[pidFilePath]
2. 常用配置参数详解
2.1 systemLog - 系统日志配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
destination |
string | file | 日志输出目标:file 或 syslog |
path |
string | /var/log/mongodb/mongod.log | 日志文件路径 |
logAppend |
boolean | true | 是否追加模式写入日志 |
logRotate |
string | reopen | 日志轮转方式:reopen 或 rename |
verbosity |
int | 0 | 日志详细程度:0-5 |
详细拆解:
systemLog:
destination: file # 输出到文件(另一个选项是syslog)
path: /var/log/mongodb/mongod.log # 日志文件存放位置
logAppend: true # true=追加模式(重启后保留旧日志),false=覆盖模式
logRotate: reopen # reopen=优雅重命名,rename=直接重命名(可能丢失日志)
verbosity: 0 # 0=普通,1=更多,2=调试,3+=详细日志
2.2 storage - 存储引擎配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
dbPath |
string | /data/db | 数据文件存储目录 |
journal.enabled |
boolean | true | 是否启用 journaling 日志(保证数据一致性) |
engine |
string | wiredTiger | 存储引擎:wiredTiger 或 inMemory |
wiredTiger.engineConfig.cacheSizeGB |
int | 内存的50% | WiredTiger 缓存大小 |
directoryPerDB |
boolean | false | 是否为每个数据库创建独立目录 |
indexBuildRetry |
boolean | true | 重启时是否重试未完成的索引构建 |
详细拆解:
storage:
dbPath: /var/lib/mongodb # 数据文件存放目录(必须存在且有权限)
journal:
enabled: true # 启用日志功能(64位系统默认开启)
engine: wiredTiger # 使用 WiredTiger 存储引擎
directoryPerDB: true # 每个数据库单独一个文件夹
indexBuildRetry: true # 重启后重试构建中断的索引
# WiredTiger 引擎专用配置
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 缓存大小,默认是50%物理内存
journalCompressor: snappy # 日志压缩算法:none/snappy/zlib
directoryForIndexes: false # 索引是否单独存放
collectionConfig:
blockCompressor: snappy # 数据块压缩算法
indexConfig:
prefixCompression: true # 索引是否压缩前缀
2.3 net - 网络配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
port |
int | 27017 | MongoDB 服务端口 |
bindIp |
string | 127.0.0.1 | 监听IP地址,多个用逗号分隔 |
maxIncomingConnections |
int | 65536 | 最大入站连接数 |
wireObjectCheck |
boolean | true | 是否验证客户端发送的数据完整性 |
ipv6 |
boolean | false | 是否启用 IPv6 |
unixDomainSocket.enabled |
boolean | false | 是否启用 Unix 域套接字 |
unixDomainSocket.path |
string | /tmp/mongodb.sock | Unix 套接字路径 |
详细拆解:
net:
port: 27017 # 默认端口,可修改为其他端口
bindIp: 127.0.0.1,192.168.1.100 # 监听本地和内网IP(生产环境建议只绑定内网)
maxIncomingConnections: 1000 # 最大连接数,根据内存调整
wireObjectCheck: true # 检查客户端数据的有效性
ipv6: false # 是否启用IPv6支持
http.enabled: false # 是否启用HTTP状态接口(生产环境应关闭)
# Unix 域套接字配置(本地通信更高效)
unixDomainSocket:
enabled: false # Linux/macOS 可启用
pathPrefix: /tmp # 套接字文件目录
2.4 processManagement - 进程管理
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
fork |
boolean | false | 是否以守护进程模式运行 |
pidFilePath |
string | - | PID 文件存放路径 |
timeZoneInfo |
string | - | 时区数据库路径 |
详细拆解:
processManagement:
fork: true # true=后台运行,false=前台运行
pidFilePath: /var/run/mongodb/mongod.pid # PID文件位置,方便管理
2.5 security - 安全配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
authorization |
string | disabled | 访问控制:enabled 或 disabled |
keyFile |
string | - | 副本集/分片集群认证密钥文件路径 |
transitionToAuth |
boolean | false | 是否允许未认证连接过渡到已认证 |
clusterAuthMode |
string | keyFile | 集群认证方式 |
详细拆解:
security:
authorization: enabled # enabled=开启用户认证,disabled=关闭
keyFile: /opt/mongodb/keyfile # 副本集节点间认证的密钥文件
# 集群认证模式(副本集/分片使用)
clusterAuthMode: keyFile # 选项:keyFile/mongoCR/MONGOD-CR/X509
2.6 replication - 副本集配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
replSetName |
string | - | 副本集名称 |
oplogSizeMB |
int | 磁盘5% | 操作日志大小(MB) |
enableMajorityReadConcern |
string | local | 读concern级别 |
详细拆解:
replication:
replSetName: rs0 # 副本集名称,所有节点必须相同
oplogSizeMB: 1024 # 操作日志大小(MB),根据写入量调整
2.7 sharding - 分片配置
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
clusterRole |
string | - | 角色:configsvr 或 shardsvr |
archiveMovedChunks |
boolean | true | 是否归档迁移的块 |
详细拆解:
sharding:
clusterRole: shardsvr # configsvr=配置服务器,shardsvr=分片节点
archiveMovedChunks: true # 是否保存迁移的块数据(调试用)
3. 如何修改端口配置
3.1 修改步骤
flowchart TD
A[修改 mongod.conf] --> B[验证 YAML 语法]
B --> C[重启 MongoDB 服务]
C --> D[更新客户端连接字符串]
D --> E[更新防火墙规则]
E --> F[验证连接]
3.2 具体操作
步骤1:编辑配置文件
# 编辑 MongoDB 配置文件
sudo vi /etc/mongod.conf
# 找到 net 部分,修改 port
net:
port: 27018 # 将默认端口 27017 改为 27018
bindIp: 127.0.0.1 # 根据需要调整绑定IP
步骤2:验证配置语法
# MongoDB 提供了配置验证功能
mongod --config /etc/mongod.conf --validate
步骤3:重启服务
# Ubuntu/Debian
sudo systemctl restart mongod
# CentOS/RHEL
sudo systemctl restart mongod
# 或者直接重启
sudo systemctl restart mongod
步骤4:更新连接字符串
// 原连接
mongodb://localhost:27017/mydb
// 新连接
mongodb://localhost:27018/mydb
步骤5:更新防火墙(如需远程访问)
# ========== Ubuntu/Debian ==========
# 开放新端口(ufw 是 Ubuntu 默认防火墙)
sudo ufw allow 27018/tcp
# 或者使用 iptables
sudo iptables -A INPUT -p tcp --dport 27018 -j ACCEPT
# ========== CentOS/RHEL 7+ ==========
# 使用 firewall-cmd 管理防火墙
sudo firewall-cmd --zone=public --add-port=27018/tcp --permanent
sudo firewall-cmd --reload
# 查看已开放的端口
sudo firewall-cmd --list-ports
# ========== CentOS/RHEL 6 ==========
# 使用 iptables
sudo iptables -A INPUT -p tcp --dport 27018 -j ACCEPT
sudo service iptables save
3.3 常见端口配置场景
| 场景 | 配置 | 说明 |
|---|---|---|
| 本地开发 | port: 27017, bindIp: 127.0.0.1 |
仅本地访问 |
| 内网生产 | port: 27017, bindIp: 192.168.x.x |
内网应用访问 |
| 多实例 | port: 27018, bindIp: 0.0.0.0 |
同一机器运行多个实例 |
| 公网访问 | port: 27017, bindIp: 0.0.0.0 + 防火墙 |
需要额外安全措施 |
4. 完整配置示例
4.1 开发环境配置
# 开发环境 MongoDB 配置
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 1 # 开发环境开启详细日志
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: wiredTiger
directoryPerDB: true
net:
port: 27017
bindIp: 127.0.0.1
maxIncomingConnections: 100
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
4.2 生产环境配置
# 生产环境 MongoDB 配置
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 0
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: wiredTiger
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 根据内存大小调整,通常为物理内存的50%
journalCompressor: snappy
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression: true
net:
port: 27017
bindIp: 192.168.1.100 # 仅绑定内网IP
maxIncomingConnections: 2000 # 根据并发需求调整
wireObjectCheck: true
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
security:
authorization: enabled # 生产环境必须开启认证
replication:
replSetName: rs0 # 副本集名称
oplogSizeMB: 1024
4.3 副本集配置
# 副本集节点配置
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
net:
port: 27017
bindIp: 0.0.0.0 # 副本集需要绑定所有IP
processManagement:
fork: true
security:
keyFile: /opt/mongodb/keyfile # 副本集认证密钥
replication:
replSetName: rs0 # 副本集名称必须一致
5. 配置验证与重启
5.1 验证配置语法
# 方法1:启动时检查
mongod --config /etc/mongod.conf --validate
# 方法2:使用 mongo shell 检查
mongo --eval "db.adminCommand({ getCmdLineOpts: 1 })"
5.2 常用管理命令
# 检查服务状态
sudo systemctl status mongod
# 查看正在使用的配置(从进程反推)
ps aux | grep mongod
# 检查端口监听
netstat -tlnp | grep mongod
# 或
ss -tlnp | grep 27017
# 检查日志
sudo tail -f /var/log/mongodb/mongod.log
5.3 配置生效流程
sequenceDiagram
participant 客户端
participant MongoDB
participant 配置文件
participant 日志
客户端->>MongoDB: 连接 27017
MongoDB->>配置文件: 读取配置
配置文件-->>MongoDB: 返回配置内容
MongoDB->>MongoDB: 验证配置有效性
MongoDB->>日志: 记录启动信息
MongoDB->>MongoDB: 初始化存储引擎
MongoDB->>MongoDB: 监听端口
MongoDB-->>客户端: 连接就绪
5.4 配置优先级
MongoDB 配置的优先级(从高到低):
命令行参数 > 配置文件 > 默认值
# 命令行参数可以覆盖配置文件
mongod --port 27018 --dbPath /data/db --logpath /var/log/mongodb.log
# 配置文件路径
mongod -f /etc/mongod.conf
mongod --config /etc/mongod.conf
附录:常用端口说明
| 端口 | 用途 | 说明 |
|---|---|---|
| 27017 | MongoDB 默认端口 | mongod 主服务端口 |
| 27018 | Shard 端口 | 分片集群中的 shard 节点 |
| 27019 | Config 端口 | 分片集群中的配置服务器 |
| 28017 | HTTP 状态页面 | 已废弃,MongoDB 3.x 仍支持 |
| 27000 | mongos 端口 | 分片集群的路由进程 |
相关命令速查表
| 操作 | 命令 |
|---|---|
| 查找配置文件 | sudo find / -name mongod.conf |
| 查看运行参数 | ps aux | grep mongod |
| 验证配置 | mongod --config /etc/mongod.conf --validate |
| 启动服务 | sudo systemctl start mongod |
| 停止服务 | sudo systemctl stop mongod |
| 重启服务 | sudo systemctl restart mongod |
| 查看状态 | sudo systemctl status mongod |
| 查看日志 | sudo tail -f /var/log/mongodb/mongod.log |
| 检查端口 | netstat -tlnp | grep 27017 |
提示:修改配置后,建议先在测试环境验证,确保服务能正常启动再应用到生产环境。

浙公网安备 33010602011771号