> CentOS > CentOS教程 >

面向 MongoDB 优化 Redhat 和 CentOS

在以前的一篇博客“Tuning Linux for MongoDB”(优化 Linux 下的 MongoDB)中,我罗列了几种方法——如何在 Linux 项目中高效调试 MongoDB 的部署。而这篇博客就是在此基础之上做的扩展。

虽然优化 Linux 下的 MongoDB 介绍了一些不错的方法,但要真正实现 MongoDB 的高效 Linux 安装,还是要付出很多时间和精力。更重要的是,一些文章在探讨面向 MongoDB 的系统调优内容时,往往忽略了 RedHat 与 CentOS 版本变动造成的影响(例如,将磁盘 I/O 调度转移至 /etc/udev.d 当中)。为解决这些问题,我们今天将专门着眼于这两套系统,探讨如何更好地完成基准性能调优。


Tuned

在 RedHat 7.0(以及 CentOS 7.0)中,开发者引入了名为“tuned”的守护程序,其作为统一化系统对 Linux 进行调整优化。它采用简单的基于文件的优化操作,并为管理员提供一个“tuned-adm”命令行接口来进行优化配置的申请、排列和推荐。

Tuned 的便利操作:

基于文件的配置——配置文件调优包含在简单的合并文件中

可交换配置文件——可轻松更改配置文件。

符合标准——使用 tuned 配置文件可确保调整不会被覆盖或忽略

注意:假如你使用配置管理系统,例如:Puppet、Chef、Salt、Ansible 等。我建议你将系统设置为通过优化配置加载优化而不是直接进行应用调优,否则调优的操作可能会和自动操作起冲突,覆盖改变。


默认可用的 tuned 配置文件类别(RedHat 7.2.1511):

  • 均衡(balanced)

  • 桌面(desktop)

  • 延迟性能(latency-performance)

  • 网络延迟(network-latency)

  • 网络通量(network-throughput)

  • 省电(powersave)

  • 通量性能(throughput-performance)

  • 虚拟客户(virtual-guest)

  • 虚拟主机(virtual-host)

通常情况下数据库常用到的配置文件有:

  • 延迟性能

    “这是典型延时性能优化的服务器配置。此配置文件禁止动态调整机制和透明的大黄页。它通过 cpuspeed 对 p-states 进行性能治理,同时将 I/O 调度程序设置为 deadline.network-latency”

  • 通量性能

    “此服务器配置文件用于典型的通量性能调试。它禁止 tuned 和 ktune 节能机制,可启用 sysctl,以提升磁盘和网络 I/O 的通量性能,交互限期调度器。CPU 调节器设定为性能.”

  • 网络延迟——包括“延迟性能”,禁用 transparent_hugepages,禁用 NUMA 平衡并启用一些基于延迟的网络调整。

  • 网络通量——包括“通量性能”,并增加网络堆栈缓冲区大小。

我发现“网路延时”是最匹配我们推荐的调优方案,但也需要对其进行部分调整。

好在 tuned 被设计得很灵活,因此我决定再做一个 MongoDB 专用的配置文件:输入“tuned-percona-mongodb”。



tuned-percona-mongodb

tuned-percona-mongodb: https://github.com/Percona-Lab/tuned-percona-mongodb

“tuned-percona-mongodb”是一个专门面向 Linux 环境下 MongoDB 的性能型调优配置文件,目前仍处于实验阶段(没有任何效果保证),我们将其托管在 Percona-Lab Github 库中.

基于 Redhat/CentOS 7+ ,tuned-percona-mongodb 适用于以下的调优选项(之前的一篇优化文章):

  • 禁止透明大黄页

  • 内核网络优化(sysctls)

  • 虚拟内存比例变化(ysctls)

  • 虚拟内存“交换”(sysctls)

  • 块设备预读设置(默认适用于全部磁盘,除/dev/sda之外)

  • 块设备 I/O 调度器(默认适用于全部磁盘,除/dev/sda之外)


另外还有一些其他的针对 RedHat/CentOS 版本作出的特定调优:

  • CPU C状态和侧重节能的高性能调优

  • 磁盘主动链路电源管理(ALPM)调优(如果可用且被支持)

