Solaris Cluster是基于Solaris平台、高可用性和灾难恢复领域的一个非常优秀的解决方案,数十年来一直是该领域的业界领先者。它能有效地保证各种应用服务、本地及分布式数据中心的完整性和高可用性,从而使得Solaris成为一个真正的集群操作系统。
Solaris Cluster 3.2 11/09是Solaris Cluster 3.2的一个升级版本,它继承了Sun公司二十多年来一直秉承的创新理念,不管是在高可用性、灾难恢复、虚拟化,还是在灵活性、易用性等方面都带来了更多 的惊喜。新版本对Solaris Container Clusters以及failover Solaris Container、LDoms等虚拟化方面的功能进行了拓展,在文件系统和卷管理方面提供了更多的选择,并在灾难恢复方面增加了新的复制方案。除了提供 稳定的服务支持外,这个版本还对一些最新的第三方应用软件提供了支持。
Solaris Container集群支持了更多的Oracle解决方案,如Oracle电子商务套件、Siebel CRM 8、单一示例Oracle数据库和Oracle RAC等,并对IPsec、SCTP、故障管理、轮转负载平衡提供了更好的支持,开始支持更多的应用程序和代理,如针对LDoms客户domain的HA Agent这个新的代理, 以及SWIFTAlliance Access& Gateway 6.3这个新版本的应用程序。此外,它还支持日立通用复制软件支持、基于脚本的复制模块插件、MySQL的复制等。
由于Solaris Cluster的各种优良特性,2010年在加拿大温哥华举行的冬季奥运会和残奥会将使用Solaris Cluster来搭建一个信息传播系统,用来支持比赛的时间安排以及比赛结果的实时传递。若要了解更多,可从http://www.sun.com/software/solaris/cluster/get.html下载该版本的Solaris Cluster。



VLAN(Virtual Local Area Network),即"虚拟局域网",是一种将局域网(LAN)设备从逻辑上划分成一个个网段,从而实现虚拟工作单元的数据交换技术。VLAN 的出现,使得管理员可以根据实际需求,把同一物理局域网内的不同用户逻辑地划分成不同的广播域,每一个VLAN都包含一组有着相同需求的PC要或工作站, 与物理上形成的LAN有着相同的属性。由于它是从逻辑上划分,所以同一个 VLAN内的各个PC机或工作站并没有限制在同一个物理范围中,即它们可以在不同物理LAN网段。由于一个VLAN内部的广播和单播流量都不会转发到其他 VLAN中,从而有助于控制流量、减小arp等广播报文的范围、减少设备投资、简化网络管理、提高网络的稳定性和安全性。本文主要介绍如何在OpenSolaris下使用Crossbow虚拟化技术来实现VLAN体系结构。
   物理交换机通过将其端口与特定的VLAN标识相关联,从而实现不同VLAN通信的分离。Crossbow虚拟交换机则将VNIC(虚拟网卡)和VLAN 标识(VID)关联起来,通过MAC地址来对各个VNIC的数据进行分类。同时,虚拟交换机也实现了每个VLAN的广播域,使得标记的广播帧只会传送到与 该VLAN标识匹配的VNIC上。从效率和安全性来看,Crossbow的VLAN实现有两个重要的特性:一是能防止不必要的帧复制,二是能保证帧在 VLAN传输的正确性和完整性。
  图一中有两个独立的子网,并且它们使用同样的IP地址。

图一 两个拥有相同IP的独立子网

  如果能在不更改机器IP配置的前提下将两个子网整合到一起,将不仅能减少成本,而且能增强其服务的可靠性。这两个子网的整合需要做到:
  1. 必须保留现在有的IP地址。因为像防火墙、代理、目录服务等都与IP地址密切相关,重新分配IP地址将会破坏这些服务的可用性。
  2. 整合后必须保证两个子网通信的独立性和无干扰性。
   将两个子网整合到同一物理网络的传统方法是给每个子网分配一个VLAN ID,然后将交换机的端口与相应的子网VLAN ID关联起来。最后,每台机器都连接到正确的端口,如图二所示。但是,整合后机器的数量和与交换机端口的连接数量并未改变。我们也可以使用虚拟化技术来实 现,使用两个虚拟机来代替两台服务器,它们共存于一台服务器上。

