在多租户云环境中细粒度调整 IBM AIX 7.1 和 Linux 上的网络服务质量

了解如何对 AIX 7.1 客户端实现网络服务质量管理

在多租户环境中,租户通常共享一个基础架构,在这个基础架构之上,资源按照逻辑进行分区,云管理员需要进行必要的配置来实现基础架构共享。在所有管理任务中,每位租户的网络服务质量维护是一项必须进行 但又非常单调乏味的任务。本文演示了 Linux® 操作系统提供的一个强大的 QoS 机制,它可以帮助云管理员在一台中央 Linux 服务器上有效地划分网络总带宽,在 IBM® AIX®、Microsoft® Windows® 和 Linux 等租户客户端系统中托管云应用程序。

Sandeep Ramesh Patil, 高级软件工程师, IBM

https://www.ibm.com/developerworks/aix/library/au-fine-grain-network/p-spatil.jpgSandeep Ramesh Patil 是 IBM India Software Labs 的一名高级软件工程师。他是 IBM 扩展存储系统的云架构师。在此之前,Sandeep 曾从事分布式技术,包括 DCE、SARPC 和安全产品,比如 IBM Network Authentication Services (IBM Kerberos)。他是 IBM developerWorks 的主要作者,也是一位 IBM 发明大师。Sandeep 拥有印度 Pune 大学的计算机科学与工程学学士学位。



Deepak Rambhau Ghuge, 软件开发人员, IBM

https://www.ibm.com/developerworks/aix/library/au-fine-grain-network/deepak.jpgDeepak Rambhau Ghuge 是 IBM India Software Labs 的软件开发人员,目前从事 IBM Scaled out Network Attached Storage (SONAS) 的 NAS 安全开发。他曾经开发过轻量级多租户虚拟化和 IBM System x® maintenance。Deepak 拥有 College of Engineering, Pune (COEP) 的技术学士学位。



Sasikanth Eda, 助理系统工程师, IBM

https://www.ibm.com/developerworks/aix/library/au-fine-grain-network/sasi.jpgSasikanth Eda 是 IBM India Software Labs 的 SONAS 团队的助理系统工程师。他拥有 Microelectronics 和 VLSI Design 的硕士学位。



2013 年 8 月 12 日

简介

随着中小型企业的快速发展,可扩展性、低初始投资、简单部署、减少占地面积、按使用付费、安全性等等成为了热门问题,这些都可以通过云模型解决。在所有云组件中,多租户模型有助于共享软件和硬件层。用外行人的话来说,租户就是利用其它人所有的资产,并为使用付费。类似地,云术语中的多租户就是指多个客户端利用云基础架构所有者提供的共享资源。

多租户的概念构成了两个成熟的云实现模型的基础:软件即服务 (SaaS),其中多个客户端将软件作为资源进行共享;基础架构即服务 (IaaS),其中多个客户端共享应用程序、平台和网络资源。多租户支持云供应商实现的主要功能是:保持客户端之间的分离,并管理提供给客户端的服务的质量。

本文帮助云管理员通过选定的价格方案,使用 Linux 而不是专用硬件(如网络分配器)为每个 IP 地址构建不同的网络 QoS 策略,向租户提供经过细粒度调整的 QoS。

多租户环境中的网络模式

让我们考虑这样一个场景:一个云供应商拥有多个租户,并且该供应商希望根据客户选择的方案在网络中提供不同的服务质量。下图展示了一个样例 QoS 实现的图示,其中一些机器被划分到不同的 QoS 池中,而云管理员需要对网络带宽进行划分。

图 1. 企业云中的典型网络配置
企业云中的典型网络配置

为了驱动上下文,我们假设一个云供应商启动了多个付费级别 (slab) 并提出了以下方案细节:

  • Platinum 方案下的客户将获得全部网速的 60%。
  • Gold 方案下的客户将获得全部网速的 25%。
  • Silver 方案下的客户将获得全部网速的 10%。
  • Bronze 方案下的客户将获得全部网速的 5%。

现在,考虑这样一个场景:客户 A 和客户 B 利用同一个数据服务器基础架构,其中,客户 A 属于 Platinum 方案,而客户 B 属于 Bronze 方案。如果客户 B 的工作负载在共享的基于 Linux 的云服务器中需要占用大量网络资源,那么很显然,如果不进行网络隔离或施加限制,那么客户 B 将占用为客户 A 预留的网络资源,从而间接影响到客户 A 的工作负载,并违背对高级客户做出的服务水平协议 (SLA)。这个问题在多租户环境中十分突出,为了满足多租户客户的服务质量和 SLA,云提供商应当对满足客户端请求的网络接口卡使用可管理的细粒度网络整形 (network shaping)。

