Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

自管理部署的运行时数据库配置

在此页面上

  • 配置数据库
  • 安全考虑因素
  • 复制与分片配置
  • 在同一系统上运行多个数据库实例
  • 诊断配置

命令行配置文件界面为 MongoDB 管理员提供了大量用于控制数据库系统操作的选项和设置。本文档概述了常见配置以及常见使用案例的最佳实践配置示例。

虽然这两个界面都允许访问相同的选项和设置集合,但本文档主要使用配置文件界面。

  • 如果使用软件包管理器(例如 Linux 上的 yumapt,或 macOS 上的 brew安装 MongoDB,或者使用 Windows 上的 MSI 安装程序安装 MongoDB,则安装过程中会提供默认配置文件

    平台
    方法
    配置文件
    Linux的
    aptyumzypper包管理器
    /etc/mongod.conf
    macOS
    brew 包管理器:

    /usr/local/etc/mongod.conf (在英特尔处理器上),或

    /opt/homebrew/etc/mongod.conf (在 Apple M1 处理器上)

    Windows
    MSI 安装程序
    <install directory>\bin\mongod.cfg
  • 如果您通过下载的 TGZZIP 文件安装 MongoDB,则必须创建自己的配置文件。可以从基本示例配置着手。

对于 Linux 或 macOS 上的 MongoDB 包安装,还提供了使用此默认配置文件的初始化脚本。该初始化脚本可用于通过下列方式在这些平台上启动 mongod

  • 在使用 systemd 初始化系统(systemctl 命令)的 Linux 系统上:

    sudo systemctl start mongod
  • 在使用 SystemV init 初始化系统(service 命令)的 Linux 系统上:

    sudo service mongod start
  • 在 macOS 上,使用 brew 包管理器:

    brew services start mongodb-community@5.0

如果通过 TGZZIP 文件安装 MongoDB,则需要创建自己的配置文件。本文档后面提供了一个基本的配置示例。创建配置文件后,就可以使用 mongod--config-f 选项,通过该配置文件启动 MongoDB 实例。例如,在 Linux 上:

mongod --config /etc/mongod.conf
mongod -f /etc/mongod.conf

修改系统上 mongod.conf 文件中的值,以控制数据库实例的配置。

请考虑以下基本配置:

processManagement:
fork: true
net:
bindIp: localhost
port: 27017
storage:
dbPath: /var/lib/mongo
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true

对于大多数独立运行的服务器而言,这是足够使用的基本配置。它基于几项假设,但请考虑以下解释:

  • forktrue,为 mongod 启用守护进程模式模式,该模式会分离(即“分叉”)当前会话中的 MongoDB,并允许您将数据库作为传统服务器运行。

  • bindIplocalhost,它强制服务器仅侦听本地主机 IP 上的请求。仅绑定到应用程序级系统可以通过系统网络过滤(即“防火墙”)提供的访问控制进行访问的安全接口。

  • port27017,即数据库实例的默认 MongoDB 端口。MongoDB 可以绑定到任何端口上。您还可以使用网络筛选工具根据端口对访问进行筛选。

    注意

    类 UNIX 系统需要超级用户特权才能将进程附加到低于 1024 的端口。

  • quiettrue。这会禁用输出/日志文件中除最关键条目之外的所有条目,建议用于生产系统。如果设置了该选项,可以在运行时使用 setParameter 修改此设置。

  • dbPath/var/lib/mongo,它指定 MongoDB 将存储其数据文件的位置。

    如果您使用数据包管理器(例如 yumapt)在 Linux 上安装 MongoDB,则随 MongoDB 安装提供的 /etc/mongod.conf 文件将设置以下默认的 dbPath,具体取决于您的 Linux 发行版:

    平台
    包管理器:
    默认 dbPath
    RHEL / CentOS 和 Amazon
    yum
    /var/lib/mongo
    SUSE
    zypper
    /var/lib/mongo
    Ubuntu 和 Debian
    apt
    /var/lib/mongodb
    macOS
    brew
    /usr/local/var/mongodb

    运行 mongod 的用户帐户将需要对该目录的读写权限。

  • systemLog.path/var/log/mongodb/mongod.log。这是 mongod 写入输出的位置。如果未设置该值,mongod 会将所有输出写入标准输出(例如 stdout。)

  • logAppendtrue,这将确保 mongod 在服务器启动操作后不会覆盖现有日志文件。

  • storage.journal.enabledtrue ,可启用日志功能。 日志可确保单实例写入持久性。 默认情况下,64 位版本的mongod会启用日志功能。 因此,此设置可能是多余的。

给定默认配置中,其中一些值可能是多余的。但在许多情况下,明确说明配置会提高整个系统的可懂度。

以下配置选项可用于限制对 mongod 实例的访问:

net:
bindIp: localhost,10.8.0.10,192.168.4.24,/tmp/mongod.sock
security:
authorization: enabled
net.bindIp

本示例为 bindIp 选项提供了四个值:

  • localhost,即本地主机接口;

  • 10.8.0.10,即通常用于本地网络和 VPN 接口的私有 IP 地址;

  • 192.168.4.24,通常用于本地网络的专用网络接口;以及

  • /tmp/mongod.sock,Unix 域套接字路径。

由于生产 MongoDB 实例需要从多个数据库服务器访问,因此将 MongoDB 绑定到可从应用程序服务器访问的多个接口非常重要。同时,将这些接口限制为在网络层控制和保护的接口也十分重要。

security.authorization
将此选项设置为 true 将启用 MongoDB 中的授权系统。如果启用,您首次需要通过 localhost 接口连接来登录,以创建用户档案。

提示

另请参阅:

副本集配置非常简单,只要求 replSetName 的值在副本集的所有成员间保持一致。请考虑以下内容:

replication:
replSetName: set0

对集合使用描述性名称。配置完成后,使用 mongosh 将主机添加到副本集。

提示

另请参阅:

要使用密钥文件为副本集启用身份验证,请添加以下 keyFile 选项 [1]

security:
keyFile: /srv/mongodb/keyfile

设置 keyFile 启用身份验证,并指定密钥文件供副本集成员相互进行身份验证时使用。

提示

另请参阅:

副本集安全性部分,了解使用副本集配置身份验证的相关信息。

复制文档提供了有关 MongoDB 复制和副本集配置的更多信息。

[1] 分片集群和副本集可以使用 x.509 代替密钥文件进行成员身份验证。有关详细信息,请参阅 x.509。

分片要求配置服务器分片具有不同 mongod 配置的 mongod 实例。配置服务器存储集群的元数据,而分片存储数据。

要设定配置服务器 mongod 实例,请在配置文件中为 sharding.clusterRole 设置指定 configsvr

注意

配置服务器必须部署为副本集。

sharding:
clusterRole: configsvr
net:
bindIp: 10.8.0.12
port: 27001
replication:
replSetName: csRS

要将配置服务器作为副本集进行部署,该配置服务器必须运行 WiredTiger 存储引擎。Initiate 副本集并添加成员。

要配置分片 mongod 实例,请为 sharding.clusterRole 设置指定 shardsvr。如果作为副本集运行,则副本集名称:

sharding:
clusterRole: shardsvr
replication:
replSetName: shardA

如果作为副本集运行,则 initiate 分片副本集并添加成员。

对于路由器(即 mongos),用以下设置配置至少一个 mongos 进程:

sharding:
configDB: csRS/10.8.0.12:27001

您可以在副本集名称后以逗号分隔列表的形式指定主机名和端口,以指定配置服务器副本集的其他成员。

提示

另请参阅:

有关分片和集群配置的更多信息,请参阅手册的分片部分。

在许多情况下,不建议在一个系统上运行多个 mongod 实例。在某些类型的部署 [2] 中,出于测试目的,您可能需要在单个系统上运行多个 mongod

在这些情况下,为每个实例使用一个基本配置,但同时考虑以下配置值:

storage:
dbPath: /var/lib/mongo/db0/
processManagement:
pidFilePath: /var/lib/mongo/db0.pid

dbPath 值控制 mongod 实例数据目录的位置。确保每个数据库都具有不同且标记良好的数据目录。pidFilePath 控制 mongod 进程将其进程 ID 文件放置在何处。由于它追踪特定的 mongod 文件,因此文件必须是唯一的且标记良好,以便轻松启动和停止这些进程。

创建额外的初始化脚本和/或根据需要调整现有 MongoDB 配置和初始化脚本,来控制这些进程。

[2] 带有 SSD 或其他高性能磁盘的单租户系统可以为多个 mongod 实例提供可接受的性能水平。此外,您可能会发现带有小型工作集的多个数据库可以在单个系统上正常运行。

以下配置选项控制用于诊断的各种 mongod 行为:

  • operationProfiling.mode 设置数据库分析器级别。默认情况下,分析器处于非活动状态,因为分析器本身可能会对性能产生影响。除非启用此设置,否则不会对查询进行分析。

  • operationProfiling.slowOpThresholdMs configures the threshold which determines whether a query is "slow" for the purpose of the logging system and the profiler. The default value is 100 milliseconds. Set to a lower value if the logging system and the database profiler do not return useful results or set to a higher value to only log the longest running queries.

    现在,副本集的从节点会记录应用时间超过慢操作阈值的 oplog 条目。这些慢 oplog 消息:

    • diagnostic log中针对从节点记录。

    • 记录在 REPL 组件下,该组件将含有文本 applied op: <oplog entry> took <num>ms

    • 不依赖日志级别(系统级别或组件级别)

    • 不依赖于分析级别。

    • slowOpSampleRate 影响。

    分析器不会捕获慢 oplog 条目。

  • systemLog.verbosity 控制 mongod 写入日志的日志输出量。仅当遇到未反映在常规日志记录级别中的问题时,才使用此选项。

    您还可以使用systemLog.component.<name>.verbosity设置为特定组件指定详细程度。有关可用组件,请参阅component verbosity settings

如需了解详情,还可参阅数据库性能分析MongoDB 性能

后退

配置与维护