图二 两个物理的VLAN

  在 ... (全文...)



  通常配置系统的QoS(Quality of Service)策略是一项非常艰苦的工作。举个例子,假如我们需要将TCP流量控制在1000Mb/s,在Solaris 10上一般使用IPQoS来解决问题,而在Linux上则使用tc技术,但是需要经历定义队列规则、分类、过滤规则等各种复杂的步骤。本文将介绍如何在 OpenSolaris下使用Crossbow来简化QoS配置,分为Solaris zone和Xen两部分。
  首先介绍在Solaris zone里的配置方法。
   在一个zone里使用crossbow来限制带宽的操作非常简单。你仅仅需要创建一个有带宽限额的VNIC(虚拟网卡),并将它分配给相应的zone即 可。举个例子,如果我们要限制一个zone的带宽不超过100Mb/s的话,只需使用以下命令创建一个最大带宽值为100的VNIC:
  dladm create-vnic -p maxbw=100 -l e1000g0 vnic1
  zone创建以后,我们在配置文件中将vnic1作为它的网卡,这样该zone通过vnic1发送和接收的带宽就被限制在100Mb/s了。这个设置是永久的,即使在系统重启后也有效。如果我们要把带宽修改为200Mb/s,可使用以下命令:
  dladm set-linkprop -p maxbw=200 vnic1
  可以使用以下命令查看VNIC和zone的对应情况:
  dladm show-linkprop -p zone vnic1
   LINK  PROPERTY PERM VALUE
   vnic1 zone         rw    zone1
  接下来介绍如何在Xen里配置QoS。
   当使用OpenSolaris作为dom0时,Crossbow可非常方便地实现对domU带宽限额的设置,其配置过程跟在zone上差不多。我们可以 在domU上跑OpenSolaris、Solaris 10、Linux、Windows或其它Xen支持的操作系统,但是带宽的配置过程却与domU上的OS无关。 当Xen上的一个domU被创建后,Crossbow默认会创建一个VNIC并分配给domU。如果要给domU设置带宽限额,就需要显式地创建一个 VNIC,并在domU创建的时候分配给domU。这时就可以通过设置VNIC的maxbw属性来设置domU的带宽限额了,操作如下:
  dladm create-vnic -p maxbw=300 -l e1000g0 vnic1
  把这块新创建的vnic1配置成domU的网卡,并将以下内容包含在domU的template.xml配置文件中即可。同时,使用dladm show-vnic命令可以显示vnic1的MAC地址。
  <interface type=’bridge’>
  <source bridge=’vnic1’/>
  <mac address=’vnic1’s mac address/>
  <script path=’vif-dedicated’/>
  </interface>
  最后使用命令virsh create template.xml来创建domU。
  当我们将Xen domU的带宽限制在300Mb/s后,又需要将其中的100Mb/s用作TCP通信,可以通过以下命令实现:
  flowadm add-flow -p maxbw=100 -a transport=tcp -l vnic1 tcp-flow1

  为了能方便地发现系统的性能瓶颈,Crossbow提供了一些工 ... (全文...)



如果你正在使用ZFS作为根文件系统,你就能利用其snapshot快照机制迅速克隆出相同配置的domain。通过对其根磁盘分区进行克隆,你就能轻松地得到多个相似的domain,而它们的主要差别仅仅是使用的存储空间不同而已。本文将介绍如何利用ZFS的clone技术来创建新的 domain。

首先,我们需要关闭正在运行的domain才能进行克隆,以保持硬盘快照的一致性,命令如下:
xm shutdown -w dom1
当然,你也可以在domain中运行sys-unconfig命令使新的克隆从重新配置开始。
完成以上操作后,我们就可以使用命令zfs snapshot pool/dom1-root@clone
为dom1的根磁盘分区创建一个快照了,再使用命令zfs clone pool/dom1-root@clone pool/dom2-root来克隆一个可写的snapshot快照。
这时如果你使用zfs list命令,应该能看见新创建的snapshot及clone。接下来,我们需要复制dom1的配置文件。使用如下命令将配置文件copy到一个新的文件:
virsh dumpxml domain1 >domain1.xml
cp domain1.xml domain2.xml
对copy的配置文件,至少需要作三处改变。
首先,你需要为克隆的domain重命名,若想命名为dom2,则将<name>dom1</name>更改为<name>dom2</name>即可;
其次,你需要删除UUID这一行,从而让virsh为domain生成一个新的配置文件。删除的部分如下:
<uuid>78cd98b5e7ab16594fa0cf1260826571</uuid>
接下来,我们需要为domain指定新的磁盘分区:
<source dev='/dev/zvol/dsk/export/dom1-root'/>更改为<source dev='/dev/zvol/dsk/export/dom2-root'/>
最后,告诉virsh新domain的存在。
virsh define domain2.xml
这时候,你就可以启动自己克隆的domain了。



