文章
服务器与存储管理
2011 年 11 月
作者:Duncan Hardie
本文介绍如何使用 Oracle Solaris 11 中新增的网络资源管理来控制网络流量基础架构。您将了解如何对数据链路使用带宽控制在各个应用程序之间共享网络带宽,同时防止行为不当的应用程序独占全部网络带宽。您还将了解流,流可以控制特定网络流量的带宽,举例来说,可以限制每周备份对系统的影响。
|
一如继往,网络是数据中心的核心。能够轻松地监视、控制、保证和重新配置网络基础架构对于为应用程序提供所需的数据连接至关重要。为满足数据中心实施日益增长的需求,Oracle Solaris 11 提供了一种可靠、安全、可伸缩的基础架构。
特别是,随着网络虚拟化的引入,Oracle Solaris 11 提供了创新的网络资源管理功能来提供前所未有的高级控制,从划分大型网络管道或控制特定网络流量对系统的影响,直至在云或数据中心中运行应用程序。
新的 Oracle Solaris 11 网络架构(也称为 Crossbow 项目)在操作系统中引入了网络虚拟化和网络资源控制的思想。这种新的网络架构内置于 Oracle Solaris 11 中,可在 Oracle Solaris 11 环境中运行。
在本方法指南中,我们将分析一个示例场景,其中有一个使用单一网络连接的系统,我们需要在三个不同的虚拟应用程序环境中分配该网络连接。我们结合使用网络虚拟化和 Oracle Solaris 区域(内置的操作系统虚拟化)对该系统进行配置,以确保关键应用程序能够获得所需的网络带宽,同时限制较低优选级的流量。
我们将为面向 Web 的应用程序创建两个 Oracle Solaris 区域(webzone-1 和 webzone-2),它们将执行运行 Web 服务器应用程序系统以支持一种在线采购工具的大部分工作。显然,webzone-1 和 webzone-2 对于业务至关重要,需要获得大部分共享网络带宽。
此外,还有一个 Oracle Solaris 区域 backupzone,用于容纳备份软件并每月运行一次该软件。尽管该功能是必需的,但确保备份操作不会影响 webzone-2 网络流量非常重要。所有这些将通过结合使用 Oracle Solaris 区域、虚拟 NIC (VNIC) 和网络带宽控制来实现。
通过网络带宽控制,您可以限制可占用的带宽。可以通过以下两种方式来应用这种带宽限制:
对数据链路的带宽控制限制通常应用于 VNIC,可减少该 VNIC 的最大带宽。所应用的带宽限制还限定了该 VNIC 的虚拟链路速度。例如,可以使用此方法让 10 GB 网络连接上的一个 VNIC 只能占用 10% 的带宽,表现得就像一个 1 GB 连接,然后可以让其他 VNIC(及其所连接的应用程序)共享剩余带宽。通常用这种方法来拆分大型聚合网络管道,或防止特定应用程序或区域占用全部网络带宽以至妨碍系统中其余的应用程序。
这种方法是将一条数据链路虚拟化为多个 VNIC,让这些 VNIC 工作于已配置的虚拟链路速度下;与此不同的是另一种方法,即用流基于属性 对数据包进行分类然后控制如何使用资源来处理这些数据包。属性基于数据包头中的信息,可以为以下内容之一:
这意味着,与限制数据链路(这会影响所有流量)不同,您可以选择仅限制特定类型的流量。例如,您可能希望限制系统上的 FTP 流量以保护其他网络流量,也可能希望限制到备份服务器的流量。图 1 使用 IP 地址属性限制到备份服务器的网络带宽来阐释了这一概念。

图 1. 限制到备份服务器的流量的流控制
在图 1 所示的配置下,您的备份仍能完成,但该配置会防止备份操作显著影响网络上的其他流量。
完成本文中的过程之后,您将有三个经过网络资源管理配置的 Oracle Solaris 区域,如图 2 所示。

