本节讨论可以配置的必需区域组件和可选区域组件。区域配置数据中还提供了附加信息。
必须为区域选择名称和路径。
autoboot 属性设置决定在引导全局区域时是否自动引导区域。区域服务,svc:/system/zones:default 也必须启用。
如果按第 13 章所述在系统中配置了资源池,则可在配置区域时使用 pool 属性将该区域与其中一个资源池相关联。
从 Solaris 10 8/07 发行版开始,如果尚未配置资源池,您仍可以使用 dedicated-cpu 资源指定在非全局区域运行时将系统处理器的某个子集专用于该非全局区域。系统将动态创建一个临时池,以便在区域运行时使用。根据 zonecfg 的指定,池配置将在迁移期间进行传播。
使用通过 pool 属性设置的永久池的区域配置与通过 dedicated-cpu 资源配置的临时池不兼容。只能设置这两个属性中的其中一个。
dedicated-cpu 资源可指定在非全局区域运行时应将系统处理器的某个子集专用于该非全局区域。在引导区域时,系统将动态创建一个临时池,以便在区域运行时使用。
根据 zonecfg 的指定,池设置将在迁移期间进行传播。
dedicated-cpu 资源可为 ncpus 以及 importance(可选)设置限制。
指定 CPU 数目或指定一个范围(如 2–4 个 CPU)。如果指定一个范围(因为需要动态资源池行为),则还应执行以下操作:
设置 importance 属性。
启用 poold 服务。有关说明,请参见Solaris 10 11/06 及更高版本:如何使用 svcadm 启用动态资源池服务。
如果使用 CPU 范围来获取动态行为,还要设置 importance 属性。importance 属性是可选属性,用来定义池的相对重要性。仅当为 ncpus 指定了范围并且使用由 poold 管理的动态资源池时,才需要此属性。如果 poold 未运行,则会忽略 importance。如果 poold 正在运行并且未设置 importance,那么 importance 将缺省设置为 1。有关更多信息,请参见pool.importance 属性约束。
capped-cpu 资源与 dedicated-cpu 资源不兼容。cpu-shares rctl 与 dedicated-cpu 资源不兼容。
capped-cpu 资源对某一项目或区域可占用的 CPU 资源量设立绝对的细粒度限制。在与处理器集结合使用时,CPU 上限将限制某一处理器集内的 CPU 使用。capped-cpu 资源有一个 ncpus 属性,该属性是一个正小数,小数点右侧有两位。该属性与 CPU 的单位相对应。此资源不接受范围值,但接受小数。指定 ncpus 时,值为 1 表示某个 CPU 的 100%。值为 1.25 表示 125%,因为 100% 对应于系统中的一个 CPU。
capped-cpu 资源与 dedicated-cpu 资源不兼容。
可以使用公平份额调度器 (fair share scheduler, FSS),根据区域中各工作负荷的重要性控制可用 CPU 资源在区域之间的分配。这种工作负荷重要性通过您为每个区域分配的 CPU 资源份额数来表示。即使您没有使用 FSS 来管理区域之间的 CPU 资源分配,您也可以将区域的调度类设置为使用 FSS,以便您可为区域中的项目设置份额。
在显式设置 cpu-shares 属性时,公平份额调度器 (fair share scheduler, FSS) 将用作该区域的调度类。但是,在此情况下使用 FSS 的首选方法是通过 dispadmin 命令将 FSS 设置为系统缺省的调度类。这样,所有区域都将从获取系统 CPU 资源的公平份额中受益。如果未为区域设置 cpu-shares,区域将使用系统缺省的调度类。以下操作可为区域设置调度类:
在 Solaris 10 8/07 发行版中,可以在 zonecfg 中使用 scheduling-class 属性来为区域设置调度类。
可以通过资源池功能为区域设置调度类。如果区域与 pool.scheduler 属性设置为有效调度类的池相关联,则缺省情况下区域中运行的进程会以该调度类运行。请参见资源池介绍和如何将池与调度类关联。
如果设置了 cpu-shares rctl,但未通过其他操作将 FSS 设置为区域的调度类,则 zoneadmd 将在区域引导时将调度类设置为 FSS。
如果未通过其他任何操作设置调度类,区域将继承系统的缺省调度类。
请注意,您可以使用 priocntl(1) 手册页中所述的 priocntl,在不更改缺省调度类和不重新引导的情况下将正在运行的进程移至其他调度类。
capped-memory 资源可为 physical、swap 和 locked 内存设置限制。每个限制均为可选项,但至少要设置一个限制。
如果计划在全局区域中使用 rcapd 为区域设置内存上限,请确定此资源的值。rcapd 将 capped-memory 资源的 physical 属性用作区域的 max-rss 值。
capped-memory 资源的 locked 属性是用于设置 zone.max-locked-memory 资源控制的首选方法。
应用程序通常不会锁定大量内存,但是如果已知道区域的应用程序会锁定内存,则您可能会决定设置锁定内存。如果区域信任是一个需要关注的问题,还可以考虑将锁定内存上限设为系统物理内存的百分之十,或区域物理内存上限的百分之十。
有关更多信息,请参见第 10 章、第 11 章和如何配置区域。要临时为区域设置资源上限,请参见如何为区域指定临时资源上限。
引导区域时,将在其中自动设置并放置通过 zonecfg 命令配置的用于提供网络连接的区域网络接口。
Internet 协议 (Internet Protocol , IP) 层可接受和传送网络包。该层包括 IP 路由、地址解析协议 (Address Resolution Protocol, ARP)、Internet 协议安全体系结构 (Internet Protocol Security Architecture, IPsec) 和 IP 过滤器。
可用于非全局区域的 IP 类型有两种:共享 IP 和专用 IP。共享 IP 区域可共享网络接口,专用 IP 区域必须具有一个专用网络接口。
有关每种类型中 IP 功能的信息,请参见共享 IP 非全局区域中的联网和Solaris 10 8/07:专用 IP 非全局区域中的联网。
共享 IP 区域是缺省类型。该区域必须有一个或多个专用 IP 地址。共享 IP 区域可与全局区域共享 IP 层配置和状态。如果以下两个条件同时成立,则区域应该使用共享 IP 实例:
区域将连接到相同的数据链路,即,区域位于与全局区域相同的 IP 子网或子网上。
您不想使用专用 IP 区域提供的其他功能。
使用 zonecfg 命令可为共享 IP 区域分配一个或多个 IP 地址。数据链路名称也必须在全局区域中配置。
这些地址与逻辑网络接口关联。可以从全局区域中使用 ifconfig 命令来在运行的区域中添加或删除逻辑接口。有关更多信息,请参见共享 IP 网络接口。
专用 IP 区域具有其自己的与 IP 相关的状态。
这包括可以在专用 IP 区域中使用下列功能:
ndd,用于设置 TCP/UDP/SCTP 和 IP/ARP 级别按钮
IP 安全 (IP security, IPsec) 和 Internet 密钥交换 (Internet Key Exchange, IKE),可自动提供用于 IPsec 安全关联的验证加密材料
使用 zonecfg 命令可为专用 IP 区域分配其自己的数据链路集合。使用 net 资源的 physical 属性,可为该区域指定一个数据链路名称,如 xge0、e1000g1 或 bge32001。没有设置 net 资源的 address 属性。
注意,通过分配的数据链路,可使用 snoop 命令。
可以将 dladm 命令与 show-linkprop 子命令一起使用,以显示正在运行的专用 IP 区域的数据链路分配。可以将 dladm 命令与 set-linkprop 子命令一起使用,以将其他数据链路分配给正在运行的区域。有关用法示例,请参见Solaris 10 8/07:在专用 IP 非全局区域中管理数据链路。
在正在运行的专用 IP 区域内,ifconfig 命令可用于配置 IP,包括添加或删除逻辑接口。通过使用 sysidcfg(4) 中所述的 sysidtools,可以按全局区域的设置方式对区域中的 IP 配置进行设置。
专用 IP 区域的 IP 配置仅可在全局区域中使用 zlogin 命令进行查看。以下是一个示例。
global# zlogin zone1 ifconfig -a |
在共享 IP 区域中,此区域中的应用程序(包括超级用户)不能发送带有源 IP 地址的包,只能发送通过 zonecfg 实用程序分配给该区域的包。此类型的区域不能发送和接收任意数据链路(第 2 层)包。
但是,对于专用 IP 区域,zonecfg 会将指定数据链路的一切权限都授予该区域。因此,专用 IP 区域中的超级用户可以通过这些数据链路发送欺骗型包,就像可以在全局区域中发送一样。
共享 IP 区域总是与全局区域共享 IP 层,而专用 IP 区域总是有其自己的 IP 层实例。共享 IP 区域和专用 IP 区域都可在同一计算机中使用。
通常,在区域中挂载的文件系统包括:
初始化虚拟平台时挂载的文件系统集合
在应用程序环境本身中挂载的文件系统集合
例如,这可以包括以下文件系统:
在区域的 /etc/vfstab 文件中指定的文件系统
AutoFS 挂载和 AutoFS 触发的挂载
区域管理员明确执行的挂载
将对在应用程序环境中执行的挂载设定特定限制。这些限制可防止区域管理员拒绝为系统的其余部分提供服务,或者对其他区域产生不良影响。
在区域中挂载特定的文件系统时存在安全限制。其他文件系统在区域中挂载时会显示出特殊行为。有关更多信息,请参见文件系统和非全局区域。
zonecfg 命令使用与规则匹配的系统来指定应在特定区域中出现的设备。与其中一个规则匹配的设备包括在区域的 /dev 文件系统中。有关更多信息,请参见如何配置区域。
您可以设置非全局区域的 hostid 属性,该属性与全局区域的 hostid 属性不同。这将在使用物理转换为虚拟功能将物理计算机整合到区域时完成。现在,位于区域内的应用程序可能取决于原始 hostid,并且可能无法更新应用程序配置。有关更多信息,请参见资源和属性类型。
全局管理员可以为区域设置区域范围的特权资源控制。区域范围的资源控制可限制区域内所有进程实体总的资源使用情况。
使用 zonecfg 命令同时为全局区域和非全局区域指定这些限制。请参见如何配置区域。
从 Solaris 10 8/07 发行版开始,设置区域范围资源控制的首选的、更简单的方法是使用属性名称,而不是使用 rctl 资源。
Solaris 10 5/08: zone.cpu-cap 资源控制用于对某个区域可占用的 CPU 资源量设置绝对限制。值 100 表示将一个 CPU 的 100% 用作 project.cpu-cap 设置。值 125 表示 125%,因为在使用 CPU 上限时,100% 对应于系统中的一个 CPU。
设置 capped-cpu 资源时,可以使用小数来表示单位。该值对应于 zone.capped-cpu 资源控制,但设置减小 100 倍。设置为 1 等效于资源控制设置 100。
zone.cpu-shares 资源控制可以对区域的公平份额调度器 (fair share scheduler, FSS) CPU 份额数设置限制。CPU 份额首先分配给区域,然后在区域内的项目之间进一步分配,如 project.cpu-shares 项中所述。有关更多信息,请参见在安装了区域的 Solaris 系统上使用公平份额调度器。此控制的全局属性名称是 cpu-shares。
zone.max-locked-memory 资源控制对可用于区域的锁定物理内存量加以限制。区域中各项目之间的锁定内存资源分配可通过 project.max-locked-memory 资源控制来控制。有关更多信息,请参见表 6–1。
zone.max-lwps 资源控制通过禁止一个区域中有过多 LWP 影响其他区域,来增强资源隔离功能。对此区域中项目的 LWP 资源的分配可使用 project.max-lwps 资源控制进行控制。有关更多信息,请参见表 6–1。此控制的全局属性名称是 max-lwps。
zone.max-msg-ids、zone.max-sem-ids、zone.max-shm-ids 和 zone.max-shm-memory 资源控制可用于限制区域中的所有进程使用的 System V 资源。对区域中项目的 System V 资源的分配可使用这些资源控制的项目版本来进行控制。这些控制的全局属性名称是 max-msg-ids、max-sem-ids、max-shm-ids 和 max-shm-memory。
zone.max-swap 资源控制可限制区域中的用户进程地址空间映射和 tmpfs 挂载所占用的交换空间。prstat -Z 的输出将显示一个 SWAP 列。报告的交换是区域进程和 tmpfs 挂载所使用的总交换量。此值有助于监视每个区域预留的交换空间,可用于选择适当的 zone.max-swap 设置。
表 17–1 区域范围的资源控制
控制名称 |
全局属性名称 |
说明 |
缺省单位 |
所用值 |
---|---|---|---|---|
zone.cpu-cap |
Solaris 10 5/08:此区域可用的 CPU 资源量的绝对限制。 |
数量(CPU 数目),以百分比表示 注 – 设置 capped-cpu 资源时,可以使用小数来表示单位。 | ||
zone.cpu-shares |
cpu-shares |
此区域的公平份额调度器 (fair share scheduler, FSS) CPU 份额数。 |
数量(份额) | |
zone.max-locked-memory |
区域可用的锁定物理内存的总量 如果将 priv_proc_lock_memory 指定给某个区域,请考虑同时设置此资源控制,以防止该区域锁定所有内存。 |
大小(字节) |
capped-memory 的 locked 属性. |
|
zone.max-lwps |
max-lwps |
此区域可同时使用的最大 LWP 数。 |
数量 (LWP) | |
zone.max-msg-ids |
max-msg-ids |
此区域允许的最大消息队列 ID 数。 |
数量(消息队列 ID) | |
zone.max-sem-ids |
max-sem-ids |
此区域允许的最大信号量 ID 数。 |
数量(信号量 ID) | |
zone.max-shm-ids |
max-shm-ids |
此区域允许的最大共享内存 ID 数。 |
数量(共享内存 ID) | |
zone.max-shm-memory |
max-shm-memory |
此区域允许的系统 V 共享内存总量。 |
大小(字节) | |
zone.max-swap |
可用于此区域的用户进程地址空间映射和 tmpfs 挂载的交换空间总量 |
大小(字节) |
capped-memory 的 swap 属性 |
可以使用 prctl 命令为正运行的进程指定这些限制。如何使用 prctl 命令在全局区域中设置 FSS 份额中还提供了一个示例。通过 prctl 命令指定的限制不是持久的。在重新引导系统后,此限制将失效。
引导区域时,配置中包括安全权限的缺省集合。这些权限被视为安全权限,因为它们可以阻止区域中的特权进程影响系统中其他非全局区域或全局区域中的进程。您可使用 zonecfg 命令执行以下操作:
将权限添加至缺省权限集,需要了解此类更改可能允许一个区域中的进程通过控制全局资源来影响其他区域中的进程。
从缺省权限集中删除权限,需要了解此类更改可能会阻止某些进程正常运行(如果这些进程要求具有特定权限才能运行的话)。
目前,有些权限不能从区域的缺省权限集中删除,还有一些权限不能添加到缺省权限集中。
有关更多信息,请参见非全局区域中的权限、如何配置区域和 privileges(5)。
您可以使用 attr 资源类型为区域添加注释。有关更多信息,请参见如何配置区域。