为了演示上述问题是如何解决的,我们将通过一个简单的设置演示网络 QoS 的配置,其中涉及一个 Linux 服务器(作为中央通用云服务器托管云应用程序)和一个 AIX 7.1 客户端(构成租户系统,访问云应用程序),如下图所示。在假设的情况下,与网络相关的 QoS 以及与 AIX 客户端相关的 SLA 需要将客户端的数据下载速度限制为 1MBps。在本演示中,我们将在 Linux 服务器上调整网络带宽,将 AIX 客户端获取或下载数据的速度限制为 1MBps。这有助于遵守与该 AIX 客户端有关联的网络 QoS。

图 2. Linux 服务器和 AIX 7.1 客户端之间的示例设置
Linux 服务器和 AIX 7.1 客户端之间的示例设置

配置网络 QoS 的必要条件

配置网络 QoS 的必要条件包括:

  1. 运行 Linux 服务器
    • Linux 内核 2.6.x(RHEL 6 默认内核足够满足要求)
    • RPM 包列表
      • Iproute2 /tc(iproute-2.6.35-9.fc14.x86_64.rpm,由 Red Hat Enterprise Linux [RHEL] 安装附带)
      • tcptrack(衡量客户端网络带宽)[可选]
  2. AIX 7.1 客户端
    • 无需特殊的包或配置

Linux kernel 2.6.x 为网络整形提供了灵活的实施策略,整个过程可以分为三个步骤:

步骤 1:识别必须应用网络整形的目标对象。在本例中,必须对租户的 IP 地址应用网络限制(参阅 在与 AIX 客户端相连的 Linux 服务器上配置网络 QoS 小节)。

步骤 2:根据内核中启用的模块创建排队策略(参考下面的 在与 AIX 客户端相连的 Linux 服务器上配置网络 QoS 小节中的 清单 5清单 8)。

步骤 3:将排队策略连接到一个过滤器(默认过滤器是 u32)(参阅 在与 AIX 客户端相连的 Linux 服务器上配置网络 QoS 小节中 清单 9 下方的内容 )。

图 3 显示了网络整形的概念图。有关 Linux 网络整形的更多信息和详细解释,请参见 参考资料 小节。

图 3. 网络整形概念图
网络整形概念图

在图 3 中:

  • X 表示服务器的总的网络速度(物理带宽)。
  • Ci=X/Ri 表示子类获得的网络带宽,通过使用比例 (R) 划分总的网络带宽来实现。
  • Ci/Ti 表示分配给每个租户的网络带宽,通过使用客户端选择的 QoS 方案 (T) 划分子类网络带宽来实现。
  • root qdisc子类过滤器 及其重要性将在本文后面解释。