在成功部署这些配置之后,系统仅会提供以下进一步调优建议:

  1. 文件系统类型和挂载选项:
    Tuned 不处理文件系统的挂载选项,这需要在 /etc/fstab 中手动完成。快速总结:当使用 MMAPv1 或 RocksDB 存储引擎时,我们建议对 MongoDB 数据使用 XFS 或 EXT4 文件系统类型,而当使用 WiredTiger 时,我们建议仅使用 XFS。 对于所有文件系统,使用挂载选项“rw, noatime”将减少一些活动。

  2. NUMA 禁用或者交错:
    Tuned 不处理 NUMA 设置,这些仍然需要通过 MongoDB init 脚本或 BIOS on/ off 开关来手动处理。

  3. Linux ulimits:
    Tuned 不设置 Linux ulimit 配置。但是,Percona Server for MongoDB RPM 包在启动时会为您执行此操作!更多相关信息,请参阅“/usr/lib/systemd/system/mongod.service”中的“LimitNOFILE”和“LimitNPROC”。

  4. NTP 服务器:
    Tuned 不处理 RPM 软件包的安装或启用其他服务。您需要安装“ntp”软件包并手动使能/启动“ntpd”服务:

sudo yum install ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd



tuned-percona-mongodb:安装

此配置文件的安装过程非常简单,只需要使用 Git 命令检查该库,而后运行 sudomakeenable 即可。完整输出如下:

$ git clone https://github.com/Percona-Lab/tuned-percona-mongodb
$ cd tuned-percona-mongodb
$ sudo make enable
if [ -d /etc/tuned ]; then
	cp -dpR percona-mongodb /etc/tuned/percona-mongodb;
	echo "### 'tuned-percona-mongodb' is installed. Enable with 'make enable'.";
else
	echo "### ERROR: cannot find tuned config dir at /etc/tuned!";
	exit 1;
fi
### 'tuned-percona-mongodb' is installed. Enable with 'make enable'.
tuned-adm profile percona-mongodb
tuned-adm active
Current active profile: percona-mongodb

在上面的示例中,您可以看到“percona-mongodb”已成为系统上活跃的调优配置文件(在最后一个输出行上有提到)。

将 Tuned 的配置文件安装到“/ etc / tuned / percona-mongodb”中,如下所示:

$ ls -alh /etc/tuned/percona-mongodb/*.*
-rwxrwxr-x. 1 root root   677 Nov 22 20:00 percona-mongodb.sh
-rw-rw-r--. 1 root root  1.4K Nov 22 20:00 tuned.conf

然后我们检查 “deadline”i/o 调度器是否已经成为各磁盘(非 /dev/sda)的当前调度程序:

$ cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq

透明大黄页已被禁止:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

/dev/sdb 上的块设备预读设置应为 32(16 kb):

$ blockdev --getra /dev/sdb
32

这很简单!

tuned-percona-mongodb:卸载

在 github 的检出目录直接运行“sudo make uninstall”卸载配置:

if [ -d /etc/tuned/percona-mongodb ]; then
	echo "### Disabling tuned profile 'tuned-percona-mongodb'";
	echo "### Changing tuned profile to 'latency-performance', adjust if necessary after!";
	tuned-adm profile latency-performance;
	tuned-adm active;
else
	echo "tuned-percona-mongodb profile not installed!";
fi
### Disabling tuned profile 'tuned-percona-mongodb'
### Changing tuned profile to 'latency-performance', adjust if necessary after!
Current active profile: latency-performance
if [ -d /etc/tuned/percona-mongodb ]; then rm -rf /etc/tuned/percona-mongodb; fi

注意:卸载会启用“latency-performance”调优配置,如有需要,可在卸载之后修改。

为了确认卸载,让我们检查一下块设备预读是否被设置回默认值(256/128kb):

$ sudo blockdev --getra /dev/sdb
256

卸载完成。

 

结论

到目前为止,tuned 在面向 MongoDB 的 Linux 调优领域拥有出色的表现,如,为调整 Linux 操作系统提供单一、一致的接口。 在接下来的文章中,我们还将了解如何对文档进行调优

如上所述,在应用“tuned-percona-mongodb”之后,您仍然需要手动配置 NTP 服务器,NUMA(在某些情况下)和文件系统类型与调优。 大多数时候,使用这种方法能有效减少工作时间和精力,并降低发生错误的可能性。

如果您对为 MongoDB 优化 Linux 的配置文件有任何问题,请在此 URL 创建一个 Github 问题:https://github.com/Percona-Lab/tuned-percona-mongodb/issues/new

 

连接


(责任编辑:IT)