开源虚拟桌面系统 Ulteo OVD

我们几年前用 Solaris + SunRay Software 实现的类 VDI 系统(不熟悉 SunRay 的小伙伴可看看 SunRay/Sun VDI 和 JavaOne由 SunRay 耗电量想到的),后来改成 CentOS + SunRay Software,SUN 被 Oracle 收购后事情变得复杂起来,Solaris 不再免费,SunRay Software 和 Hardware 貌似都被 Oracle 叫停。我们不得不开始寻找下一个替代品,开源 VDI 选择不多,Ulteo 可能是唯一的一个。

Mandrake Linux 的创始人 Gaël Duval 离开 Mandriva 公司后,开发了一套开源虚拟桌面(Open Virtual Desktop, OVD)系统 Ulteo,允许用户在任何设备上通过浏览器运行(远程服务器上的)Linux 或 Windows 应用程序(不过浏览器需要有 Java 的支持)。虽然 Ulteo 叫它 OVD,实际上就是我们通常所说的桌面虚拟化 VDI.

Ulteo 这个开源桌面虚拟化产品包括了一些新特性,比如:新的 Web 门户风格模块(Web Portal OVD module),可以让远程应用程序独占一个本地浏览器窗口,看上去像这个程序运行在本地一样;Ulteo 支持多个认证服务,比如可以很好的和我们内部的 LDAP 服务器连接起来,不用另外创建用户登陆;用户之间可以共享文件、文件夹;可以定制应用程序组和用户组,允许不同的用户使用不同的程序等等。

Ulteo OVD 安装很容易,可以作为独立的软件安装在现有的系统上(支持 Ubuntu/RHEL/CentOS/SUSE Linux Enterprise Server/Windows Server);可以下载已经定制好的 Ulteo OVD DEMO DVD 刻盘后安装,或者更懒一点,直接下载一个虚拟机镜像 Ulteo OVD DEMO VIRTUAL APPLIANCE(支持 VMWare Player, Citrix XenServer, VirtualBox 和 KVM)运行。

安装完 Ulteo 后看屏幕提示,默认用户名和密码都是 ulteo,如果要改变网络设置的话,可以运行 net-config.sh:

### Ulteo OVD 3.0 ###
With a web browser, you can connect to:
 - http://172.20.1.227/ovd            to launch a user session
 - http://172.20.1.227/ovd/admin      to administrate OVD

This virtual machine is configured to obtain the network configuration
using DHCP. If you don't have a DHCP server available, log as
"ulteo" (password "ulteo") and run:

sudo net-config.sh

To configure the basic network parameters. Reboot after configuration.

ulteo-ovd-3 login:

从客户端的浏览器上输入安装好 Ulteo 的服务器地址(这里的服务器 IP 地址是 172.20.1.227)就会出现 Ulteo 登陆界面,登陆前最好先到 http://172.20.1.227/ovd/admin/ 创建一个新用户。登陆后是标准的 Linux 桌面,运行很流畅:

ulteo ovd

对于那些使用内部 DNS 服务的环境来说 Ulteo 有个 DNS 配置小问题需要解决, 用 ssh 登陆 Ulteo 服务器后发现网络和 DNS 配置(/etc/resolv.conf)都没问题,但是从客户端浏览器登陆 Ulteo 后无法上网。查了一下日志发现 Ulteo 桌面实际上运行在一个 chroot 环境,需要 chroot 进去后修改桌面环境的 /etc/resolv.conf,而不是修改 Ulteo 服务器上的 /etc/resolv.conf):

$ sudo uchroot
[sudo] password for ulteo:
(OVD)root@ulteo-ovd-3:/#

(OVD)root@ulteo-ovd-3:/# vi /etc/resolv.conf
nameserver 192.168.1.80
nameserver 192.168.1.81

修改完成后,在客户端浏览器退出 Ulteo 界面重新登陆就可以了。

SunRay/Sun VDI 和 JavaOne

在今年的 JavaOne 大会上,Sun 为7000多个参会者部署了 SunRay 瘦客户端,每个参会者可以通过150台 SunRay 登录 OpenSolaris 2009.06/Ubuntu 8.10/Windows 7 RC 三种不同的操作系统,Sun 通过 Sun VDI 和 VirtualBox 为用户提供了约21000个虚拟桌面。参会者在注册的时候会领到一张 Smart Card,通过这张卡可以在任意一台 SunRay 上登录自己的桌面系统。

sunray users

VDI 架构

