第 4 章 控制群组应用示例
本章将针对如何使用 cgroup 给出应用示例。
4.1. 定义数据库 I/O 的优先级
在数据库服务器专用的虚拟机内部运行数据库服务器实例,让您可以根据数据库的优先级来为其分配资源。请参考下列示例:系统在两个 KVM 虚拟机内部运行两个数据库服务器。一个数据库的优先级较高,另一个较低。当两个数据库服务器同时运行,I/O 吞吐量会降低来均等地容纳两个数据库的请求;如图 4.1 “不根据优先级分配资源时的 I/O 吞吐量” 所示:一旦优先级低的数据库启动(约在时间轴的 45 处),分配给两个服务器的 I/O 吞吐量是相同的。
![不根据优先级分配资源时的 I/O 吞吐量](https://access.redhat.com/webassets/avalon/d/Red_Hat_Enterprise_Linux-7-Resource_Management_Guide-zh-CN/images/80a37c25ce2378fb1307a380e4323e04/graph_IO_1.png)
图 4.1. 不根据优先级分配资源时的 I/O 吞吐量
为能优先处理来自优先级高的数据库服务器请求,可将此服务器分配给一个 I/O 操作预留量高的 cgroup,而优先级低的数据库服务器可以分配给一个 I/O 操作预留量少的 cgroup。可按照以下步骤过程 4.1, “I/O 吞吐量优先化”来完成此操作,这些步骤将全部在主机系统上执行。
过程 4.1. I/O 吞吐量优先化
- 请确保两项服务的所用资源统计功能,处于开启状态:
~]#
systemctl
set-property
db1.service
BlockIOAccounting
=true
~]#systemctl
set-property
db2.service
BlockIOAccounting
=true
- 如果将高优先级和低优先级服务的比率设定为 10:1 ,那么在这些服务单位中运行的进程将只能使用可用资源:
~]#
systemctl
set-property
db1.service
BlockIOWeight
=1000
~]#systemctl
set-property
db2.service
BlockIOWeight
=100
图 4.2 “根据优先级分配资源时的 I/O 吞吐量” 显示了优先处理优先级高的数据库请求,而限制优先级低的数据库的情况。一旦数据库服务器移至恰当的 cgroup(约在时间轴的 75 处),I/O 吞吐量就会在两个服务器间按照 10:1 的比率分配。
![根据优先级分配资源时的 I/O 吞吐量](https://access.redhat.com/webassets/avalon/d/Red_Hat_Enterprise_Linux-7-Resource_Management_Guide-zh-CN/images/a8277318dbc07fb7b4f8515763fd2a22/graph_IO_2.png)
图 4.2. 根据优先级分配资源时的 I/O 吞吐量
或者,块设备 I/O 流量调节功能,可对优先级低的数据库限定其读写操作量。更多信息,请参阅 〈kernel 管控器专项介绍〉对
blkio
管控器的介绍。