Xen是由剑桥大学开发的一个开放源代码的虚拟机管理器,是目前世界上最流行的虚拟机管理器之一,在《Virtualization:Xen and xVM Server》一文中有关于Xen和xVM Server的介绍。Sun公司也推出了自己基于Xen的虚拟化项目xVM,其最根本的区别就是Xen以Linux作为Dom0,而xVM以Solaris或OpenSolaris作为Dom0.本文将介绍如何将Solaris或OpenSolaris配置成xVM的Dom0。

在Solaris 10里已经集成了xVM项目,当你完整安装Solaris 10后,在grub启动时会发现有一个xVM的启动项,这时选择该启动项后Solaris 10就以Dom0的形式运行了。
在OpenSolaris下则需要安装相应的软件包并进行配置,具体过程如下:
如果你的OpenSolaris是build 126或者更新的版本,激活xVM只需要以下几条命令即可:
$ pfexec pkg install xvm-gui
$ pfexec svcadm enable milestone/xvm
$ pfexec reboot

如果是老版本的OpenSolaris,整个安装及配置过程就相对复杂一些。
首先使用命令beadm create -a -d xvm xvm创建一个独立的环境;
接着安装一些相应的软件包,命令如下:
$ pfexec beadm mount xvm /tmp/xvm-be
$ pfexec pkg -R /tmp/xvm-be install SUNWvirt-manager SUNWxvm SUNWvdisk SUNWvncviewer
$ pfexec beadm umount xvm

然后就是对menu.lst文件的修改了,步骤如下:
1.对menu.lst文件运行如下的AWK脚本
$ awk '
/^title/ { xvm=0; }
/^title.xvm$/ { xvm=1; }
/^(splashimage|foreground|background)/ {
if (xvm == 1) next
}
/^kernel\$/ {
if (xvm == 1) {
print("kernel\$ /boot/\$ISADIR/xen.gz")
sub("^kernel\\$", "module$")
gsub("console=graphics", "console=text")
gsub("i86pc", "i86xpv")
$2=$2 " " $2
}
}
{ print }' /rpool/boot/grub/menu.lst >/var/tmp/menu.lst.xvm
2.检查该AWK脚本是否运行正常
$ tail /var/tmp/menu.lst.xvm
#============ End of LIBBE entry =============
title xvm
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/xvm
kernel$ /boot/$ISADIR/xen.gz
module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=text
module$ /platform/i86pc/$ISADIR/boot_archive
#============ End of LIBBE entry =============

3.替换menu.lst文件并重启
$ pfexec cp /rpool/boot/grub/menu.lst /rpool/boot/grub/menu.lst.saved
$ pfexec mv /var/tmp/menu.lst.xvm /rpool/boot/grub/menu.lst
$ pfexec reboot

最后使用命令svcadm enable -r xvm/virtd ; svcadm enable -r xvm/domains启动服务后就能在OpenSolaris上安装并启动新的虚拟机了。



如果dtrace和mdb这些工具运行在OpenSolaris全局zone中,那么这些工具对运行在跑有Solaris 10的zone中的进程来说是无用的,主要是因为Solaris 10和OpenSolaris之间部分调试库的一些不兼容的改变,导致Solaris 10不能作为OpenSolaris的zone正常地运行。同时,由于新版本的OpenSolaris加入了Crossbow等许多非常优秀的特性,让运 行Solaris 10的zone能充分利用OpenSolaris作为全局zone的众多优势,也是非常有必要的。本文将介绍如何解决在OpenSolaris上正常运行 跑有Solaris 10的zone这个技术难题。
解决这个问题最大的难点之一,就是x86平台下Solaris 10的libc对%fs段寄存器的使用。Solaris 10的libc希望X86平台64位处理器的%fs寄存器来存储非0的selector值(如果%fs值为0,那么Solaris 10的_curthread()返回NULL),问题也由此产生了,由于OpenSolaris的内核清空了%fs,而在64位的x86机器上,libc 总是使用%fs来查找当前线程的ulwp_t数据结构,从而使运行Solaris 10的zone不能使用libdoor这些普通的类库和thr_main(3C)等关键libc函数。

整个解决方案比较复杂,因为必须保证在Solaris 10 zone中运行的所有线程开始运行时%fs寄存器的值非零。幸运的是,在Solaris 10和OpenSolaris中只有两个系统调用修改了%fs:SYS_lwp_private和SYS_lwp_create。 SYS_lwp_private是一个libc私有的系统调用,只有在一个进程执行后libc初始化时才被调用一次,用来配置FS段使其段基址在单一线程 ulwp_t结构的开始处。

具体过程如下:

