龙空技术网

mongodb生产注意事项

汾西公子 166

前言:

当前兄弟们对“ubuntu没有wired”大概比较讲究,大家都想要分析一些“ubuntu没有wired”的相关文章。那么小编也在网络上网罗了一些关于“ubuntu没有wired””的相关资讯,希望姐妹们能喜欢,小伙伴们快快来学习一下吧!

推荐平台

尽管MongoDB支持多种平台,但建议将以下操作系统用于生产x86_64体系结构:

亚马逊Linux 2Debian 9和10RHEL / CentOS 6、7和8SLES 12和15Ubuntu LTS 16.04和18.04Windows Server 2016和2019最新的稳定软件包下载地址:

MongoDB的dbPath

目录中的dbPath文件必须与配置的存储引擎相对应。mongod如果dbPath包含由存储引擎创建的数据文件(而不是由所指定的文件),则不会启动 --storageEngine

mongod必须具有指定的读写权限 dbPath

并发

WiredTiger

WiredTiger支持读写器同时访问集合中的文档。客户端可以在进行写操作时读取文档,并且多个线程可以同时修改集合中的不同文档

数据一致性

日记

MongoDB使用预写日志记录到磁盘日志上。日志记录可确保MongoDB可以快速恢复写到日志但mongod 由于崩溃或其他严重故障而终止的情况下无法写到数据文件的写操作。

保留日记功能处于启用状态,以确保mongod崩溃后能够恢复其数据文件并将数据文件保持在有效状态。有关更多信息,请参见日记。

从MongoDB 4.0开始,您不能指定--nojournal选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled: false

阅读关注

3.2版中的新功能。

从MongoDB 3.6开始,如果写入请求确认,则可以使用因果一致的会话来读取自己的写入。

在MongoDB 3.6之前,为了读取自己的写入,您必须发出具有 写入关注点的写入操作,然后发出具有读取首选项和 或读取关注的读取操作 。{ w: "majority" }primary"majority""linearizable"

若要使用关注级别"majority",副本集必须使用WiredTiger存储引擎。

您可以"majority"为具有三名成员的主次仲裁器(PSA)架构的部署禁用读关注。但是,这对变更流(仅在MongoDB 4.0及更低版本中)和分片群集上的事务有影响。有关更多信息,请参见禁用多数阅读关注。

写关注

写关注描述了从MongoDB请求的写操作确认级别。写关注点的级别会影响写操作返回的速度。当写操作对写操作的关注较弱时,它们会迅速返回。具有更强的写关注度时,客户端必须在发送写操作之后等待,直到MongoDB在请求的写关注度级别确认写操作为止。没有足够的写顾虑,写操作对客户端来说似乎已经成功,但是在某些服务器故障的情况下可能无法持久。

有关为部署选择适当的写关注级别的更多信息,请参见写关注文档。

联网

使用受信任的组网环境

始终在可信任的环境中运行MongoDB,该环境具有阻止来自所有未知计算机,系统和网络的访问的网络规则。与依赖网络访问的任何敏感系统一样,您的MongoDB部署仅应由需要访问的特定系统访问,例如应用程序服务器,监视服务和其他MongoDB组件。

重要

默认情况下,不启用授权,并mongod采用可信环境。authorization根据需要启用 模式。有关MongoDB支持的身份验证机制以及MongoDB中的授权的更多信息,请参阅身份验证 和基于角色的访问控制。

有关安全性的其他信息和注意事项,请参阅“安全性”部分中的文档,特别是:

安全清单网络和配置强化

对于Windows用户,在Windows上 部署MongoDB时,请考虑有关TCP配置的Windows Server Technet文章

禁用HTTP接口

在版本3.6中进行了更改: MongoDB 3.6删除了MongoDB弃用的HTTP接口和REST API。

MongoDB的早期版本提供HTTP接口来检查服务器的状态,并可以选择运行查询。默认情况下,HTTP接口是禁用的。不要在生产环境中启用HTTP接口。

管理连接池大小

避免超载的连接资源mongodmongos通过调整连接池的大小,以满足您的使用案例的实例。从当前数据库请求的典型数量的110-115%开始,然后根据需要修改连接池的大小。请参阅 连接池选项以调整连接池大小。

connPoolStats命令返回有关分片群集中当前数据库mongosmongod实例的打开连接数的信息 。

另请参阅分配足够的RAM和CPU。

硬件注意事项

MongoDB专门针对商品硬件而设计,几乎没有硬件要求或限制。MongoDB的核心组件运行在低端硬件上,主要是x86 / x86_64处理器。客户端库(即驱动程序)可以在大小端系统上运行

分配足够的RAM和CPU

在最低限度,确保每个mongodmongos实例访问两个真正的核心还是一个多核物理CPU。

WiredTiger

该WiredTiger存储引擎是多线程的,可以采取额外的CPU内核的优势。具体来说,活动线程(即并发操作)的总数相对于可用CPU的数目会影响性能:

吞吐量随着并发活动操作数增加到CPU数而增加。随着并发活动操作数超过CPU数某个阈值量,吞吐量会降低

该阈值取决于您的应用程序。您可以通过试验和测量吞吐量来确定应用程序的最佳并发活动操作数。来自的输出 mongostat提供有关(ar|aw)列中有效读/写次数的统​计信息。

通过WiredTiger,MongoDB可以利用WiredTiger内部缓存和文件系统缓存。

从MongoDB 3.4开始,默认的WiredTiger内部缓存大小是以下两者中的较大者:

50%(RAM-1 GB),或256 MB。

例如,在总共有4GB RAM的系统上,WiredTiger缓存将使用1.5GB RAM()。相反,总内存为1.25 GB的系统将为WiredTiger高速缓存分配256 MB,因为这是总RAM的一半以上减去1 GB 。0.5 * (4 GB - 1 GB) = 1.5 GB0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB

注意

在某些情况下,例如在容器中运行时,数据库的内存限制可能低于系统总内存。在这种情况下,此内存限制而不是系统总内存将用作最大可用RAM。

要查看内存限制,请参阅hostInfo.system.memLimitMB。

默认情况下,WiredTiger对所有集合使用Snappy块压缩,对所有索引使用前缀压缩。压缩默认值是可在全局级别配置的,也可以在收集和索引创建期间基于每个集合和每个索引进行设置。

WiredTiger内部缓存中的数据与磁盘格式使用不同的表示形式:

文件系统缓存中的数据与磁盘上的格式相同,包括对数据文件进行任何压缩的好处。操作系统使用文件系统缓存来减少磁盘I / O。加载到WiredTiger内部缓存中的索引具有与磁盘格式不同的数据表示形式,但仍可以利用索引前缀压缩来减少RAM使用量。索引前缀压缩从索引字段中删除通用前缀。WiredTiger内部缓存中的收集数据未压缩,并且使用与磁盘格式不同的表示形式。块压缩可以节省大量的磁盘存储空间,但是必须对数据进行解压缩才能由服务器进行处理。

通过文件系统缓存,MongoDB自动使用WiredTiger缓存或其他进程未使用的所有可用内存。

要调整WiredTiger内部缓存的大小,请参阅 storage.wiredTiger.engineConfig.cacheSizeGB--wiredTigerCacheSizeGB。避免将WiredTiger内部缓存的大小增加到其默认值以上。

注意

storage.wiredTiger.engineConfig.cacheSizeGB限制WiredTiger内部高速缓存的大小。操作系统将使用可用的空闲内存进行文件系统缓存,从而允许压缩的MongoDB数据文件保留在内存中。此外,操作系统将使用任何可用的RAM来缓冲文件系统块和文件系统缓存。

为了容纳更多的RAM使用者,您可能必须减小WiredTiger内部缓存的大小。

默认的WiredTiger内部缓存大小值假定mongod每台计算机有一个实例。如果一台机器包含多个MongoDB实例,则应减小设置以容纳其他mongod 实例。

如果你运行mongod在一个容器(例如lxccgroups,码头工人,等等),它没有访问所有系统中可用的RAM,你必须设置storage.wiredTiger.engineConfig.cacheSizeGB的值小于RAM容器使用的量。确切的数量取决于容器中运行的其他进程。请参阅 memLimitMB

要查看有关高速缓存和逐出速率的统计信息,请参阅命令wiredTiger.cache返回的 字段serverStatus

压缩和加密

使用加密时,配备AES-NI指令集扩展的CPU具有明显的性能优势。如果将MongoDB Enterprise与 Encrypted Storage Engine一起使用,请选择支持AES-NI的CPU,以获得更好的性能。

也可以看看

并发

使用固态磁盘(SSD)

使用SATA SSD(固态磁盘),MongoDB具有良好的结果和良好的性价比。

如果可用且经济实惠,请使用SSD。

商品(SATA)旋转驱动器通常是一个不错的选择,因为更昂贵的旋转驱动器所带来的随机I / O性能提升并不那么引人注目(仅为2倍)。使用SSD或增加RAM可能会更有效地提高I / O吞吐量。

MongoDB和NUMA硬件

在具有非统一内存访问(NUMA)的系统上运行MongoDB可能会导致许多操作问题,包括一段时间内性能下降以及系统进程使用率很高。

在NUMA硬件上运行MongoDB服务器和客户端时,应配置内存交错策略,以便主机以非NUMA方式运行。当将MongoDB部署在Linux(自版本2.0)和Windows(自版本2.6)计算机上时,将在启动时检查NUMA设置。如果NUMA配置可能会降低性能,则MongoDB将显示警告。

也可以看看

MySQL的“交换精神错乱”问题和NUMA 帖子的影响,它描述了NUMA对数据库的影响。该帖子介绍了NUMA及其目标,并说明了这些目标与生产数据库的兼容性。尽管该博客文章讨论了NUMA对MySQL的影响,但MongoDB的问题相似。NUMA:概述。在Windows上配置