这次 JavaOne 提供了150个 SunRay,设计目标是让400-500个桌面同时运行。大会使用了以下一些服务器和架构:

  • 4台 VDI 服务器,每台配置为 Sun Fire X4450/4 CPUs/64GB RAM;
  • 5台 VirtualBox 服务器,每台配置为 Sun Fire X4450/4 CPUs/6 cores per CPU/64 GB RAM,每台服务器可以应付100个虚拟桌面;
  • 3台存储服务器,每台配置为 Sun Storage 7210 Unified Storage System/2 Opteron CPUs/4 cores per CPU/64GB RAM/48X250GB 3.5 SATA HDD,每台服务器其实可以应付1000个虚拟桌面,但是考虑到很多参会用户来了就启动一个虚拟操作系统查查 Email,然后就关闭虚拟系统走人,这种频繁启动/关闭系统的行为会造成大量 IO,所以用了3台存储服务器来分担负载。

sun vdi architecture

只有2个管理员

21000个虚拟桌面系统 + 12台服务器 + 150台 SunRay,只有2个系统管理员!VPSee 深有体会,现在我们部署了60台 SunRay + 2台服务器后实际只有0.1个系统管理员在管理(相当于一个星期只用半天),比起 PC + Windows 的方案要省钱省力绿色得多。

only 2 system administrators

SunRay 在 GDM 里直接启动 VirtualBox

virtualbox

最近一直在折腾的 SunRay 已经测试和部署完毕,第一批40台 SunRay 客户端已经从 Solaris 服务器切换到 Linux,用户运行正常,服务器负载也较低,性能还不错,按照部署 Sun Ray 服务器的硬件配置要求,只用了一台 SunFire X2200 M2 就搞定了,配置是 AMD Opteron Quad Core 2.7GHz,8GB RAM,等前段时间订购的内存到了以后就升到 16GB.

如果 SunRay 用户想用 Windows 怎么办?有两种方法,一种是进入 Linux 桌面后用 RDP 远程访问 Windows Terminal Server 服务器;还有一种就是做个 Windows 虚拟机,SunRay 用户登录后进入自己的 Windows 虚拟机,这就是接下来要做的 VDI(Virtual Desktop Infrastructure)服务,只要 SunRay 用户打开 SunRay 瘦客户端后,就出现一个操作系统选择界面,选定一个操作系统后就可以登录进自己的想要的虚拟机。现在的问题是 Sun VDI 只支持 Solaris,而且不是免费的,其他支持 SunRay 的 VDI 产品还有 VMware VDI,VMware 虽然开源了客户端 VMware View Client,但是 VMware View(include VMware VDI)不免费。既然没有免费可用的 VDI,VPSee 就决定用其他的方法来模拟 VDI 的效果,无非就是登录 GDM 的时候提供一个可选的操作系统菜单、选择相应的虚拟系统登录嘛。

1、在 GDM 的 Select Session 上增加一个登录选项,注意 /usr/bin/startxp 脚本现在还没有,需要在后面创建。

# vi /usr/share/xsessions/xp.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Windows XP
Comment=My Virtual Windows XP
Exec=/usr/bin/startxp
Icon=
Type=Application

2、下载和安装 VirtualBox,并设置哪个用户可以运行 VirtualBox.

# yum groupinstall "Development Tools"
# yum install kernel-devel

# rpm -ivh VirtualBox-3.0.8_53138_rhel5-1.x86_64.rpm
# /usr/sbin/usermod -a -G vboxusers yourusername

3、在 VirtualBox 上创建一个叫做 myxp 的虚拟机并安装 Windows XP.

4、创建 /usr/bin/startxp 脚本

# vi /usr/bin/startxp

#!/bin/bash
VirtualBox -startvm myxp

$ chmod 755 startxp

5、在 SunRay 上 Log out 后重新登录,在 Select Session 选项里选择 Windows XP 后就登录到虚拟机上了,shutdown 虚拟机后就又回到 GDM 登录界面。按照同样的方法,可以创建 Ubuntu/OpenSolaris 等多个其他操作系统,只要 VirtualBox 支持就行。

select windows xp session

也可以用这种方法在启动 GDM 的时候用 RDP/VNC/NX 等工具连接到远程虚拟机或者远程桌面,比如:

# vi /usr/bin/startrdp

#!/bin/bash
rdesktop 172.16.39.1

$ chmod 755 startrdp

如果想用 VMware 的话,也可以把 VirtualBox 换成 VMware Player,当然 Windows XP 要重新安装在 VMware 上。

vmplayer -X "/home/vpsee/.vmware/Windows XP/Windows XP.vmx"