运行时数据库配置

在本页面

command lineconfiguration file接口为 MongoDBManagement 员提供了大量用于控制数据库系统操作的选项和设置。本文档概述了常用配置,并提供了常用案例的最佳实践示例。

虽然两个界面都提供对选项和设置的相同集合的访问,但是本文档主要使用配置文件界面。如果您使用软件包 Management 器(例如 Linux 上的yumapt或 macOS 上的brew)安装了 MongoDB,则安装时将提供默认的configuration file

  • 在 Linux 上,使用程序包 Management 器安装 MongoDB 时会包含默认的/etc/mongod.conf配置文件。

  • 在 Windows 上,安装过程中包括默认的<install directory>/bin/mongod.cfg配置文件。

  • 在 macOS 上,从 MongoDB 的官方 Homebrew 水龙头安装时,会包含默认的/usr/local/etc/mongod.conf配置文件。

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

  • 在使用 systemd 初始化系统(systemctl命令)的 Linux 系统上:
sudo systemctl start mongod
  • 在使用 SystemV init 初始化系统(service命令)的 Linux 系统上:
sudo service mongod start
  • 在 macOS 上,使用brew软件包 Management 器:
brew services start mongodb-community@3.6

如果使用TGZZIP文件安装了 MongoDB,则需要创建自己的配置文件。 基本示例配置可以在本文档后面找到。创建配置文件后,可以使用mongod--config-f选项来使用此配置文件启动 MongoDB 实例:

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

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

配置数据库

请考虑以下基本配置:

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

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

  • forktrue,为mongod启用daemon模式,该模式将 MongoDB 从当前会话中分离(即“分叉”),并允许您将数据库作为常规服务器运行。

  • bindIp127.0.0.1,这将强制服务器仅侦听 localhost IP 上的请求。仅绑定到应用程序级系统可以通过系统网络过滤提供的访问控制(即“ firewall”)访问的安全接口。

  • port27017,这是数据库实例的默认 MongoDB 端口。 MongoDB 可以绑定到任何端口。您还可以使用网络过滤工具基于端口过滤访问。

Note

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

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

  • dbPath/var/lib/mongo,它指定 MongoDB 将其数据文件存储在何处。

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

PlatformPackage Manager默认值dbPath
RHEL/CentOS 和亚马逊yum/var/lib/mongo
SUSEzypper/var/lib/mongo
Ubuntu 和 Debianapt/var/lib/mongodb
macOSbrew/usr/local/var/mongodb

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

  • systemLog.path/var/log/mongodb/mongod.logmongod将在其中写入其输出。如果您未设置此值,则mongod将所有输出写入标准输出(例如stdout)。

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

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

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

Security Considerations

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

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

    • 本示例为bindIp选项提供了四个值:
  • 127.0.0.1,localhost 接口;

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

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

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

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

  • security.authorization

    • 将此选项设置为true将启用 MongoDB 中的授权系统。如果启用,您将需要通过localhost接口进行首次登录以创建用户凭据。

See also

复制和分片配置

Replication Configuration

Replica set的配置非常简单,只要求replSetName的值在集合的所有成员之间保持一致。考虑以下:

replication:
   replSetName: set0

为集使用描述性名称。配置完成后,使用mongo shell 将主机添加到副本集。

要为replica set启用身份验证,请添加以下keyFile选项:

security:
   keyFile: /srv/mongodb/keyfile

设置keyFile启用身份验证,并指定副本集成员彼此进行身份验证时使用的密钥文件。密钥文件的内容是任意的,但是在连接到集合的replica setmongos实例的所有成员上必须相同。密钥文件的大小必须小于一千字节,并且只能在 base64 集中包含字符,并且该文件在 UNIX 系统上不能具有组或“世界”权限。

See also

副本集安全部分提供有关使用副本集配置身份验证的信息。

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

Sharding Configuration

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

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

在 3.4 版中进行了更改:从 3.4 版开始,MongoDB 删除了对镜像配置服务器的支持,并且必须将配置服务器部署为副本集。

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分片副本集并添加成员。

对于 Router(即mongos),使用以下setting配置至少一个mongos进程:

sharding:
   configDB: csRS/10.8.0.12:27001

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

See also

手册的Sharding部分提供了有关分片和集群配置的更多信息。

在同一系统上运行多个数据库实例

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

在这些情况下,请为每个实例使用base configuration,但请考虑以下配置值:

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

dbPath值控制mongod实例的数据目录的位置。确保每个数据库都有一个单独的且标签正确的数据目录。 pidFilePath控制mongod进程将其放置在process id文件中的位置。由于这会跟踪特定的mongod文件,因此至关重要的是,文件必须唯一且标签正确,以使启动和停止这些过程变得容易。

根据需要创建其他init scripts和/或调整现有的 MongoDB 配置和初始化脚本,以控制这些过程。

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

Diagnostic Configurations

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

  • operationProfiling.mode设置database profiler级别。默认情况下,探查器不处于活动状态,因为它可能会影响探查器本身对性能的影响。除非启用此设置,否则不会分析查询。

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

对于从版本 3.6.11 开始的 MongoDB 3.6 部署,副本集的辅助成员现在为记录操作日志条目,所花费的时间超过了慢操作阈值。这些慢速 oplog 消息将在文本applied op: <oplog entry> took <num>ms下的REPL组件下的diagnostic log中记录。这些慢操作日志条目仅取决于慢操作阈值。它们不取决于日志级别(系统级别或组件级别),配置级别或运行缓慢的采样率。探查器不会捕获缓慢的操作日志条目。

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

从 MongoDB 3.0 开始,您还可以使用systemLog.component.<name>.verbosity设置为特定组件指定详细级别。有关可用组件,请参见组件详细度设置

有关更多信息,另请参见Database ProfilingMongoDB Performance