自管理部署的运行时数据库配置
命令行和配置文件界面为MongoDB管理员提供了大量用于控制数据库系统操作的选项和设置。 本文档概述了常见配置以及常见使用案例的最佳实践配置示例。
虽然这两个界面都允许访问相同的选项和设置集合,但本文档主要使用配置文件界面。
如果使用软件包管理器(例如 Linux 上的
yum
或apt
,或 macOS 上的brew
)安装 MongoDB,或者使用 Windows 上的 MSI 安装程序安装 MongoDB,则安装过程中会提供默认配置文件:平台方法配置文件Linuxapt
,yum
或zypper
包管理器/etc/mongod.conf
macOSbrew
包管理器:/usr/local/etc/mongod.conf
(在英特尔处理器上),或/opt/homebrew/etc/mongod.conf
(在 Apple M1 处理器上)WindowsMSI 安装程序<install directory>\bin\mongod.cfg
如果您通过下载的
TGZ
或ZIP
文件安装 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@8.0
如果通过 TGZ
或 ZIP
文件安装 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
对于大多数独立运行的服务器而言,这是足够使用的基本配置。它基于几项假设,但请考虑以下解释:
fork
为true
,为mongod
启用守护进程模式模式,该模式会分离(即“分叉”)当前会话中的 MongoDB,并允许您将数据库作为传统服务器运行。bindIp
为localhost
,它强制服务器仅侦听本地主机 IP 上的请求。仅绑定到应用程序级系统可以通过系统网络过滤(即“防火墙”)提供的访问控制进行访问的安全接口。port
是27017
,即数据库实例的默认 MongoDB 端口。MongoDB 可以绑定到任何端口上。您还可以使用网络筛选工具根据端口对访问进行筛选。注意
类 UNIX 系统需要超级用户特权才能将进程附加到低于 1024 的端口。
quiet
为true
。这会禁用输出/日志文件中除最关键条目之外的所有条目,不建议用于生产系统。如果设置了该选项,可以在运行时使用setParameter
修改此设置。dbPath
是/var/lib/mongo
,它指定 MongoDB 将存储其数据文件的位置。如果您使用数据包管理器(例如
yum
或apt
)在 Linux 上安装 MongoDB,则随 MongoDB 安装提供的/etc/mongod.conf
文件将设置以下默认的dbPath
,具体取决于您的 Linux 发行版:平台包管理器:默认dbPath
RHEL / CentOS 和 Amazonyum
/var/lib/mongo
SUSEzypper
/var/lib/mongo
Ubuntu 和 Debianapt
/var/lib/mongodb
macOSbrew
/usr/local/var/mongodb
运行
mongod
的用户帐户将需要对该目录的读写权限。systemLog.path
是/var/log/mongodb/mongod.log
。这是mongod
写入输出的位置。如果未设置该值,mongod
会将所有输出写入标准输出(例如stdout
。)
给定默认配置中,其中一些值可能是多余的。但在许多情况下,明确说明配置会提高整个系统的可懂度。
安全考虑因素
以下配置选项可用于限制对 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
启用身份验证,并指定密钥文件供副本集成员相互进行身份验证时使用。
[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 性能。