NUMA 机器上的 MongoDB 设置

NUMA 机器上的 MongoDB 设置

我在我的 centos 7 机器上安装了 MongoDB 3.6,在启动日志中我看到一条警告,因为我正在运行 NUMA 硬件:

2018-02-05T00:13:23.889+0100 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.
2018-02-05T00:13:23.889+0100 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2018-02-05T00:13:23.889+0100 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]

我想知道如何永久修复此 numactl 启动问题,因为我不想每次都手动启动 mongod。我通常会运行sudo service mongod start,并且希望此命令每次都使用 numctl 前缀启动 MongoDB。

我如何使用 CentOS7 实现这一点?(我在 Google 上搜索,找不到可以在我的服务器上编辑的任何服务文件)。

答案1

我使用的是 CentOS 7.6

/etc/systemd/system/multi-user.target.wants/mongod.service

答案2

先前的“使用 numactl 的服务”问题 如何使用 numactl 运行服务 恰好是关于 mongodb 的。鉴于 CentOS 7,systemd 示例是相关的,具体来说:

编辑/etc/systemd/system/mongod.service.d/numactl.conf 以覆盖执行: ExecStart=/usr/bin/numactl --interleave=all -- /usr/local/bin/mongod $OPTIONS run

另一个设计选项是将 NUMA 主机拆分为不超过一个节点的虚拟机。Mongo 具有集群功能,尽管这比扩展更复杂。不过,扩展并不是很困难。如果大多数虚拟机都从一台主机运行,则可能会出现单点故障。

答案3

首先确保 numa 在启动时安装并加载:

yum search numa | egrep -v devel
# Be sure to install the necessary package, avoid the "devel" ones
yum install numad # numactl

确保在启动期间加载 numad:

systemctl enable numad
service numad start
service numad status
echo 0 | sudo tee /proc/sys/vm/zone_reclaim_mode
sudo sysctl -w vm.zone_reclaim_mode=0
cat /var/log/numa*

现在环境已经准备好了:

numactl --interleave=all <path> <options>

path您正在启动的程序的路径,是传递给该程序的任何可选参数。

请看这里以获得进一步的说明:

https://docs.mongodb.com/manual/administration/production-notes/#mongodb-and-numa-hardware

相关内容