MongoDB 配置详解

目录

  1. 配置文件基本结构
  2. 常用配置参数详解
  3. 如何修改端口配置
  4. 完整配置示例
  5. 配置验证与重启

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 日志输出目标:filesyslog
path string /var/log/mongodb/mongod.log 日志文件路径
logAppend boolean true 是否追加模式写入日志
logRotate string reopen 日志轮转方式:reopenrename
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 存储引擎:wiredTigerinMemory
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 访问控制:enableddisabled
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 - 角色:configsvrshardsvr
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

提示:修改配置后,建议先在测试环境验证,确保服务能正常启动再应用到生产环境。

posted @ 2026-05-08 09:43  RK5123153  阅读(16)  评论(0)    收藏  举报