自托管部署的运行时数据库配置
命令行和配置文件界面为 MongoDB 管理员提供了大量选项和设置,用于控制数据库系统的操作。本文档提供了常见配置和常见用例的最佳实践配置示例概述。
尽管这两个接口都提供了相同的选项和设置集合,但本文件主要使用配置文件接口。
如果您使用包管理器(如
yum
或apt
在 Linux 上,或在 macOS 上使用brew
,或在 Windows 上使用 MSI 安装程序)安装了 MongoDB,则您的安装包中已提供默认的 配置文件。平台方法配置文件Linuxapt
、yum
或zypper
包管理器/etc/mongod.conf
macOSbrew
包管理器/usr/local/etc/mongod.conf
(在英特尔处理器上),或/opt/homebrew/etc/mongod.conf
(在 Apple M1 处理器 上)WindowsMSI 安装程序<安装目录>\bin\mongod.cfg
如果您通过下载的
TGZ
或ZIP
文件安装了 MongoDB,您必须创建自己的配置文件。基本示例配置是一个很好的起点。
对于 Linux 或 macOS 上的 MongoDB 包安装,还提供了一个使用此默认配置文件的初始化脚本。此初始化脚本可用于以下方式在这些平台上启动 mongod
:
使用 systemd init 系统的 Linux 系统(
systemctl
命令)sudo systemctl start mongod 使用 SystemV init init 系统的 Linux 系统(
service
命令)sudo service mongod start 使用
brew
包管理器的 macOSbrew 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 将存储其数据文件的位置。如果您使用包管理器(如
yum
或apt
)在 Linux 上安装 MongoDB,则随 MongoDB 安装提供的/etc/mongod.conf
文件将根据您的 Linux 发行版设置以下默认dbPath
。平台包管理器默认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
实例,在配置文件中,将configsvr
指定为sharding.clusterRole
设置。
注意
配置服务器必须作为副本集部署。
sharding: clusterRole: configsvr net: bindIp: 10.8.0.12 port: 27001 replication: replSetName: csRS
要将配置服务器作为副本集部署,配置服务器必须运行WiredTiger存储引擎。使用Initiate
初始化副本集并添加成员。
要配置分片mongod
实例,指定shardsvr
为sharding.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 性能。