文档菜单
文档首页
/
MongoDB 手册
/ / /

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

本页内容

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

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

尽管这两个接口都提供了相同的选项和设置集合,但本文件主要使用配置文件接口。

  • 如果您使用包管理器(如yumapt 在 Linux 上,或在 macOS 上使用 brew,或在 Windows 上使用 MSI 安装程序)安装了 MongoDB,则您的安装包中已提供默认的 配置文件

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

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

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

    Windows
    MSI 安装程序
    <安装目录>\bin\mongod.cfg
  • 如果您通过下载的 TGZZIP 文件安装了 MongoDB,您必须创建自己的配置文件。基本示例配置是一个很好的起点。

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

  • 使用 systemd init 系统的 Linux 系统(systemctl 命令)

    sudo systemctl start mongod
  • 使用 SystemV init init 系统的 Linux 系统(service 命令)

    sudo service mongod start
  • 使用 brew 包管理器的 macOS

    brew services start mongodb-community@8.0

如果您使用TGZ或ZIP文件安装了MongoDB,您需要创建自己的配置文件。文档中稍后可以找到基本示例配置。创建配置文件后,您可以使用--config-f选项,通过mongod启动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

对于大多数独立服务器,这是一个足够的基础配置。它做了几个假设,但请考虑以下说明:

  • fork设置为true,这为mongod启用守护进程模式,使MongoDB从当前会话分离(即“派生”),允许您将数据库作为传统服务器运行。

  • bindIp设置为localhost,这强制服务器只监听本地主机IP上的请求。仅绑定到由系统网络过滤提供访问控制的应用程序级系统能够访问的安全接口(即“防火墙”)。

  • port设置为27017,这是数据库实例的默认MongoDB端口。MongoDB可以绑定到任何端口。您还可以使用网络过滤工具根据端口过滤访问。

    注意

    UNIX-like系统需要超级用户权限才能将进程附加到小于1024的端口。

  • quiet 设置为 true。这会禁用输出/日志文件中的所有非最关键条目,并且不建议在生产系统中使用。如果您确实设置了此选项,可以使用 setParameter 在运行时修改此设置。

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

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

    平台
    包管理器
    默认 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)。

  • logAppend 设置为 true,这确保在服务器启动操作之后,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实例,在配置文件中,将configsvr指定为sharding.clusterRole设置。

注意

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

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

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

要配置分片mongod实例,指定shardsvrsharding.clusterRole设置,如果是作为副本集运行,指定副本集名称

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 进程的 PID 文件的位置。由于此文件跟踪特定的 mongod 文件,因此确保文件唯一且标签清晰,以便轻松启动和停止这些进程至关重要。

创建额外的 init scripts,或根据需要调整现有的 MongoDB 配置和 init 脚本以控制这些进程。

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

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

  • operationProfiling.mode 设置数据库分析器的级别。由于可能对分析器本身性能的影响,默认情况下分析器是不活跃的。除非此设置开启,否则查询不会被分析。

  • operationProfiling.slowOpThresholdMs 配置确定查询是否为“慢查询”的阈值,用于日志系统和数据库分析器。默认值为100毫秒。如果日志系统和数据库分析器没有返回有用的结果,请将值设置得更低,或者将值设置得更高以仅记录运行时间最长的查询。

    副本集的次要成员现在会记录应用时间超过慢操作阈值的操作日志条目。

    • 这些慢操作日志消息会记录在次要成员的 诊断日志

    • 这些日志消息在 REPL 组件下记录,文本为 applied op: <oplog entry> took <num>ms

    • 不依赖于日志级别(无论是系统级别还是组件级别)

    • 不依赖于分析级别。

    • slowOpSampleRate 影响。

    分析器不捕获慢操作日志条目。

  • systemLog.verbosity 控制写入日志的 mongod 日志输出量。只有在正常日志级别无法反映问题时才使用此选项。

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

有关更多信息,请参阅数据库分析器MongoDB 性能

返回

配置与维护