图 2. 三个区域及其关联的 VNIC 和网络资源控制
对于 webzone-1,将对其 VNIC 使用带宽控制以确保该区域可以访问的最大带宽 (maxbw) 为 400 Mb,从而为该区域分配物理数据链路(网络端口 e1000g0)连接的相当一部分带宽。对于 webzone-2 同样如此。对于 backupzone,将对其 VNIC 设置 200 Mb 的限制,因为备份数据不如 Web 流量重要。此外,将从 webzone-2 到 backupzone 的通信流限制为 50 Mb,因为我们不希望每周一次的备份显著影响到 webzone-2。
注:有关对虚拟网络及其配置和管理的更深入的说明,请参见 Oracle Solaris 管理:网络接口和网络虚拟化。有关 Oracle Solaris 区域的全面讨论,请参见 Oracle Solaris 管理:Oracle Solaris 区域、Oracle Solaris 10 区域和资源管理。
我们来查看网络和 Oracle Solaris 区域配置的状态,如清单 1 所示,以便了解稍后将要进行的更改。
清单 1:查看当前配置root@global:~# dladm show-phys LINK MEDIA STATE SPEED DUPLEX DEVICE e1000g0 Ethernet up 1000 full e1000g0 e1000g1 Ethernet unknown 0 unknown e1000g1 root@global:~# dladm show-link LINK CLASS MTU STATE OVER e1000g0 phys 1500 up -- e1000g1 phys 1500 unknown -- root@global:~# ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 e1000g0/_a static ok 10.134.79.168/24 lo0/v6 static ok ::1/128 root@global:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared
我们使用了三个不同的命令来收集一些基本信息。ipadm 命令是 Oracle Solaris 11 中新增的,dladm 则得到了明显改进。
我们可以使用 dladm 命令来查看和管理数据链路层。在本例中,我们使用了 show-phys 选项,可以看到有两个物理网络设备(e1000g0 和 e1000g1),其中只有一个已启动并配置,其链路速度为 1 G。我们还使用了 show-link 选项来查看以确定没有其他额外的链路。
作为对比,来看看 ipadm 命令,我们可以使用这个命令来查看和管理 IP 层。在清单 1 中可以看到,e1000g0 设备已启动并配置了静态 IP 地址 10.134.79.168。还有两个网络环回设备,每个分别用于 IPv4 和 IPv6。
最后,我们可以使用 zoneadm 命令来查看 Oracle Solaris 区域信息。在清单 1 中可以看到,只配置了一个区域实例,即全局区域。全局区域是特殊的 Oracle Solaris 区域。它既是系统的默认区域,又是用于系统级管理控制的区域。
webzone-1)Oracle Solaris 区域是 Oracle Solaris 中提供的内置虚拟化技术。在本场景中,我们将使用这些区域来容纳不同的环境。本文不讨论创建 Oracle Solaris 区域的细节。有关如何创建 Oracle Solaris 区域的信息,请参见“如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域”。
首先使用 zonecfg 创建第一个区域 webzone-1。创建区域至少需要该区域的名称及其 zonepath。
root@global:~# zonecfg -z webzone-1 webzone-1: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:webzone-1> create create: Using system default template 'SYSdefault' zonecfg:webzone-1> set zonepath=/zones/webzone-1
默认情况下,Oracle Solaris 区域配置有一个名为 anet 的自动 VNIC。在 zonecfg 环境中使用 info 选项即可看到这个 VNIC,如清单 2 所示。稍后我们将对这个 VNIC 设置带宽控制。
zonecfg:webzone-1> info zonename: webzone-1 zonepath: /zones/webzone-1 brand: solaris autoboot: false bootargs: file-mac-profile: pool: limitpriv: scheduling-class: ip-type: exclusive hostid: fs-allowed: anet: linkname: net0 lower-link: auto allowed-address not specified configure-allowed-address: true defrouter not specified allowed-dhcp-cids not specified link-protection: mac-nospoof mac-address: random mac-prefix not specified mac-slot not specified vlan-id not specified priority not specified rxrings not specified txrings not specified mtu not specified maxbw not specified rxfanout not specified
可以看到,该链路将称作 net0,并将自动使用其下层物理数据链路。
zonecfg:webzone-1> verify zonecfg:webzone-1> commit zonecfg:webzone-1> exit
下一步我们来安装该区域,如清单 3 所示。我们需要访问映像包管理系统 (IPS) 信息库以安装区域。
清单 3:安装区域
root@global:~# zoneadm -z webzone-1 install
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111020T102419Z.webzone-1.install
Image: Preparing at /zones/webzone-1/root.
Install Log: /system/volatile/install.8658/install_log
AI Manifest: /tmp/manifest.xml.XSaa5q
SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
Zonename: webzone-1
Installation: Starting ...
Creating IPS image
Installing packages from:
solaris
origin: http://ipkg.us.oracle.com/solaris11/dev/
DOWNLOAD PKGS FILES XFER (MB)
Completed 167/167 32062/32062 175.8/175.8
PHASE ACTIONS
Install Phase 44311/44311
PHASE ITEMS
Package State Update Phase 167/167
Image State Update Phase 2/2
Installation: Succeeded
Note: Man pages can be obtained by installing pkg:/system/manual
done.
Done: Installation completed in 108.653 seconds.
Next Steps: Boot the zone, then log into the zone console (zlogin -C)
to complete the configuration process.
Log saved in non-global zone as /zones/webzone-1/root/var/log/zones/zoneadm.20111020T102419Z.webzone-1.install
最后,启动该区域并使用 System Configuration Tool 指定其系统配置。有关如何执行此操作的详细信息,请参见“如何使用 sysconfig 命令配置 Oracle Solaris 11”或“如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域”。
root@global:~# zoneadm -z webzone-1 boot; zlogin -C webzone-1
当您完成 System Configuration Tool 中的一组交互式屏幕时,请指定以下信息:
另外,指定 root 口令并通过指定用户名和用户口令创建一个用户帐户。
完成后,会看到该区域继续启动。在看到区域控制台登录提示符后,使用“~.”转义序列退出区域控制台环境,如清单 4 所示。
Exiting System Configuration Tool. Log is available at: /var/tmp/install/sysconfig.log Hostname: webzone-1 Oct 20 11:38:49 webzone-1 sendmail[10870]: My unqualified host name (webzone-1) unknown; sleeping for retry Oct 20 11:38:49 webzone-1 sendmail[10874]: My unqualified host name (webzone-1) unknown; sleeping for retry webzone-1 console login: webzone-1 console login: ~. [Connection to zone 'webzone-1' console closed]
可以使用 zoneadm 命令查看新创建的 webzone-1 的状态:
root@global:~# zoneadm list -v ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 11 webzone-1 running /zones/webzone-1 solaris excl
现在 webzone-1 已启动运行,下面来看看这对于网络意味着什么以及刚创建的自动 VNIC:
root@global:~# dladm show-link LINK CLASS MTU STATE OVER e1000g0 phys 1500 up -- e1000g1 phys 1500 unknown -- webzone-1/net0 vnic 1500 up e1000g0 root@global:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-1/net0 e1000g0 1000 2:8:20:7a:7b:f random 0
show-link 和 show-vnic 选项均显示已经自动为 webzone-1 创建 VNIC net0,且两个命令均显示与该 VNIC 关联的区域的名称已经附加到链路名称后面。
下面使用 zlogin 命令登录 webzone-1 来看看那里有些什么,如清单 5 所示。
root@global:~# zlogin webzone-1 [Connected to zone 'webzone-1' pts/3] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-1:~# ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 net0/v4 static ok 10.134.79.241/24 lo0/v6 static ok ::1/128 net0/v6 addrconf ok fe80::8:20ff:fe7a:7b0f/10 root@webzone-1:~# dladm show-link LINK CLASS MTU STATE OVER net0 vnic 1500 up ? root@webzone-1:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID net0 ? 1000 2:8:20:7a:7b:f random 0 root@webzone-1:~# ping 10.134.79.1 10.134.79.1 is alive root@webzone-1:~# exit logout [Connection to zone 'webzone-1' pts/3 closed]
如清单 5 所示,已经针对该区域的自动 VNIC 配置了 IP 地址。尽管可以使用 dladm 命令查看 VNIC 信息,但要注意,从该区域内部看不到全局区域网络信息的其余部分。最后,ping 默认路由器以确保网络工作正常,然后退出该区域。
现在来配置 webzone-2 和 backupzone。因为区域非常容易配置,且默认情况下会为每个区域创建一个自动 VNIC,所以只需几条命令即可完成此任务。这次,我们将所需参数直接传递给 zonecfg,而不使用交互式方法:
root@global:~# zonecfg -z webzone-2 "create; set zonepath=/zones/webzone-2" root@global:~# zonecfg -z backupzone "create; set zonepath=/zones/backupzone" root@global:~# zoneadm -z webzone-2 install (output omitted) root@global:~# zoneadm -z backupzone install (output omitted)
记住在通过 System Configuration Tool 流程时设置正确的 IP 地址。(若想查看要添加的其他详细信息,请参见创建第一个区域 (webzone-1)。)
webzone-2,使用 IP 地址 10.134.79.242。backupzone,使用 IP 地址 10.134.79.243。从全局区域查看是否已为新建区域添加了相应的自动 VNIC:
root@global:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-1/net0 e1000g0 1000 2:8:20:7a:7b:f random 0 webzone-2/net0 e1000g0 1000 2:8:20:5e:ed:38 random 0 backupzone/net0 e1000g0 1000 2:8:20:45:47:17 random 0
可以看到,现在每个区域都有一个 VNIC 与其相关联。
到目前为止,尚未对这些 VNIC 添加任何带宽控制。我们来看看怎样快速、轻松地控制网络流量。
注:在本节中,将使用 netperf 工具来模拟网络负载。有关如何获得 netperf 的信息,请参见 The Observatory 博客。
开始之前,我们先来分析一下系统的当前状态,以便了解稍后应用带宽限制时的效果。首先在 webzone-1 和 webzone-2 之间发送网络流量。
注:因为 webzone-1 和 webzone-2 的 VNIC 都在相同的虚拟交换机上(参见图 2),这两个区域之间的流量将流过虚拟交换机但从不离开系统。这样可以提供良好的性能。
我们需要 netserver 运行在目标系统上以便 netperf 可以正常工作,因此首先访问 webzone-2,查看 IP 地址,然后启动 netserver,如清单 6 所示。
netserver root@global:~# zlogin webzone-2 [Connected to zone 'webzone-2' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-2:~# cd /shared/Netperf root@webzone-2:/shared/Netperf# ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 wz2_vnic0/v4 static ok 10.134.79.242/24 lo0/v6 static ok ::1/128 wz2_vnic0/v6 addrconf ok fe80::8:20ff:feb1:e2f5/10 root@webzone-2:/shared/Netperf# ./netserver Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC root@webzone-2:/shared/Netperf# exit logout [Connection to zone 'webzone-2' pts/5 closed]
现在,在 webzone-1 中,检查是否可以 ping 通 webzone-2,然后启动 netperf 测试,如清单 7 所示。
netperf root@global:~# zlogin webzone-1 [Connected to zone 'webzone-1' pts/3] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-1:~# cd /shared/Netperf/ root@webzone-1:/shared/Netperf# ping 10.134.79.242 10.134.79.242 is alive root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.242 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 9.99 3950.60 root@webzone-1:/shared/Netperf# exit logout [Connection to zone 'webzone-1' pts/5 closed]
可以看到,吞吐量是 3950 Mb/秒。一个有趣的额外收获是,此值说明将应用程序并列放在同一个系统上各自的 Oracle Solaris 区域中(而不是让这些应用程序分置于不同的系统上)有一个很大的好处。网络流量无需离开系统进入网络,这意味着,与具有 1 Gb 物理网络连接的系统相比(举例来说),您可以实现非常高的吞吐量和非常低的延迟。
现在添加第一个带宽控制。我们的控制对象是与 webzone-1 关联的 VNIC net0。从全局区域查看当前状态,可以看到尚未应用任何带宽限制。
root@global:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-1/net0 e1000g0 1000 2:8:20:7a:7b:f random 0 webzone-2/net0 e1000g0 1000 2:8:20:5e:ed:38 random 0 backupzone/net0 e1000g0 1000 2:8:20:45:47:17 random 0
还可以单独查看 webzone-1 上的 net0 的 maxbw(最大带宽)属性:
root@global:~# dladm show-linkprop -p maxbw webzone-1/net0 LINK PROPERTY PERM VALUE DEFAULT POSSIBLE webzone-1/net0 maxbw rw -- -- --
我们将带宽设置为 400 Mb/秒,如图 2 所示。为此我们使用 zonecfg,如清单 8 所示,使得该带宽限制持久存在,在每次 webzone-1 重新启动后都有效。
webzone-1 的带宽 root@global:~# zonecfg -z webzone-1 zonecfg:webzone-1> select anet linkname=net0 zonecfg:webzone-1:anet> set maxbw=400M zonecfg:webzone-1:anet> end zonecfg:webzone-1> verify zonecfg:webzone-1> commit zonecfg:webzone-1> exit root@global:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-1/net0 e1000g0 1000 2:8:20:7a:7b:f random 0 webzone-2/net0 e1000g0 1000 2:8:20:5e:ed:38 random 0 backupzone/net0 e1000g0 1000 2:8:20:45:47:17 random 0
可以看到,该带宽限制未得到动态应用,因此需要重新启动 webzone-1:
root@global:~# zoneadm -z webzone-1 shutdown root@global:~# zoneadm -z webzone-1 boot root@global:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-2/net0 e1000g0 1000 2:8:20:5e:ed:38 random 0 backupzone/net0 e1000g0 1000 2:8:20:45:47:17 random 0 webzone-1/net0 e1000g0 400 2:8:20:7a:7b:f random 0
注:还可以通过从全局区域使用 dladm 设置 webzone-1/net0 上的 maxbw 属性来设置对 webzone-1 VNIC 的限制,无需重新启动区域。在 webzone-1 重新启动之前该设置将一直有效,重新启动后 webzone-1 配置会重新生效。
现在可以看到,因为应用了带宽限制,webzone-1/net0 的虚拟链路速度为 400 Mb。
再次重复 netperf 测试并查看结果。我们没有停止 webzone-2 中的 netserver,这样只需在 webzone-1 中重新运行测试的客户端,如清单 9 所示。
netperf 测试 root@global:~# zlogin webzone-1 [Connected to zone 'webzone-1' pts/3] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-1:~# cd /shared/Netperf/ root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.242 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 10.03 425.17 root@webzone-1:/shared/Netperf# exit logout [Connection to zone 'webzone-1' pts/3 closed]
我们已经成功将进入 webzone-1 的所有流量的吞吐量限制为 400 Mb/秒。
注:我们检查了系统内区域到区域的带宽限制,但此限制也适用于进出 webzone-1 的所有流量,包括来自系统外部的流量。
我们通过向系统上的其他 VNIC 添加 maxbw 限制来完成带宽限制任务。如图 2 中所见,需要将 webzone-2 的 maxbw 设置为 400 Mb,并将 backupzone 的 maxbw 设置为 200 Mb。这是模拟将 1 Gb 的物理链路拆分为较小的虚拟链路。为此,再次从全局区域使用 zonecfg 并重新启动每个区域以使更改生效,如清单 10 所示。
root@dcsw-79-168:~# zonecfg -z webzone-2 zonecfg:webzone-2> select anet linkname=net0 zonecfg:webzone-2:anet> set maxbw=400M zonecfg:webzone-2:anet> end zonecfg:webzone-2> verify zonecfg:webzone-2> commit zonecfg:webzone-2> exit root@dcsw-79-168:~# zoneadm -z webzone-2 shutdown root@dcsw-79-168:~# zoneadm -z webzone-2 boot root@dcsw-79-168:~# zonecfg -z backupzone zonecfg:backupzone> select anet linkname=net0 zonecfg:backupzone:anet> set maxbw=200M zonecfg:backupzone:anet> end zonecfg:backupzone> verify zonecfg:backupzone> commit zonecfg:backupzone> exit root@dcsw-79-168:~# zoneadm -z backupzone shutdown root@dcsw-79-168:~# zoneadm -z backupzone boot
可以使用 dladm 命令检查更改是否已经实现。
root@dcsw-79-168:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID webzone-1/net0 e1000g0 400 2:8:20:96:dc:ef random 0 webzone-2/net0 e1000g0 400 2:8:20:59:e8:e5 random 0 backupzone/net0 e1000g0 200 2:8:20:8:a6:71 random 0
我们来看看当存在两个带宽限制时会发生什么情况。为此,可以观察 webzone-2 和 backupzone 之间的吞吐量。因为重新启动了区域,我们首先需要在 webzone-2 中再次重新启动 netserver。然后可以登录 backupzone 并从该处运行测试,如清单 11 所示。
root@dcsw-79-168:~# zlogin webzone-2 [Connected to zone 'webzone-2' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-2:~# cd /shared/Netperf/ root@webzone-2:/shared/Netperf# ./netserver Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC root@webzone-2:/shared/Netperf# exit logout [Connection to zone 'webzone-2' pts/5 closed] root@dcsw-79-168:~# zlogin backupzone [Connected to zone 'backupzone' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@backupzone:~# cd /shared/Netperf/ root@backupzone:/shared/Netperf# ./netperf -H 10.134.79.242 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 10.02 209.85 root@backupzone:/shared/Netperf# exit logout [Connection to zone 'backupzone' pts/5 closed]
毫不奇怪,我们可以看到 webzone-2 和 backupzone 的两个带宽限制中的较小者得到应用,因此吞吐量为 200 Mb/秒。
现在停止 webzone-2 中的 netserver,如清单 12 所示。
netserver
root@global:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation SunOS 5.11 11.0 November 2011
root@webzone-2:/shared/Netperf# ps -ef | grep netserver
root 24119 24005 0 15:11:52 pts/5 0:00 grep netserver
root 24013 21495 0 13:12:24 ? 0:00 ./netserver
root@webzone-2:/shared/Netperf# kill 24013
root@webzone-2:/shared/Netperf# ps -ef | grep netserver
root 24126 24005 0 15:12:58 pts/5 0:00 grep netserver
root@webzone-2:/shared/Netperf# exit
logout
[Connection to zone 'webzone-2' pts/5 closed]
数据链路上的带宽限制会影响流经某个 VNIC(举例来说)的所有流量,而对流应用带宽限制让我们可以基于网络数据包属性限制流量。在本例中,我们探讨如何使用 IP 地址属性来限制 webzone-2 和 backupzone 之间的流量。
在本文前面使用的设置中,我们从全局区域应用资源控制,而这次我们将从 Oracle Solaris 区域内部应用资源控制。这体现了网络资源控制的灵活性。您既可以在全局区域级别又可以在非全局区域级别应用控制,即,管理员对系统拥有完全控制,而区域用户对自己的区域拥有完全控制。
首先我们快速检查一下 webzone-2 和 backupzone 之间的性能。这次我们在 backupzone 中启动 netserver,如清单 13 所示。
backupzone 中启动 netserver root@global:~# zlogin backupzone [Connected to zone 'backupzone' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@backupzone:~# cd /shared/Netperf/ root@backupzone:/shared/Netperf# ./netserver Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC root@backupzone:/shared/Netperf# exit logout [Connection to zone 'backupzone' pts/5 closed]
在 webzone-2 中运行 netperf 测试,如清单 14 所示。
webzone-2 中启动 netperf root@dcsw-79-168:~# zlogin webzone-2 [Connected to zone 'webzone-2' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-2:~# cd /shared/Netperf/ root@webzone-2:/shared/Netperf# ./netperf -H 10.134.79.243 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 10.16 199.33 root@webzone-2:/shared/Netperf# exit logout [Connection to zone 'webzone-2' pts/5 closed]
可以看到,VNIC 上的带宽限制仍然存在,所得吞吐量为 200 Mb/秒。
backupzone 中添加流控制并重新测试现在来应用流控制,如上所述。这里我们不需要对所有流量应用带宽限制,只需要限制 webserver-2 和 backupzone 之间的通信流。我们将使用 flowadm 命令和 IP 地址属性 remote_ip,我们可以通过这个属性输入一个远程 IP 地址作为命令生效所依据的属性值。这将在 backupzone 中围绕进出 webzone-2 的流量创建一个流。
root@dcsw-79-168:~# zlogin backupzone [Connected to zone 'backupzone' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@backupzone:~# flowadm show-flow root@backupzone:~# flowadm add-flow -l net0 -a remote_ip=10.134.79.242 webzone-2-flow root@backupzone:~# flowadm show-flow FLOW LINK IPADDR PROTO LPORT RPORT DSFLD webzone-2-flow net0 RMT:10.134.79.242/32 -- -- -- --
关键命令为 flowadm add-flow。我们告诉该命令将其应用于哪个链路 (net0)、其生效所依据的属性 (remote_ip)、该属性的值(webzone-2 的 IP 地址),以及最后,流本身的名称 (webzone-2-flow)。
我们已经创建了流,但还没有对流施以限制。现在我们将 maxbw(最大带宽)设置为 50 Mb。我们使用 show-flowprop 选项来查看可以设置哪些属性,然后使用 set-flowprop 选项来实际设置 maxbw:
root@backupzone:~# flowadm show-flowprop FLOW PROPERTY VALUE DEFAULT POSSIBLE webzone-2-flow maxbw -- -- -- root@backupzone:~# flowadm set-flowprop -p maxbw=50 webzone-2-flow root@backupzone:~# flowadm show-flowprop FLOW PROPERTY VALUE DEFAULT POSSIBLE webzone-2-flow maxbw 50 -- -- root@backupzone:~# exit logout [Connection to zone 'backupzone' pts/5 closed]
您还可以从全局区域查看新创建的流属性。注意,应用流的区域的名称预加在流名称前面:
root@dcsw-79-168:~# flowadm show-flow FLOW LINK IPADDR PROTO LPORT RPORT DSFLD backupzone/webzone-2-flow backupzone/net0 RMT:10.134.79.242/32 -- -- -- -- root@dcsw-79-168:~# flowadm show-flowprop backupzone/webzone-2-flow FLOW PROPERTY VALUE DEFAULT POSSIBLE backupzone/webzone-2-flow maxbw 50 -- --
现在再次从 webzone-2 运行 netperf 测试,如清单 15 所示。(我们知道 netserver 仍运行于 backupzone 中。)
webzone-2 运行 netperf root@dcsw-79-168:~# zlogin webzone-2 [Connected to zone 'webzone-2' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-2:~# cd /shared/Netperf/ root@webzone-2:/shared/Netperf# ./netperf -H 10.134.79.243 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 10.18 51.39 root@webzone-2:/shared/Netperf# exit logout [Connection to zone 'webzone-2' pts/5 closed]
可以看到,我们已经将吞吐量限制为 50 Mb/秒,如流属性中所设置。
webzone-1作为最后一项测试,我们来看看从 webzone-1 执行同一测试情况如何,如清单 16 所示。(我们知道,netserver 仍运行于 backupzone 中。)
webzone-1 运行 netperf root@dcsw-79-168:~# zlogin webzone-1 [Connected to zone 'webzone-1' pts/5] Oracle Corporation SunOS 5.11 11.0 November 2011 root@webzone-1:~# cd /shared/Netperf/ root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.243 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET Recv Send Send Socket Socket Message Elapsed Size Size Size Time Throughput bytes bytes bytes secs. 10^6bits/sec 128000 49152 49152 10.06 202.61 root@webzone-1:/shared/Netperf# exit logout [Connection to zone 'webzone-1' pts/5 closed]
这次结果为 200 Mb/秒。从 webzone-1 到 backupzone 的吞吐量不受对 backupzone 中的流应用的带宽限制的影响。这是因为远程 IP 地址与我们输入的值不匹配,因此不符合流的规则。
本节最后一步:停止 backupzone 中的 netserver,如清单 17 所示。
netserver
root@dcsw-79-168:~# zlogin backupzone
[Connected to zone 'backupzone' pts/5]
Oracle Corporation SunOS 5.11 11.0 November 2011
root@backupzone:~# ps -ef | grep netserver
root 20562 19383 0 09:53:49 ? 0:00 ./netserver
root 20641 20636 0 10:10:53 pts/5 0:00 grep netserver
root@backupzone:~# kill 20562
root@backupzone:~# exit
logout
[Connection to zone 'backupzone' pts/5 closed]
在本文中,我们了解了如何对数据链路和用户定义的流应用带宽限制来作为管理网络流量的一种方式。还了解了数据链路带宽如何限制通过该数据链路的所有流量,而应用于流的带宽限制可以基于网络数据包的特征。这些技术可以单独使用,也可以组合使用,因而您能够创建灵活的受控环境以满足网络资源管理的所有需要。
下面是其他一些资源:
sysconfig 命令配置 Oracle Solaris 11”| 修订版 1.0,2011 年 11 月 4 日 |