在Windows上,必须通过计算机的BIOS启用内存交错。有关详细信息,请查阅系统文档。

在Linux上配置

在Linux上,您必须禁用区域回收,还必须确保您的 mongodmongos实例由启动 numactl,通常通过平台的init系统对其进行配置。您必须执行这两项操作,才能正确禁用NUMA与MongoDB一起使用。

1、使用以下命令之一禁用区域回收

echo 0 | sudo tee /proc/sys/vm/zone_reclaim_modesudo sysctl -w vm.zone_reclaim_mode=0/2、确保mongod和mongos以开头numactl。通常,这是通过平台的init系统配置的。运行以下命令以确定您的平台上正在使用哪个初始化系统:

2、确保mongodmongos以开头numactl。通常,这是通过平台的init系统配置的。运行以下命令以确定您的平台上正在使用哪个初始化系统:

ps --no-headers -o comm 1
如果为“ systemd”,则您的平台使用systemd初始化系统,并且您必须按照以下systemd选项卡中的步骤编辑MongoDB服务文件。如果“ init”,你的平台使用SysV初始化系统,并且你 也不需要执行此步骤。SysV Init的默认MongoDB初始化脚本包括numactl默认情况下通过启动MongoDB实例的必要步骤。如果您管理自己的初始化脚本(即您没有使用这两个初始化系统中的任何一个),则必须按照下面“自定义初始化脚本”选项卡中的步骤 编辑您的自定义初始化脚本。

systemd

您必须用于numactl启动每个 mongod实例,包括所有 配置服务器mongos实例和客户端。编辑每个文件的默认 systemd服务文件,如下所示:

1、复制默认的MongoDB服务文件:

sudo cp /lib/systemd/system/mongod.service /etc/systemd/system/

2、编辑/etc/systemd/system/mongod.service文件,并更新ExecStart语句开头:

/usr/bin/numactl --interleave=all

如果您的现有ExecStart语句显示为:

ExecStart = / usr / bin / mongod --config /etc/mongod.conf

更新该语句为:

ExecStart=/usr/bin/numactl --interleave=all /usr/bin/mongod --config /etc/mongod.conf

3、将更改应用于systemd

sudo systemctl daemon-reload

4、重新启动任何正在运行的mongod实例:

sudo systemctl stop mongodsudo systemctl start mongod

如果适用,请对任何mongos实例重复这些步骤 。

有关更多信息,请参见/ proc / sys / vm / *的文档。

磁盘和存储系统

交换

在避免或尽量减少交换的情况下,MongoDB的性能最佳,因为从交换中检索数据始终比访问RAM中的数据要慢。但是,如果托管MongoDB的系统的RAM不足,则交换可以防止Linux OOM Killer终止mongod进程。

通常,您应该选择以下交换策略之一:

在系统上分配交换空间,并将内核配置为仅允许在高内存负载下进行交换,或者不要在系统上分配交换空间,并且将内核配置为完全禁用交换

请参阅设置vm.swappiness,以获取有关按照以下准则在Linux系统上配置交换的说明。

注意

如果您的MongoDB实例托管在还运行其他软件的系统(例如Web服务器)上,则应选择第一个交换策略。难道不是在这种情况下,禁用掉。如果可能,强烈建议您在其专用系统上运行MongoDB。

RAID

为了在存储层方面获得最佳性能,请使用RAID-10支持的磁盘。RAID-5和RAID-6通常不能提供足够的性能来支持MongoDB部署。

远程文件系统

使用WiredTiger存储引擎,如果远程文件系统符合ISO / IEC 9945-1:1996(POSIX.1),则WiredTiger对象可以存储在远程文件系统上。由于远程文件系统通常比本地文件系统慢,因此使用远程文件系统进行存储可能会降低性能。

如果你决定使用NFS,添加以下NFS选项的 /etc/fstab文件:bg,nolock,和noatime。

将组件分离到不同的存储设备上

为了提高性能,请考虑根据应用程序的访问和写入模式将数据库的数据,日志和日志分离到不同的存储设备上。将组件安装为单独的文件系统,并使用符号链接将每个组件的路径映射到存储它的设备。

对于WiredTiger存储引擎,您还可以将索引存储在其他存储设备上。请参阅 storage.wiredTiger.engineConfig.directoryForIndexes

注意

使用不同的存储设备将影响您创建数据的快照式备份的能力,因为文件将位于不同的设备和卷上。

调度

计划虚拟或云托管设备

对于通过虚拟机监控程序连接到虚拟机实例或由云托管提供商托管的本地块设备,客户操作系统应使用noop调度程序以获得最佳性能。的 空操作调度器允许操作系统到延迟的I / O调度到底层管理程序。

物理服务器的调度

对于物理服务器,操作系统应使用截止期限 调度程序。该期限每次请求调度帽最长延迟时间,并保持了良好的磁盘吞吐量,是最适合磁盘密集型数据库应用程序。

参考官网:

记录地址:

标签: #ubuntu没有wired