Tag Archives: OpenSolaris

Solaris Cluster 3.2 11/09新特性

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。

Posted in Solaris | Tagged , | Leave a comment

通过Crossbow虚拟化技术搭建VLAN

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   在将NIC分配给虚拟机时,可以有有多种选择。最常用的办法就是给每个虚拟机 都分配物理网卡,但这样就失去了节约成本和高可用性的意义。当一个NIC(网卡)出错了,所有建立在这块NIC之上的虚拟机都将不可用,同时,这样还会因 为有限的物理NIC数量来降低配置的可靠性。   一种更好的办法就是首先创建一个link aggregation,与NIC绑定。aggregation然后被虚拟化成多个VNIC并分配给相应的虚拟机,如图三所示。VNIC建立在相应虚拟机 VLAN ID的基础上,当整个VLAN虚拟化过程完成后,仍能保证不同虚拟机之间的正常通信。 图三 两个虚拟的VLAN   我们可以通过以下的命令来创建link aggregation、VNIC,最后建立起虚拟化的VLAN体系结构:   dladm create-aggr -l nxge0 … Continue reading

Posted in Solaris, 虚拟化 | Tagged , , , | Leave a comment

在OpenSolaris使用Crossbow简化QoS配置

  通常配置系统的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 … Continue reading

Posted in Solaris, 虚拟化 | Tagged , , , | Leave a comment

如何在xVM克隆基于ZFS的domain

如果你正在使用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了。

Posted in Solaris, 虚拟化 | Tagged , , | Leave a comment

让Solaris、OpenSolaris作为xVM的Dom0

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 $ … Continue reading

Posted in Solaris, 虚拟化 | Tagged , , | Leave a comment

让Solaris 10作为zone运行于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等信号的处理,以防止段错误的出现。

Posted in Solaris, 虚拟化 | Tagged , , | Leave a comment

在OpenSolaris 2009.06共享ZFS文件系统

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   ""

Posted in Solaris | Tagged , , | Leave a comment

ZFS snapshot高级篇之快照备份

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    … Continue reading

Posted in Solaris | Tagged , | Leave a comment

如何远程使用chime

在《OpenSolaris 2009.06的DTrace GUI工具——Chime》一文中介绍了Chime这个可视化的DTrace监控工具,本文将介绍如何在C/S结构上远程使用Chime工具。 在服务器端运行chime的命令如下: haiou@opensolaris:~$ chime server Listening for remote DTrace consumers on port 5088 Press the Enter key to stop the server. 在客户端连接服务器: chime 192.168.203.234 这时,会有一个Java RMI相关的小问题导致连接失败,错误信息如下图所示: 有两种方法来解决这个问题: 一是把你的服务器IP地址添加到/etc/hosts里,然后重启chime服务器,添加的内容如下: 127.0.0.1 opensolaris opensolaris.local localhost loghost 192.168.203.234 opensolaris 同时,你也可以在服务器上编辑/opt/OSOL0chime/bin/chime这个脚本文件,使它包括JVM属性,具体属性信息如下所示: JMX_FLAGS="${JMX_FLAGS} -Djava.rmi.server.hostname=192.168.203.234" … Continue reading

Posted in Solaris | Tagged , | Leave a comment

OpenSolaris 2009.06的DTrace GUI工具——Chime

什么是chime? 它是每个OpenSolaris的用户都应该装的工具,因为它为DTrace这个强大的系统监控工具提供了一 个友好的图形用户接口,使你即使不懂得使用DTrace也能得到有用的系统性能信息。本文主要介绍如何在OpenSolaris 2009.06上使用chime这个强大的工具。 首先从OpenSolaris官网上下载chime的安装包 http://www.opensolaris.org/os/project/dtrace-chime/install/osol0chime-i386-1.4.pkg.gz; 使用gunzip Downloads/osol0chime-i386-1.4.pkg.gz命令进行解压; 安装chime:pfexec pkgadd –d osol0chime-i386-1.4.pkg 由于安装chime后其命令默认路径为/opt/OSOLOchime/bin/chime,可以使用命令ln –s /opt/OSOLOchime/bin/chime /usr/bin/chime为其创建一个软链接。 使用以下命令可以查看系统中探针(Probes)的数目: haiou@opensolaris:~$ pfexec dtrace -l | wc -l 64303 探针的数目会随着各种新的软件的安装而不断增加,就拿chime来说,它本身就有超过70个探针。 探针的命名主要是以下四部分组成: provider (a library of related probes) module (the module that contains the function) … Continue reading

Posted in Solaris | Tagged , | Leave a comment