赞
踩
这命令行和配置 文件接口提供 MongoDB 具有大量选项和设置的管理员 控制数据库系统的操作。本文档 提供了常见配置和示例的概述 常见用例的最佳实践配置。
虽然两个接口都提供对相同选项集合的访问 和设置,本文档主要使用配置文件 接口。
如果你已安装的 MongoDB使用包管理器 例如在 Linux 或 macOS 上,或者使用 Windows上的MSI安装程序,默认yumaptbrew配置文件已作为您的一部分提供 安装:
平台 | 方法 | 配置文件 |
apt, yum, or zypper Package Manager | /etc/mongod.conf | |
苹果操作系统 | brew包管理器 | /usr/local/etc/mongod.conf(在英特尔处理器上),或 /opt/homebrew/etc/mongod.conf(在苹果 M1 处理器) |
窗户 | MSI Installer | <install directory>\bin\mongod.cfg |
如果通过下载的TGZ或ZIP文件安装MongoDB,则需要创建自己的配置文件。这个基本示例配置是一个很好的开始。
对于 Linux 或 macOS 上 MongoDB 的软件包安装,一个 使用此默认配置文件的初始化脚本也是 提供。此初始化脚本可用于启动mongod在这些平台上,以下列方式:
在使用systemd-init系统(systemctl命令)的Linux系统上:
sudo systemctl start mongod
在使用SystemV init init system(服务命令)的Linux系统上:
sudo service mongod start
如果使用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
- storage:
- journal:
- enabled: true
对于大多数独立服务器,这是一个足够的基本配置。它做了几个假设,但考虑以下解释:
fork为true,这为mongod启用了守护程序模式,将MongoDB与当前会话分离(即“fork”),并允许您将数据库作为常规服务器运行。
bindIp是localhost,这迫使服务器仅侦听本地主机IP上的请求。仅绑定到应用程序级系统可以通过系统网络过滤(即“防火墙”)提供的访问控制访问的安全接口。
端口为27017,这是数据库实例的默认MongoDB端口。MongoDB可以绑定到任何端口。您也可以使用网络过滤工具根据端口过滤访问。
安静是真的。这将禁用输出/日志文件中除最关键项之外的所有项,不建议用于生产系统。如果设置了此选项,则可以在运行时使用setParameter修改此设置。
dbPath是/var/lib/mongo,它指定MongoDB存储数据文件的位置。
如果使用包管理器(如yum或apt)在Linux上安装MongoDB,则MongoDB安装附带的/etc/mongod.conf文件将根据Linux发行版设置以下默认dbPath:
Platform | Package Manager | Default dbPath |
RHEL / CentOS and Amazon | yum | /var/lib/mongo |
SUSE | zypper | /var/lib/mongo |
Ubuntu and 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不会在服务器启动操作后覆盖现有日志文件。
storage.journal.enabled为true,启用日志记录。日志记录可确保单实例写入持久性。默认情况下,mongod的64位版本支持日志记录。因此,此设置可能是冗余的。
给定默认配置,其中一些值可能是多余的。然而,在许多情况下,明确说明配置会增加整个系统的可理解性。
以下配置选项可用于限制对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,通常用于本地的私有 IP 地址 网络和 VPN 接口;
192.168.4.24,通常用于 本地网络;和
/tmp/mongod.sock,Unix 域套接字路径。
因为生产 MongoDB 实例需要可从 多个数据库服务器,将MongoDB绑定到很重要 可从应用程序访问的多个接口 服务器。同时,限制这些接口也很重要 到在网络层控制和保护的接口。
security.authorization
将此选项设置为true将启用MongoDB中的授权系统。如果启用,则需要首次通过本地主机接口连接登录以创建用户凭据。
副本集配置很简单,而且只有 要求replSetName具有一致的值 在集合的所有成员中。请考虑以下事项:
replication:replSetName:set0
对集合使用描述性名称。配置后,使用mongosh将主机添加到副本集。
要启用身份验证,请为副本集用密钥文件,添加以下内容keyFile选项 [1]:
security:keyFile:/srv/mongodb/keyfile
设置keyFile启用身份验证和 指定副本集成员在以下情况下要使用的密钥文件 相互验证。
分片需要mongod具有不同mongod的配置配置服务器和碎片.配置服务器存储群集的 元数据,而分片存储数据。
配置配置服务器mongod实例,在 配置文件,为configsvrsharding.clusterRole设置。
在 3.4 版更改: 从 3.4 版开始,MongoDB 删除了对镜像 配置服务器并且配置服务器必须是 部署为副本集。
- sharding:
- clusterRole: configsvr
- net:
- bindIp: 10.8.0.12
- port: 27001
- replication:
- replSetName: csRS
若要将配置服务器部署为副本集,配置服务器必须运行 这连线虎存储引擎.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文件,文件是唯一且良好的至关重要 标记以方便启动和停止这些进程。
创建其他初始化脚本和/或 调整现有的MongoDB配置和初始化脚本 需要控制这些过程。
[2]单租户系统固态硬盘或其他高 性能磁盘可以提供可接受的性能级别 倍数mongod实例。此外,您可能会发现 具有小型工作集的多个数据库可以接受运行 在单个系统上。
以下配置选项控制各种mongod用于诊断目的的行为:
operationProfiling.mode设置数据库探查器水平。默认情况下,探查器不处于活动状态 因为探查器本身可能对性能产生影响。 除非启用此设置,否则不会分析查询。
operationProfiling.slowOpThresholdMs配置 阈值,用于确定查询是否“慢” 日志记录系统和分析器.默认值为 100 毫秒。设置 如果日志记录系统和数据库探查器执行 不返回有用的结果或设置为更高的值以仅记录 运行时间最长的查询。
从版本 4.2 开始,辅助 现在副本集的成员记录操作日志条目比慢速操作花费更长的时间 申请门槛。这些缓慢的oplog消息:
为辅助数据库记录在diagnostic log.
记录在REPL带有文本的组件。
applied op: <oplog entry> took <num>ms
不依赖于日志级别(在系统或组件上) 水平)
不要依赖于性能分析级别。
可能受以下因素影响slowOpSampleRate, 根据您的MongoDB版本:
在MongoDB 4.2中,这些缓慢的操作日志条目不是 受slowOpSampleRate. MongoDB记录所有缓慢的oplog条目,无论采样率如何。
在 MongoDB 4.4 及更高版本中,这些缓慢的 oplog 条目受到以下因素的影响 这slowOpSampleRate.
性能分析器不会捕获慢速操作日志条目。
systemLog.verbosity控制日志记录输出量mongod写入日志。仅在以下情况下使用此选项 遇到正常日志记录中未反映的问题 水平。
MongoDB作为标准程序运行。你可以从 通过发出命令行mongod命令和指定 选项。有关选项列表,请参阅mongod参考。MongoDB也可以作为Windows服务运行。
默认情况下,MongoDB在端口27017上侦听来自客户端的连接,并将数据存储在/data/db目录中。
在Windows上,此路径位于启动MongoDB的驱动器上。例如,如果未指定--dbpath,则在C:\驱动器上启动MongoDB服务器会将所有数据文件存储在C:\data\db中。
要使用所有默认值启动MongoDB,请在系统shell中发出以下命令:
mongod
如果需要帮助,mongod将数据文件存储在其他路径 比您可以指定/data/dbdbPath.这dbPath在开始之前必须存在mongod.如果它 不存在,请创建目录和权限,以便mongod可以读取数据并将其写入此路径。欲了解更多信息 有关权限的信息,请参阅安全操作 文档。
要指定dbPath为mongod用作数据 目录,使用--dbpath选择。这 以下调用将启动mongod实例和存储 路径中的数据/srv/mongodb
mongod --dbpath /srv/mongodb/
只有一个进程可以侦听网络上的连接 一次界面。如果运行多个mongod过程 在单台计算机上,或者具有必须使用此端口的其他进程, 必须为每个端口分配不同的端口来侦听客户端 连接。
要指定mongod的端口,请在命令行上使用--port选项。以下命令在端口12345上启动mongod侦听:
mongod --port 12345
尽可能使用默认端口号,以避免混淆。
要将mongod进程作为守护进程(即fork)运行,并将其输出写入日志文件,请使用--fork和--logpath选项。必须创建日志目录;然而,如果日志文件不存在,mongod将创建日志文件。
以下命令将mongod作为守护程序启动,并将日志输出记录到/var/log/mongodb/mongod.log。
mongod --fork --logpath /var/log/mongodb/mongod.log
在干净关机中mongod完成所有挂起 操作,将所有数据刷新到数据文件,并关闭所有数据 文件。其他关闭是不干净的,可能会损害 数据文件。
为确保干净关机,请始终关机mongod使用以下方法之一的实例:
关闭mongod从mongosh用 这db.shutdownServer()方法如下:
- use admin
- db.shutdownServer()
对于启用了授权的系统,用户只能在未启用身份验证的系统上通过管理员数据库或本地主机接口进行身份验证时发出db.shutdownServer()。
仅在 Linux 上受支持。在命令行中,关闭mongod使用--shutdown选择:
mongod --shutdown
当在交互模式下运行mongod实例时(即没有--fork),发出Control-C以执行干净的关闭。
仅在Linux和macOS上受支持。在命令行中,使用以下命令之一关闭特定的mongod实例:
- kill <mongod process ID>
- kill -2 <mongod process ID>
如果主副本集收到 ,则主副本集将尝试 在关闭之前下台。SIGTERM
如果降级成功,则实例不会在随后的 选举新的初选,并继续关闭。
如果降级失败,实例将继续关闭。
从运行在Linux上的MongoDB 4.4开始
当mongod和mongos进程收到SIGUSR2信号时,回溯详细信息将添加到每个进程线程的日志中。
回溯详细信息显示了进程的函数调用,可用于诊断,并在需要时提供给MongoDB支持。
回溯功能可用于以下架构:
x86_64
arm64(从 MongoDB 4.4.15、5.0.10 和 6.0 开始)
向正在运行的人发出信号SIGUSR2mongod进程中,使用以下命令:
kill -SIGUSR2 <mongod process ID>
生成的回溯数据被写入mongod日志文件,配置为--logpath。
如果mongod是主要在一个副本集,为此关闭过程mongod实例具有 以下步骤:
检查最新情况次级是。
如果主数据库的 10 秒内没有辅助数据库,mongod将返回一条消息,指出它不会关闭。 您可以通过shutdown命令参数以等待辅助节点赶上。timeoutSecs
如果在主数据库的 10 秒内有辅助数据库,则主数据库 将下台,等待次级追上来。
60 秒后或辅助设备赶上后,主数据库 将关闭。
如果没有最新的辅助数据库,并且您希望关闭主数据库 向下,发出shutdown带有参数的命令,如下所示forcemongosh操作:
db.adminCommand({shutdown : 1, force : true})
要在指定的秒数内持续检查辅助设备(如果没有立即更新的),请使用timeoutSecs参数发出关机命令。如果没有立即更新的备份,MongoDB将在指定的秒数内继续检查备份。如果任何辅助设备在分配的时间内赶上,主设备将关闭。如果没有辅助设备赶上,它将不会关闭。
以下命令在timeoutSecs设置为5时发出关机:
db.adminCommand({shutdown : 1, timeoutSecs : 5})
或者,您可以将参数与timeoutSecsdb.shutdownServer()方法:
db.shutdownServer({timeoutSecs : 5})
监视是所有数据库管理的关键组成部分。一个 牢牢掌握MongoDB的报告将使您能够评估状态 并维护您的部署而不会发生危机。 此外,MongoDB的正常操作参数将 允许您在问题升级为故障之前对其进行诊断。
本文档概述了可用的监视实用程序 和报告统计数据 在MongoDB中可用。它还介绍了诊断策略 以及有关监视副本集和 分片集群。
MongoDB提供了各种方法来收集有关状态的数据 一个正在运行的MongoDB实例:
从4.0版本开始,MongoDB提供免费云监控适用于独立集和副本集。
MongoDB分发了一组提供实时的实用程序 数据库活动报告。
MongoDB提供各种数据库命令返回有关当前 具有更高保真度的数据库状态。
MongoDB Atlas是云托管的数据库即服务,用于运行、监视和 维护MongoDB部署。
MongoDB云管理器是一个托管服务,用于监视正在运行的MongoDB 用于收集数据并提供可视化和警报的部署 基于这些数据。
MongoDB Ops Manager 是提供的内部部署解决方案 MongoDB Enterprise Advanced监控正在运行的MongoDB部署以收集数据并提供 基于该数据的可视化和警报。
每种策略都可以帮助回答不同的问题,并且在 不同的背景。这些方法是互补的。
4.0版中的新功能。
MongoDB为标准或副本集提供免费云监控。
默认情况下,您可以在运行时使用db.enableFreeMonitoring()和db.denableFreeMonitor()启用/禁用免费监控。
免费监控可提供长达24小时的数据。
MongoDB发行版包括许多实用程序,可以快速 返回有关实例性能和活动的统计信息。通常 这些对于诊断问题和评估正常值最有用 操作。
mongostat捕获并返回数据库的计数 按类型操作(例如插入、查询、更新、删除等)。这些 服务器上负载分布的计数报告。
用mongostat了解操作的分布 类型,并为容量规划提供信息
mongotop跟踪和报告当前读写 MongoDB 实例的活动,并按 收集基础。
用mongotop检查您的数据库活动并使用 符合您的期望。
在 3.6 版更改: MongoDB 3.6 删除了已弃用的 HTTP 接口和 REST API 到 蒙戈数据库。
MongoDB包括许多命令,这些命令报告状态 数据库。
这些数据可以提供比实用程序更精细的粒度级别 上面讨论过。考虑在脚本和程序中使用它们的输出来 开发自定义警报,或在 响应实例的活动。这db.currentOp()方法是识别数据库实例的另一个有用工具 正在进行的操作。
这serverStatus命令,或db.serverStatus()从命令行管理程序中,返回 数据库, 详细说明磁盘使用情况, 内存使用情况, 连接, 日志, 和索引访问。命令快速返回,不影响 MongoDB性能。
serverStatus输出 MongoDB 状态的帐户 实例。此命令很少直接运行。在大多数情况下,数据 聚合时更有意义,正如人们在监控中看到的那样 工具包括MongoDB云管理器和运营经理.尽管如此,所有 管理员应熟悉 提供的数据serverStatus.
这dbStats命令,或db.stats()从壳上, 返回解决存储使用情况和数据卷的文档。这dbStats反映金额 使用的存储、数据库中包含的数据量,以及 对象、集合和索引计数器。
使用此数据监视状态和存储容量 特定数据库。此输出还允许您比较 在数据库之间使用并确定平均值公文数据库中的大小。
这collStats或db.collection.stats()从 提供类似于dbStats上 集合级别,包括 集合、集合的大小、使用的磁盘空间量 通过集合,以及有关其索引的信息。
这replSetGetStatus命令 (rs.status()从 命令行管理程序) 返回副本集状态的概述。这replSetGetStatus文档详细信息 副本集的状态和配置以及有关其成员的统计信息。
使用此数据可确保正确配置复制, 并检查当前主机与其他成员之间的连接 的副本集。
在正常运行期间,mongod和mongos实例报告所有服务器活动和操作的真实帐户 到任一 标准输出或日志文件。以下运行时设置 控制这些选项。
quiet.限制写入 日志或输出。
verbosity.增加写入的信息量 日志或输出。您还可以在以下期间修改日志记录详细程度 运行时与logLevel参数或db.setLogLevel()外壳中的方法。
path.启用记录到文件,而不是标准 输出。调整时必须指定日志文件的完整路径 此设置。
logAppend.向日志添加信息 文件,而不是覆盖文件
欢迎来到Doker,欢迎点赞和评论!或者加微信进入技术群聊!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。