在与 AIX 客户端相连的 Linux 服务器上配置网络 QoS

  1. 分配静态 IP 地址

    向 Linux 服务器和客户端 AIX 系统分配一个静态 IP 地址。

    Linux 服务器 IP 地址 = 172.18.10.60

    AIX 客户端 IP 地址 = 172.18.10.40

    注意:确保这两个 IP 地址都是可到达的。

  2. 检查根排队策略 (qdisc) 是否存在

    网络带宽整形是一种基于树的分层方法,其中,根 qdisc 构成基本单元(与内核通信的排队策略),被附加到与客户端相连的服务器网络接口。tc 命令(由 Linux 提供)是一个管理接口,我们在本例中使用它进行网络整形。(有关 tc 命令的更多信息,请参考 Linux 服务器的 tc 指南)。下面的步骤允许您检查是否存在与内核相连的网络带宽限定配置。本文假设不存在这些配置,并因此而创建了一个新的配置。

    清单 1. 检查是否存在 qdisc
    root@linuxserver:# tc qdisc show dev ethX0
    root@linuxserver:# echo $?
    0

    确保没有根 -qdisc 与网络设备相连。如果有的话,请按照以下方式删除 -qdisc。

    清单 2. 删除 qdisc
    root@linuxserver:# tc qdisc del root dev ethX0
    root@linuxserver:# echo $?
    0
  3. 检查与 qdisc 相连的类

    类构成了可编程的实体,它们与根排队策略相关。
    清单 3. 检查是否存在类
    root@linuxserver:# tc class show dev ethX0
    root@linuxserver:# echo $?
    0
  4. 检查是否存在过滤器

    过滤器是操作实体,用于在所有与 Linux 服务器相连的 IP 地址中分离指定的 IP 地址。
    清单 4. 检查是否存在过滤器
    root@linuxserver:# tc -s –d filter show dev ethX0
    root@linuxserver:# echo $?
    0

    在任意 tc 命令中包含 –s(统计)和/或 –d(细节)可以生成更详细的输出。

  5. 添加排队策略

    向 ethX0(服务器的以太网卡,与 Linux 服务器相连,用于处理 AIX 客户端的请求)添加根 -qdisc。在这里,htbhierarchical token bucket 类完整排队策略。有关的更多细节,请参阅 参考资料 小节。
    清单 5. 添加根 -qdisc
    root@linuxserver:# tc qdisc add dev ethX0 root handle 10: htb
    
    root@linuxserver:# tc -s qdisc show dev eth0
    qdisc htb 10: r2q 10 default 0 direct_packets_stat 29
     Sent 3338 bytes 29 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
    
    root@linuxserver:# tc -d qdisc show dev eth0
    qdisc htb 10: r2q 10 default 0 direct_packets_stat 58 ver 3.17
  6. 创建子类策略

    当创建了一个子类并将它附加到一个 qdisc 时,这将充当所有其他类的父类。该类的带宽参数等于接口的物理带宽的参数(这里假设接口物理带宽是 100 Mbps)。
    清单 6. 添加一个子类
    root@linuxserver:# tc class add dev ethX0 parent 10:0 classid 10:10 htb rate 100mbps
    
    root@linuxserver:# tc -s class show dev eth0
    class htb 10:10 root prio 0 rate 800000Kbit ceil 800000Kbit burst 101600b 
    cburst 101600b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 1016 ctokens: 1016
    
    root@linuxserver :# tc -d class show dev eth0
    class htb 10:10 root prio 0 quantum 200000 rate 800000Kbit ceil 800000Kbit 
    burst 101600b/8 mpu 0b overhead 0b cburst 101600b/8 mpu 0b overhead 0b level 0

    您可以使用 ethtool 命令找到以太网卡的物理带宽,如下所示。有关 ethtool 命令的更多信息,参见 Red Hat Linux 发行版提供的手册。

    清单 7. 在 Linux 服务器上使用 ethtool 命令识别物理网络带宽
    root@linuxserver:# ethtool ethX0
  7. 向创建的子类添加一个叶类

    添加一个叶类,其速度由方案中 AIX 客户端选择的参数确定。在下面的例子中,AIX 客户端选择的网络速度选项 1Mbps。
    清单 8. 添加一个叶类
    root@linuxserver:# tc class add dev ethX0 parent 10:10 classid 10:100 htb rate 1mbps
    
    root@linuxserver:# tc -s class show dev eth0
    class htb 10:10 root rate 800000Kbit ceil 800000Kbit burst 101600b cburst 101600b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 1016 ctokens: 1016
    class htb 10:100 parent 10:10 prio 0 rate 8000Kbit ceil 8000Kbit burst 2600b 
    cburst 2600b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 2600 ctokens: 2600
     
    root@localhost :# tc -d class show dev eth0
    class htb 10:10 root rate 800000Kbit ceil 800000Kbit burst 101600b/8 mpu 0b 
    overhead 0b cburst 101600b/8 mpu 0b overhead 0b level 7 
    class htb 10:100 parent 10:10 prio 0 quantum 100000 rate 8000Kbit ceil 8000Kbit 
    burst 2600b/8 mpu 0b overhead 0b cburst 2600b/8 mpu 0b overhead 0b level 0
  8. 向创建的子类附加一个 qdisc

    根据公平排队算法,向 qdisc 附加一个随机公平排队 (SFQ),它属于排队策略集合。
    清单 9. 向子类添加一个 qdisc
    root@linuxserver:# tc qdisc add dev ethX0 parent 10:100 sfq quantum 1514b perturb 15
    
    root@linuxserver:# tc -s qdisc show dev eth0
    qdisc htb 10: r2q 10 default 0 direct_packets_stat 256
     Sent 37768 bytes 256 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
    qdisc sfq 8002: parent 10:100 limit 128p quantum 1514b perturb 15sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
    
    root@linuxserver:# tc -d qdisc show dev eth0
    qdisc htb 10: r2q 10 default 0 direct_packets_stat 286 ver 3.17
    qdisc sfq 8002: parent 10:100 limit 128p quantum 1514b flows 128/1024 perturb 15sec

    在这里,quantum 用作添加子类的选项(在 清单 9 中),指数据流中在轮到下一个队列之前允许从队列中去掉的字节数量。

  9. 向已创建的叶子类附加一个过滤器
    清单 10. 向叶子类添加一个过滤器
    root@linuxserver:# tc filter add dev ethX0 protocol ip parent 10:0 prio 5 u32 match 
    ip dst 172.18.10.40 flowid 10:100
    
    root@linuxserver:# tc -s filter show dev eth0
    filter parent 10: protocol ip pref 5 u32 
    filter parent 10: protocol ip pref 5 u32 fh 800: ht divisor 1 
    filter parent 10: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 
    flowid 10:100 rule hit 30 success 0)
      match 097a7a04/ffffffff at 16 (success 0 ) 
    
    root@linuxserver:# tc -d filter show dev eth0
    filter parent 10: protocol ip pref 5 u32 
    filter parent 10: protocol ip pref 5 u32 fh 800: ht divisor 1 
    filter parent 10: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 
    flowid 10:100 
      match 097a7a04/ffffffff at 16

    清单 10 表示添加一个过滤器来匹配网络所限定的特定 IP 地址。

    但在企业环境中,客户端可以请求对每个子网应用网络速度限制,清单 11 中展示了这类场景。

    清单 11. 对整个子网应用过滤器
    root@linuxserver:# tc filter add dev ethX0 protocol ip parent 10:0 prio 5 
    u32 match ip dst 172.18.10.1/24 flowid 10:100

