简介
作为
Sun信息系统的基石,
Solaris 10目前既可支持
SPARC处理器,同时可以支持
AMD Opteron 和
Intel Xeon处理器的服务器
. Solaris 10上有
600多个新特性,包括了
Dtrace, SMF这些重大的改变,在这里想和大家分享其中一个特性
Solaris Container的一些使用经验。
Solaris Container以前的名字叫
N1网格容器,允许一个
Solaris系统内划分多个分区,每个分别独立运行
Solaris实例,这样的
Solaris实例可多达
8000个
. 和硬件分区不同,
Solaris Containor则是纯粹的软件实现。 在一个机器上划分的多个分区的
Solaris系统,彼此相互隔离,就好像同时拥有多个机器一样,企业可藉此省下可观的硬件 建置及管理成本
, 使硬件得到最有效的利用。
-
简介
-
Solaris Container and Zone 概念
-
Zone daemon
-
Zone file system
-
Zone network
-
Zone status
-
配置
Zone
-
在
Zone中配置资源池
-
资源
Solaris Container and Zone 概念
Solaris Container是由
Resource Manager 和
Zone共同构成。
什么是Resource Manager?
Resource Manager可以让客户在应用中合理地分配系统的资源,比如说
CPU的使用时间,监控系统资源的利用率,必要时可以调整系统资源的分配。
什么是Zone?
同时,
Solaris Container可在同一部机器上包含多达
8000个
Solaris实例,这样的
Solaris 实例叫做
Zone.每个独立的
Zone拥有独立进程虚拟空间、资源分配、用户
. Zone的理想环境
,把一些复杂的应用整合在单一
Zone里面,令到应用的管理和复杂性
,都大大减小。
在充分利用服务器方面
,在市场上有很多办法
. 用户可以选择三种解决方案服务器合并
:
-
Domains and Partitions -- 这些都是基于硬件的解决方案合并
. 这些领域包括
IBM LPARs等等。
-
Virtual Machines -- 基于应用层的解决方案合并,包括
IBM VM、
VMware.
-
Operating System Partitions -- 操作系统间隔
,这是操作系统级别的解决方案
. 其中包括
FreeBSD Jails 和
Linux Vservers.
Solaris Zone是第三种基于操作系统级别的解决方案。
Solaris Zone提供虚拟操作系统
,就像有不同用户和应用的多个独立的
Solaris实例
.
Solaris Zone有
Global Zone和
Non-global Zone之分,
Non-global zone 是由
Global Zone负责建立和管理,每个
Solaris Non-global Zone都有自己的
root用户的密码和其他用户的资料,可以有自己文件系统空间,网络资源,以及只能看见自己的
Zone里面的进程,这样的一种分离制度令到操作系统环境更为安全。通过这种方式,以前需要运行在多部机器上的分布式应用或着是其他的多个应用现在就可以直接运行在同一部机器,不同的
Solaris实例中。
Global Zone和Non-global Zone的对比
每一台服务器上如果运行
Solaris 10, 都必须有一个
Global Zone, Global Zone 包含两个功能:一,它是系统默认的
Zone, 也就是当
Solaris 10刚刚建立在服务器上,默认就有和使用的
Solaris实例;二,它负责全局资源的分配以及配置
,安装,管理和卸载
Non-global Zone。只有
Global Zone是由硬件直接启动,而其他的
Non-global Zone是由
Global Zone负责启动。
Global Zone提供了一个包含所有硬件组件的完整的数据库,另外在这个数据库中,同时还包含了某些特定给
Global Zone使用的信息,比如说
Global Zone的主机名和文件系统表,而
Global Zone是唯一一个可以看到所有设备和文件系统的
Zone.
每一个
Zone, 包括
Global Zone, 都有自己的名字和唯一的数字,这个是
Zone ID,
Global Zone通常使用
Global的名字,而
Non-Global Zone可以由用户自行定义。当
Zone启动时,系统会自动派发一个唯一的数字
Zone ID给
Zone, Global Zone通常是
0,而
Non-global Zone通常是非零的数值,但这些数值可以在你启动
Non-global Zone时改变。
Non-global Zone可以包含从
Global Zone里面分享出来的
Package, 同时,它也可以有自己独立的不是通过
Package方式安装的附加的软件
, 如果是在
Global Zone里面对
Non-global Zone里面进行
Package 安装的话,则在
Global Zone里面就必须要同时拥有这个
Package。如果在
Non-global Zone里面进行安装的话,是可以做到
Package只在
Non-global Zone里面存在的,只需要在
Non-global Zone环境里面用 ”
pkgadd �CG” 命令来加
Package。
Non-global Zone和
Global Zone是共同分享一个
Solaris内核的,但
Non-global Zone彼此之间不会知道互相的存在,在一个
Non-global Zone里面是不可以对另一个
Non-global Zone进行删除,关机,启动等操作的。
-
Zone daemon
Solaris 10 用两个
daemon来对
Zone进行操作:一是
zoneadmd, 另外一个是
zsched.
Zoneadmd是主要的对
zone进行监管的进程,它运行在
Global Zone里面,对每一个
Non-global Zone进行监控,包括运行状态,启动,关机等等。
当
Non-global Zone启动后,系统会有相应的
zoneadmd这样的进程,除非系统原来已经在运行
zoneadmd。
而每一个活动的
Non-global Zone里面都有一个相关的
zsched内核进程,它主要是用来跟踪
Non-global Zone里面的内核线程的活动的。
-
Zone File System
Solaris 10中采用两种通用方式实现
Non-global Zone的根文件系统,一种是
Sparse Root Model, 另一种是
Whole Root Model.
Sparse Root Model是
Non-global Zone的最小化的文件安装模式,在这种模式下,只有部分的
Root Package会安装到
Non-global Zone里面,当然,这里包括了让系统启动所必须的
Package, 其他的
Package是否安装可以由系统管理员自行确定,部分的文件系统以只读共享的模式并存在
Global Zone和
Non-global Zone里面,比如说
/lib, /platform, /sbin, /usr. 在这种模式下,如果一个关键的文件在
Non-global Zone里面被删除,那么只有这个
Non-global Zone被影响,但是,如果这个关键文件是从
Global Zone里面被删除,而导致
Global Zone的操作系统失败的话,那么每个
Non-global Zone的操作系统也会失败,不过还有第三种情况,如果
Global Zone在删除文件后操作系统依然正常,而且
Non-global Zone操作系统也不需要这个文件的话,
Non-global Zone也能同时健在。
Whole Root Model是
Non-global Zone的最大化的文件安装模式,在这种模式下,所有
Solaris Packages都安装到
Non-global Zone下,一但安装完,它们不会受到
Global Zone影响,而文件系统也是在
Non-global Zone里面完全独立拥有,这样做的好处是可以让用户更自由地定义自己的文件系统,具有更好地独立性。
-
Zone networking
我们说每个
Solaris 10的
Non-global Zone在外界看来都是一台独立的服务器,那么自然每一个
Solaris 10的
Non-global Zone都有自己独立的逻辑
IP地址。那么,如果一台机器上它本来具备多张物理网卡的话,我们就可以把每张物理网卡单独地分配给每个
Non-global Zone里面,这样是比较方便容易的,但是如果当机器上只有一张物理网卡,我们是否又可以做到分配不同的逻辑
IP地址给不同的
Non-global Zone呢?答案是肯定的,比如说你的机器上只有一张物理网卡
, 它在
Global Zone里面是
ce0, 那么当你建立
Non-global Zone时启动逻辑
IP地址时,系统可以自动为你分配
ce0:1给这个
Non-global Zone, 然后启动相应逻辑
IP地址,而当你建立其他的
Non-global Zone时,系统又可以为你建立
ce0:2, ce0:3 。。。以此类推下去,那么,你的多个
Non-global Zone就可以拥有不同的逻辑
IP地址,只不过它们所有的物理网络
traffic都是发生在同一张物理网卡上。
你可以用
zonecfg配置
Non-global zone在启动时自动
plumb网卡和启动逻辑
IP地址,如果你不想这样做的话,你可以选择用
ifconfig命令在
Non-global zone运行时启动或改动逻辑
IP地址。
-
Zone status
你可以用
zoneadm来查看每个
zone的状态,这里要注意的是,
Non-global基本上和
Global Zone的行为是一致的,但它们没有
power-on self-test (POST)和
OpenBoot Programmable Read-Only Memory (OBP),这个我想应该也是
Non-global Zone启动时非常快速的其中一个原因吧。
那么用
zoneadm可以打印出
zone的哪些状态呢,它们包括:
-
Undefined �C 当
Non-global Zone的配置还没有完成或者还没放置到数据库时的状态。
-
Configured �C Non-global Zone配置完成并且放置到数据库中
-
Incomplete -- Non-global Zone 过渡状态,在安装或卸载进行状态中。
-
Installed -- Non-global Zone安装完毕。
-
Ready �C Non-global Zone可以随时被启动,
zsched进程被启动,网卡已经被
plumb, 文件系统被
Mount上。
-
Running �C Non-global Zone 正在正常运行,相应的
Non-global Zone里面的进程都已经被启动。
-
Shutting down and Down �C Non-global Zone 正在关机和呈现关机状态。
配置Non-global Zone
当你决定要建立
Non-global Zone更好地利用硬件资源时,你应该详细地制作计划和考虑所有涉及的因素和部件,它们包括:
-
Non-global Zone的名字
-
Non-global Zone的安装路径
-
Non-global Zone 的网络资源
-
Non-global Zone 的文件系统
-
Non-global Zone 的硬件设备
名字,安装路径,网络都是比较好解决的,系统硬件资源的合理分布我们稍后讨论,我们来看看文件系统,通常地,如果我们采用
sparse root model模式安装的话,大概需要
100MB的空闲的文件系统空间来安装标准的
Solaris Package, 在默认情况下,所有在
Global Zone里面有的
Package都会安装到
Non-global Zone里面,所以文件系统空间需要加大,当然,你可以通过制定
Inherit-pkg-dir来指定安装的
Package.
好,知道这些后,我们来开始建立
Non-global Zone,以下是做好的一个例子
, 基本上建立
Non-global Zone都需要使用
Global Zone root用户的权限
:
A)首先我们要用
zonecfg命令来配置
Non-global Zone, zonecfg是一个交互式的命令,我们在
Solaris操作系统中的终端开始操作。