【51CTO.com快译】Mongo实例当中小小的一点性能差异可能决定项目的成败。
作为Linux阵营中的重要成员,红帽与CentOS无疑是企业经常接触且利用的强大工具。然而大多数相关文章在探讨面向MongoDB的系统调优内容时,往往忽略了二者版本变动造成的影响(例如将磁盘I/O调度转移至/etc/udev.d当中)。考虑到这一点,我们今天将专门着眼于这两套系统,探讨如何更好地完成基准性能调优。
Tuned
在红帽(以及CentOS)7.0中,开发者引入了名为“tuned”的守护程序,其作为统一化系统对Linux进行调整应用。Tuned采取简单且基于文件的调整机制,且为管理员提供tuned-adm命令行界面以实现调整配置文件的应用、罗列以及推荐。
Tuned的操作优势包括:
基于文件的配置方式: 调整配置可容纳于单一简单的合并文件内。
配置文件可更换: 配置文件可轻松更换。
符合标准: 使用tuned配置文件能够确保现有各调整不致被覆盖或者忽略。
注意:如果大家使用Puppet、Chef、Salt以及Ansible等配置管理系统,我建议各位同样通过tuned配置文件利用其进行调整部署,而非直接进行调整——否则调优工作可能会破坏自动化机制或者覆盖原有变更。
以下为红帽7.2.1511版本下的默认可用tuned配置文件类别:
Balanced
Desktop
Latency-performance
Network-latency
Network-throughput
Power save
Throughput-performance
Virtual-guest
Virtual-host
这些配置文件主要面向以下几类数据库用例:
Latency-performance(延迟性能)
“此服务器配置适用于典型的延迟性能调优。此配置会禁用动态调优机制及transparent_hugepages。其通过cpuspeed对p-states进行性能治理,同时将I/O调度程序设置为deadline.network-latency。”
Throughput-performance(通量性能)
“此服务器配置适用于典型的通量性能调优。其禁用tuned与ktune power saving机制,启用sysctl设置以优化磁盘与网络I/O的通量性能,同时切换至deadline调度程序。CPU调整器将被设置为performance。”
Network-latency(网络延迟): 包括latency-performance,禁用transparent_hugepages,禁用NUMA均衡并启用部分基于延迟的网络调优选项。
Network-throughput(网络通量): 包括throughput-performance并提升网络栈缓冲区大小。
我发现“network-latency”最接近我们推荐的调优方案,但仍需要对其进行部分调整。
好消息是,tuned在设计上拥有出色的灵活性,因此我决定创建一个专门用于MongoDB的配置文件。输入tuned-percona-mongodb。
Tuned-Percona-Mongodb
tuned-percona-mongodb是一个专门面向Linux环境下MongoDB的性能型调优配置文件,其目前尚处于实验阶段(不提供任何效果保证)。我们将其托管在自己的Percona-LabGitHub库当中。
tuned-percona-mongodb采用了以下调优选项,且立足于红帽/CentOS 7+主机:
禁用透明大页面。
内核网络调优(sysctls)。
虚拟内在dirty_ratio变更(sysctls)。
虚拟内在 “swappiness(交换)” (sysctls)。
块设备预计设置 (默认适用于全部磁盘,除/dev/sda之外)。
块设备I/O调度程序 (默认适用于全部磁盘,除/dev/sda之外)。
另外还有其它一些针对红帽/CentOS版本作出的特定调优:
CPU C-States与Energy-Bias调优以实现高性能。
磁盘主动链路电源管理(简称ALPM)调优,如果可能且受到支持。
在成功部署此配置文件后,系统仅会提供以下进一步调优建议:
文件系统类型与挂载选项。Tuned不会处理文件系统挂载选项; 我们需要在/etc/fstab中手动进行。为了快速完成总结,建议大家在使用MMAPv1或者RocksDB存储引擎时为MongoDB数据选择XFS或者EXT4文件系统类型,而在使用WiredTiger时配合XFS。对于全部文件系统,使用挂载选项rw,noatime将减少一部分活动。
禁用或交叉NUMA。 Tuned不会处理NUMA设置,因此需要通过MongoDBinit脚本或者BIOS on/off开关进行手动处理。
Linux ulimit。 Tuned不会处理Linux ulimit设置。不过,Percona Server for MongoDB RPM软件包会在初次启动时帮助大家解决这些问题。
大家可以在/usr/lib/systemd/system/mongod.service当中查看LimitNOFILE与LimitNPROC以了解更多信息。
· NTP服务器。Tuned不会处理RPM软件包的安装或者启用相关服务。大家需要手动安装ntp软件包并启用及启动ntpd服务:
Tuned-Percona-Mongodb: 安装
此配置文件的安装过程非常简单,只需要使用Git命令检查该库,而后运行sudomakeenable即可。完整的输出结果如下:
在以上示例中,可以看到percona-mongodb目前已经在系统上成为活跃tuned配置文件(输出结果的***一行中可以看到)。
各tuned配置文件被安装至/etc/tuned/percona-mongodb, 如下可见:
下面我们检查deadline i/o调度程序已经成为各磁盘(非/dev/sda)的当前调度程序:
透明大页面已被正确禁用:
/dev/sdb上的块设备预读设置应为32(16 kb):
就这么简单!
Tuned-Percona-Mongodb: 卸载
要制裁此配置文件,在github checkout目录中运行Sudo Make Uninstall:
注意:卸载过程会启用latency-performance tuned配置,如果有必要请注意在卸载之后对此进行变更。
要确认卸载,下面我们检查块设备预读是否已经被设置为默认(256/128 kb):
卸载完成。
总结
Tuned在面向MongoDB的Linux调优领域拥有出色表现,其能够提供统一的单一接口以实现Linux操作系统调优。在接下来的文章中,我们还将了解如何对文档进行调优。
如前文所提到,在应用tuned-percona-mongodb之后,大家仍然需要手动配置NTP服务器、NUMA(在某些情况下)以及文件系统类型与调优。不过在tuned的帮助下,余下的这部分工作所占用的时间精力以及造成问题的可能性已经大大降低。
原文链接:https://dzone.com/articles/tuning-linux-for-mongodb-automated-tuning-on-redha
原文标题:Tuning Linux for MongoDB: Automated Tuning on Redhat and CentOS
原文作者:Tim Vaillencourt
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】