在 OpenSolaris 上安装和配置 Xen

OpenSolaris 的一个杀手级应用就是 ZFS,很多人也是为了 ZFS 而 ”不得不“ 用 OpenSolaris/Solaris,虽然现在 FreeBSD 上也有 ZFS 的移植,但不是很稳定。ZFS 把存储管理(volume management)和文件系统(file system)两个功能结合在一起,提供了一种全新的存储管理方式,磁盘管理简单,想增加磁盘加到 pool 里就可以了;基于事务,保证数据完整、一致;自动修复,没有 fsck 的痛苦;自由伸缩,自由增减磁盘;快照,轻松而快速地创建快照;海量存储,几乎无限的存储容量等这些优点使得 ZFS 很适合做存储、文件服务器。这也是 VPSee 想用 OpenSolaris 做 dom0 的一个主要原因,ZFS 将会给 domUs 的备份、扩展带来极大方便,现在正在测试,将来会用 ZFS 来存储 10GB×2×400=8TB 的虚拟机镜像(400个人,每个人2种桌面系统 ubuntu 和 windows,每种系统占用 10GB)。下面的安装步骤和配置过程基于 OpenSolaris 2009.06 版本,Ubuntu,Debian 和 CentOS 版本可以分别看这里:在 Ubuntu 上安装和配置 Xen在 Debian 上安装和配置 Xen在 CentOS 上安装和配置 Xen,NetBSD 版本参看:在 NetBSD 上安装和配置 Xen.

安装 xVM

Sun 把 Xen 移植到 OpenSolaris 后改叫 xVM. 首先创建一个单独的启动环境,这一步不是必须的:

# beadm create -a -d xvm xvm

安装必要的软件包:

# beadm mount xvm /tmp/xvm-be 
# pkg -R /tmp/xvm-be install SUNWvirt-manager SUNWxvm SUNWvdisk SUNWvncviewer 
# beadm umount xvm

安装成功后,检查 Xen 内核是否已经加到 grub 启动文件里:

# vi /rpool/boot/grub/menu.lst

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

# bootadm list-menu
the location for the active GRUB menu is: /rpool/boot/grub/menu.lst
default 1
timeout 2
0 OpenSolaris 2009.06
1 xvm

打开 xVM 服务:

# svcadm enable -r xvm/virtd ; svcadm enable -r xvm/domains

重启系统后看一下 Xen 的内核(i86xpv)以及 xend 是否启动:

# uname -a
SunOS vpsee 5.11 snv_111b i86pc i386 i86xpv

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1879     2     r-----     24.0

创建和安装 guest

用 zfs 工具创建一个 volume 保存 guest 操作系统的 image:

# zfs create -o compression=on -V 5G rpool/vm

# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
...
rpool/vm               5G   222G    16K  -
...

# ls -l /dev/zvol/dsk/rpool/
total 3
...
lrwxrwxrwx 1 root root 35 Oct 28 09:56 vm->../../../../devices/pseudo/zfs@0:3c
...

从 ISO 文件(osol-0906-x86.iso)安装 OpenSoaris Guest 操作系统,注意这里 -p 选项是 paravirtualized 安装,paravirtualized 不能安装 windows:

# virt-install --nographics -p -r 1024 -n vm01 -f /dev/zvol/dsk/rpool/vm \
-l /export/home/vpsee/osol-0906-x86.iso

要安装 windows 需要使用 fully virtualized 选项并且要有 CPU 的支持(Intel VT or AMD V)。服务器上面通常没有图形界面,所以图形化安装 windows 需要打开 vnc 服务,并给 vnc 设置一个密码,然后从 vnc client 登录后就可以看到 windows 的安装界面了:

# svccfg -s xvm/xend setprop config/vnc-listen = astring: \"0.0.0.0\"
# svccfg -s xvm/xend setprop config/vncpasswd = astring: \"password\"

# virt-install -v --vnc -n vm02 -r 512 -f /dev/zvol/dsk/rpool/vm \
-c /export/home/vpsee/windowsxp.iso --os-type=windows

进入 guest

Guest 安装成功后就可以登进去了:

# xm console vm01

如果要退出 guest 的话,用 Ctrl + ] 就会回到 host。

Troubleshooting

ZFS 很容易就耗光 dom0 的可用内存,所以要对 ZFS ARC 的内存使用做限制,如下设定最大可用内存为 256MB:

# vi /etc/system
...
set zfs:zfs_arc_max = 0x10000000

限制 dom0 内存也对系统的安全有所帮助,在 gurb/menu.lst 加一行可以设定 Xen dom0 的最大可用内存为 1GB:

# vi /rpool/boot/grub/menu.lst
...
kernel$ /boot/$ISADIR/xen.gz dom0_mem=1024M
...

评论 (1 Comment)

  1. @vpsee
    请教vpsee,你目前有将ZFS应用在生产环境吗?硬件设备如何选型的?

发表评论