AIX 上的样例网络带宽测试

清单 12 显示了在对可用带宽应用限制之前 AIX 7.1 上的网络带宽测试。

清单 12. 使用 SCP 协议在 AIX 7.1 上测试从 Linux 服务器下载样例数据
root@linuxserver:# ssh root@172.18.10.40
******************************************************************************
*                                                                            *
*   Welcome to AIX Version 7.1 !                                             * 
*                                                                            * 
*   Please see the README file in /usr/lpp/bos for information pertinent to  *
*   this release of the AIX Operating System.                                *
*                                                                            *
*                                                                            *
******************************************************************************
# cd tmp/traffic_shaping
# scp root@172.18.10.60:/root/Data .
root@172.18.10.60’s password:
Data                                       38%   502MB   24MB/s   1:06  ETA

清单 13 显示了在对可用带宽施加限制后 AIX 7.1 上的网络带宽测试。

清单 13. 使用 SCP 协议在 AIX 7.1 上测试从 Linux 服务器下载样例数据
root@linuxserver:# ssh root@172.18.10.40
******************************************************************************
*                                                                            *
*   Welcome to AIX Version 7.1 !                                             * 
*                                                                            * 
*   Please see the README file in /usr/lpp/bos for information pertinent to  *
*   this release of the AIX Operating System.                                *
*                                                                            *
*                                                                            *
******************************************************************************
# cd tmp/traffic_shaping
# scp root@172.18.10.60:/root/Data .
root@172.18.10.60’s password:
Data                                      7%   125MB   962KB/s   17:01  ETA

在清单 12 和清单 13 中的输出中,您可以清晰地看到我们对网络带宽的配置效果。进行配置后,复制文件所分配的带宽被限制为 24 MB/s 到 962 KB/s 之间(约 1MBps)。

注意

  1. 上述步骤需要 root 权限来对网络设备进行配置。
  2. 整形配置在重启后被清除。(可以通过在初始化脚本中添加规则解决这个问题)。
  3. 上面介绍的网络整形只适用于从 Linux 服务器流出的网络流量。换句话说,只适用于从 Linux 服务器获取或下载的数据,不适用于上传到 Linux 服务器的数据。要对进入 Linux 服务器的网络流量进行网络整形(即上传到 Linux 服务器的数据),需要增加一个 Linux 系统来充当客户端与服务器之间的路由器,并用 tc 命令适当地配置规则。或者,您可以使用 Intermediate Message Queue (IMQ) 或 Intermediate Functional Block (IFB),它们是针对 Linux 内核 2.6.x 的补丁,可以通过 iptable 表应用该补丁并在中央托管 Linux 服务器上配置它。有关的更多信息,请参见 参考资料 小节。
  4. 在上例中,当我们提到 35% 的网络分配给 Gold QoS 下的系统时,这意味着 Gold 集合下的所有系统都分配了 35% 的网络,而并不是说 Gold 下的所有系统总共分配了 35% 的网络。

结束语

本文演示了云管理员如何在一台中央 Linux 服务器上利用强大的 Linux 网络整形功能为多个租户划分可用带宽。此类功能通常可以帮助实现私有云部署,在这种环境下,云管理员希望跨不同部门对网络带宽进行调整,不同的部门相当于具有不同网络 QoS 需求的租户。

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX, Linux
ArticleID=940518
ArticleTitle=在多租户云环境中细粒度调整 IBM AIX 7.1 和 Linux 上的网络服务质量
publish-date=08122013