1. Solaris 10的仿真库在s10_lwp_private()实现SYS_lwp_private,它把系统调用传到未改变的OpenSolaris内核,然后调用 thr_main(3C)来测试Solaris10环境下的libc在内核配置%fs后是否运行正常。如果返回-1,那么将调用一个特殊的 SYS_brand系统调用将%fs还原到过去的非零状态。

2. Solaris 10的仿真库在s10_lwp_create()中实现SYS_lwp_create,使得新的线程在 s10_lwp_create_entry_point()而不是在_thrp_setup()中启动。当然,新的线程最终还是必须执行 _thrp_setup(),所以s10_lwp_create()在新线程栈中的预定位置保存_thrp_setup()的地址。 s10_lwp_create_entry_point()调用thr_main(3C)测试当%fs为零时Solaris 10的libc运行是否正常。如果thr_main(3C)返回-1,那么新的线程将调用和s10_lwp_private()一样的SYS_brand 系统调用来恢复%fs。然后,新的线程再从栈中的预定位置读取真正的入口点地址并跳转到入口点。
3. 在运行Solaris 10的zone里保证fork产生的子线程继承其父线程的%fs selector值,从而使父线程即使在调整%fs寄存器后也能保持父子线程的一致性。
4. 同时,还需要考虑对SIGCANCEL等信号的处理,以防止段错误的出现。



ZFS文件系统是由Sun公司开发的第一个128位 的文件系统,也是目前世界上最先进的文件系统,所以被称为“终极文件系统”。由于资源共享已经成为互联网领域的核心内容,服务器及PC机的文件共享也成为 一个非常重要的话题。本文将介绍在OpenSolaris 2009.06上共享ZFS文件系统的几种方式。

第一种方式:

  选择 系统 -> 系统管理 -> 共享的文件夹,添加共享目录或文件并以NFS方式共享。

  可以通过指定主机名、IP地址、网络等来配置允许访问该共享目录或文件的主机,并可设置主机操作权限为只读或读写。

第二种方式:

  使用share命令。

这个命令和在Linux下的使用差不多,在OpenSolaris下使用share命令除了可以共享ZFS文件系统外,还可以共享UFS等其它文件系统。当然,需要修改/etc/dfs/dfstab配置文件。

第三种方式:

  使用ZFS命令,这种方式只能共享ZFS文件系统。

 ZFS 可以通过使用sharenfs 属性来自动共享文件系统,而不必修改/etc/dfs/dfstab 文件。在sharenfs 属性中,如果sharenfs=on,则由zfs控制其自动共享文件系统。如果sharenfs=off 表示文件系统不由ZFS 管理,就跟普通的文件系统共享方式一样,但可通过传统方法(如/etc/dfs/dfstab 文件)来管理。在引导过程中将共享sharenfs 属性不是off 的所有文件系统。你可以通过命令zfs get all查看所有zfs的属性。ZFS设置共享的命令如下:
#zfs set sharenfs=rw=@192.168.203.0/24 rpool/test

#share

-@rpool/test    /test    sec=sys,rw=@192.168.203.0/24   ""



ZFS snapshot是OpenSolaris的一个非常强大的技术,它就像Windows的还原点一样,能让你的系统还原到你想要的状态。在《OpenSolaris下的snapshot及基于zfs的系统恢复》一文中,我对snapshot的使用及恢复做了较详细的介绍,本文将介绍如果对snapshot快照进行备份(包括增量备份),从而来保证数据的完整性。

首先通过一个简单的demo来重温一下snapshot的原理:

1.       在rpool存储池中创建一个test文件系统:

haiou@opensolaris:~# zfs create rpool/test

haiou@opensolaris:~# zfs list

NAME                      USED  AVAIL  REFER  MOUNTPOINT

rpool                    4.52G  1.01G  79.5K  /rpool

rpool/ROOT               3.84G  1.01G    19K  legacy

rpool/ROOT/opensolaris   3.84G  1.01G  3.58G  /

rpool/cifsdemo             99K  1.01G    19K  /rpool/cifsdemo

rpool/export              698M  1.01G    21K  /export

rpool/export/home         698M  1.01G    23K  /export/home

rpool/export/home/haiou   697M  1.01G   391M  /export/home/haiou

rpool/test                 19K  1.01G    19K  /rpool/test

2.       在test文件系统下创建几个新文件:

haiou@opensolaris:/rpool/test# cd /rpool/test

haiou@opensolaris:/rpool/test# echo “How are you?” > f1

//创建一个f1文件,内容为How are you?

haiou@opensolaris:/rpool/test# echo “I am fine” > f2    //创建一个f2文件

3.       接下来为rpool/test文件系统创建一个快照 ... (全文...)