用 duplicity 加密备份 Xen 虚拟机

在我们的 VPS 计划中有备份的附加服务,我们的数据中心能提供多种专业存储备份服务,为了降低成本我们选择的是最简单的 FTP 服务器,大家都知道 FTP 不安全,密码都可以 sniffer 到,把文件直接放在上面毫无秘密可言,太危险,为了保护我们客户的数据和隐私我们决定使用加密工具把虚拟机加密后再备份到 FTP 上,这样就算别人进入到我们的 FTP 服务器也什么都 “看” 不见,也无法删除、修改文件,数据都是 GPG 加密的,还有这个 FTP 服务器只有我们数据中心的人才能访问,与外界隔绝。所以这样既满足了我们备份需求又帮我们大大的降低了成本,如果使用数据中心的专业存储的话成本会高得惊人,那我们就无法提供10美元以下的 VPS 了。

Duplicity 是一个是我们正在用的加密备份工具,采用 rsync 算法和类库实现增量备份,并用 gpg 对数据包加密和签名,支持本地、远程、ftp, ssh/scp, rsync, Amazon S3 等多种存储方式和介质。

首先安装 duplicity:

# yum install duplicity

生成一个 gpg key:

$ gpg --gen-key

$ gpg --list-keys

我们把所有的 Xen 虚拟机镜像都放在一个目录里,然后备份本机的 /home/vpsee/xen 目录到远程机器 172.16.39.2 的 /backup/xen 目录,这样的备份是经过加密的,在远程机器的 /backup/xen 下看不到任何东西:

$ duplicity --encrypt-key="D2CDC262" /home/vpsee/xen/ \ 
ftp://user:[email protected]/backup/xen/

从远程机器 172.16.39.2 的 /backup/xen 目录恢复到本地的 /home/vpsee/restore/ 目录:

$ mkdir /home/vpsee/restore
$ duplicity --encrypt-key="D2CDC262" \
ftp://user:[email protected]/backup/xen/ /home/vpsee/restore/

同样的道理,我们也可以用 scp 来替代 ftp 完成备份的传输,备份操作:

# duplicity --encrypt-key="D2CDC262" /home/vpsee/xen/  \
scp://user:[email protected]/backup/xen/

恢复操作:

# mkdir /home/vpsee/restore
# duplicity --encrypt-key="D2CDC262" \
scp://user:[email protected]/backup/xen  /home/vpsee/restore/
GnuPG passphrase:

删除远程机器上的备份:

# duplicity cleanup ftp://user:[email protected]/backup/xen
GnuPG passphrase:

Deasoft:$9.02 384MB OpenVZ VPS

deasoft

Deasoft 是一家澳大利亚 VPS 公司,域名是2002年注册的,起初提供 hosting 和软件服务,2003年正式注册成为一家公司(Deason Software),并开始主要提供美国的 web hosting 服务(因为当时澳大利亚的网络太贵),并在 BurstNet 和 Pipenetworks 两个数据中心租用服务器。他们能提供 24×7 Email 和短信技术支持,还有每周免费的备份,年付的话会更便宜一些。网站上有详细的联系方式、电话、公司注册信息等,看上去就很正规,这么 “老” 的 VPS 服务商不多见,值得信赖,VPSee 没有用过他们的服务,不过还是推荐一下。VPS 配置如下:

服务器在 Pennsylvania
自制控制面板
384MB Guaranteed RAM,512MB Burst
50GB 硬盘
250GB 带宽
1个 IP
9.02美元

服务器配置:

All our USA VPS Plans are hosted on Quad Core Intel servers.

如何把 File-based 的 Xen 虚拟机转化成 LVM-based 的

今天 SUN(还是习惯叫 SUN)做了一个 workshop,他们做了一个 ppt,宣传了一下他们的产品,提到了 SUN VDI, VMware VDI 应用到 SunRay 上的一些东西。VPSee 关心的不是他们的 ppt,是上个月从他们那里 “骗” 来的设备到了没有。今天收获不错,收到 4台 SUN Fire V20z,1台 SUN Fire X2200 M2,10几个 SunRay 客户机。SUN Fire V20z 是很老的机型,现在已经停产,不过硬件配置还是蛮强劲的,2颗双核 AMD Opteron 2.2 GHz,8GB RAM,2个 73 GB Ultra320 SCSI 硬盘。现在还没有想好服务器做什么用,先玩玩再说~~

sun fire v20z

说正题⋯⋯

Xen 支持多种存储方式,大致可分三类:最普通最直接的文件存储(file storage),本地物理硬盘或者 LVM 存储(physical devices/LVM storage),更高级一点的 NFS、NAS、GNBD、SAN、AoE、iSCSI 网咯存储(network storage)等。这三类存储介质和方法都被我们用到了生产环境,各有各的优点,VPSee 偏向混合使用,有助于我们了解不同技术的特性。

先扫描一下系统,看看系统上的 LVM 是怎么分配的:

# vgscan 
  Reading all physical volumes.  This may take a while...
  Found volume group "vpseexen" using metadata type lvm2

# lvscan 
  ACTIVE            '/dev/vpseexen/root' [6.52 GB] inherit
  ACTIVE            '/dev/vpseexen/swap_1' [9.25 GB] inherit
  ACTIVE            '/dev/vpseexen/home' [116.88 GB] inherit

假设我们要转化的虚拟机镜像是 xen01.img(对应的交换分区文件是 xen01.swap)。首先我们需要在卷组上创建一个逻辑卷用来复制虚拟机镜像(xen01.img),逻辑卷大小和 xen01.img 一样,还需要一个逻辑卷用来复制 swap 文件(xen01.swap):

# lvcreate -L10G -n xen01_root vpseexen
# lvcreate -L512M -n xen01_swap vpseexen

创建成功后就会出现2个新的逻辑卷:

# lvscan 
  ACTIVE            '/dev/vpseexen/root' [6.52 GB] inherit
  ACTIVE            '/dev/vpseexen/swap_1' [9.25 GB] inherit
  ACTIVE            '/dev/vpseexen/home' [116.88 GB] inherit
  ACTIVE            '/dev/vpseexen/xen01_root' [10.00 GB] inherit
  ACTIVE            '/dev/vpseexen/xen01_swap' [512 MB] inherit

接着把虚拟机的镜像内容 dd 到逻辑卷上:

# dd if=/home/vpsee/xen/xen01.img of=/dev/vpseexen/xen01_root
# dd if=/home/vpsee/xen/xen01.swap of=/dev/vpseexen/xen01_swap

修改虚拟机的 Xen 配置文件,guest 和 host 使用相同的 Xen 内核启动:

# vi /etc/xen/xen01

kernel = "/boot/vmlinuz-2.6.26-2-xen-amd64"
ramdisk = "/boot/initrd.img-2.6.26-2-xen-amd64"
vcpus = 1
memory = 256
name = "xen01"
vif = [ '' ]
disk = [
'phy:/dev/vpseexen/xen01_root,sda1,w',
'phy:/dev/vpseexen/xen01_swap,sda2,w' ]
root = "/dev/sda1"
extra = "fastboot"

最后启动拷贝成功的基于 LVM 的虚拟机就可以了:

# xm create xen01

CocoaHost:$5.99 128MB OpenVZ VPS

cocoahost

CocoaHost 提供美国和印度两地的服务器,域名是去年3月份注册的,注册地是美国的亚拉巴马州,服务器托管在 iWeb. 看似很小的一家 VPS Provider 却提供 n 多的业务,从域名托管、共享 hosting、reseller、VPS 到网站开发什么都有,不知道他们怎么顾得过来。他们的服务器硬件配置很强悍,还用的是 Red Hat Linux Enterprise,完全没必要,一个月浪费30美金啊。这家 provider 的老板告知这是一家中国人在马来西亚开的公司,因为 VPSee 也做 VPS business,评价同行是非常不好的行为,所以这里只是给出一般性介绍,不做评论,这也是大家为什么在 10美元以下 VPS 找不到来自中国的 VPS 的原因。VPS 配置如下:

服务器在 USA 或 India
128MB Guaranteed RAM
10GB 硬盘
40GB 带宽
1个 IP
5.99美元

服务器配置:

Intel Xeon processors Single Quad-Core Intel Xeon Processor 5400 3.16GHz, Six ECC DDR-2 667 SDRAM DIMM sockets 24GB of memory, 1TB 7.2k Nearline SAS Hard Disk Drives

获得诺贝尔奖人数最多的国家

在 Rasmussen College 发布的 Nobel Prize Winners by Country 报告中可以看到每个获得诺贝尔的国家以及获奖人数,结果不令人吃惊,大多数都是传统发达国家。获得诺贝尔奖最多的国家是美国,获奖人数远远超过排名第二的英国和第三名德国,差不多占了世界的一半。英国很强悍,一个和广西省差不多大的国家居然有100多位人获奖,看样子很多美剧编剧把剧情里面的顶尖教授安排成英国口音是原因的,比如 Flash Forward 里面那个制造瞬间(Flash)实验的天才是英国人,还有那个 Lie To Me,⋯⋯,我们经常谈论的 Xen VPS 的 Xen 就是来自于剑桥大学。

如果把这个获奖人数和国家的总人口联系起来的话可能会更有参考意义,挪威获奖人数11人(总人口487万),瑞典获奖人数28人(总人口935万),备受战火煎熬的以色列9人(总人口752万),非洲大陆的南非9人(4900万),国土面积只有4万多平方公里的丹麦获奖人数13人(总人口553万)。可以说亚洲国家成绩都不理想,日本有1.27亿人口而只有16人获得诺贝尔奖,获奖密度还没有南非多,中国有6人获奖(包括台湾、香港、以及华人?),新加坡、韩国等貌似重视教育和科技的国家都没上榜。

留给我们的是一个先有鸡还是先有蛋的思考题,发达国家是因为重视科技和教育而变得发达,还是因为发达而投身科教?

openfiler

(以上国家人口国土面积数据来源于 Wikipedia,图片来源于 Nobel Prize Winners by Country

给 WordPress 加上简单的 Gtalk 状态显示

大家可能注意到博客右边的 “用服通知” 增加了我们 Gmail/Gtalk 的状态信息,方便我们的 VPS 用户随时了解我们的在线状态以便提供及时的服务响应。本来想找个 WordPress 插件完成这个简单功能,在网上搜到一个 “GTalk Status to WordPress” 插件,解开一看有点夸张,3个文件加起来1200多行程序,有点 overkill 了,VPSee 只想显示 Gtalk 的基本状态信息,在线还是离线,就一句话的功能。

首先到 http://www.google.com/talk/service/badge/New 页面定制一个 Gtalk chatback badge,如果想偷懒直接用 Google 生成的 HTML 代码嵌到自己的 WordPress 就可以了,就有了一个可显示状态的插件,问题是这个 Gtalk 插件还能聊天,我们只是想显示在线的状态而已,不需要聊天功能。

gtalk chatback badge

把 Google 生成的那段 HTML 代码取出来,只取一部分:

iframe src="需要截取的部分&w=300&h=18" frameborder="0" allowtransparency="true"

然后在 WordPress 的主题文件的适当位置加入下面的 PHP 代码:

// written by vpsee.com
$url = 'http://www.google.com/talk/service/badge/Show?tk=需要截取的部分';
$from_google = file_get_contents($url);
$status = array();
if (preg_match('|img id=\"b\" src=\"/talk/service/resources/([\w]*)|', 
$from_google, $status)) {
    echo $status[1]=='offline'?'离线':'在线';
} else {
    echo 'gtalk error';
}   

嗯,8行代码就搞定,就这么简单。

Fiber Firefly:$7 256MB OpenVZ VPS

fiberfirefly

Fiber Firefly 是 Kerplunc Hosting 的另一牌子,Kerplunc Hosting 还拥有 SuperBytes, Fanatical Host 和 TinyVPS 等几个我们以前介绍过的 VPS 牌子,有点像可口可乐,旗下除了可乐外,还有芬达、雪碧等几个子品牌,不过 VPS 这么小众的产品用不着这样吧~~,Kerplunc 由两个人在2007年创立,2008年开始做 hosting 业务,目前托管10多台服务器,几百个 VPS 客户。官方网站上没有这款 VPS,要访问这个链接才可以看到,服务器在德国,VPS 每天晚上都有镜像备份,配置如下:

服务器在 Nuremberg, Germany
SolusVM 控制面板
256 Guaranteed RAM
20GB 硬盘
5Mbps unmetered
无限带宽
2个 IP
7美元

服务器配置:

All servers are Intel i7s with 12GB of RAM.

2020Hosting:$9 384MB OpenVZ VPS

2020hosting

2020Hosting 这个名字让人容易看成 2012,域名显示是在2005年注册的,不过这家 VPS provider 看上去不像一家 ”老“ provider,进一步搜索发现域名在今年2月份的时候转过手,估计开始 VPS 业务也就2个月吧。他们在 WHT 上推出一个 “50% more” 的优惠,使用优惠码 V2020-40 就可以多得到50% 的内存、硬盘、带宽等。VPS 有7天无条件返款保障,据说 VPS 可以在10分钟内开通,100% 的在线时间保证。VPS 配置如下:

服务器在 New York
SolusVM 控制面板
384 Guaranteed RAM, 512MB Burstable RAM
15GB 硬盘
300GB 带宽
1个 IP
9美元

服务器配置:

All nodes utilize minimum Intel Core i7 processors with minimum 16GB RAM.

SteadCom:$9.98 768MB Xen VPS

steadcom

SteadComWHT 推出半价大优惠,使用优惠码:xenvps10 可以得到50%的永久折扣(50% off for life),优惠到这个月底结束。SteadCom LLC 2009年在 Miami 成立,域名是2007年5月注册的,这家公司业务遍及图标设计,名片设计、网页设计、网站托管、VPS、品牌设计等多个业务,好像什么都做,业务不专可不是一个好信号。他们家的服务器托管在 Los Angeles 的 PacifiCrack 数据中心,VPS 有14天的返款保障,99.999% 的在线时间保证。VPS 配置如下:

服务器在 Los Angeles
768MB RAM
40GB 硬盘
1000GB 带宽
2个 IP
9.98美元

在 Xen 下运行 Openfiler

在我们的 IT 环境中用到了大量 NAS,有专业的 Sun StorageTek NAS 也有淘汰下来的 PC 做的 NAS,我们几乎虚拟化了所有的服务器,唯一没有虚拟化的部分可能就是存储系统,因为虚拟机的 IO(包括磁盘 IO 和网络 IO)性能目前还达不到裸机的水平。Openfiler 是一个的网络存储管理系统,其功能和 FreeNAS 类似,不同的是 Openfiler 基于 Linux 2.6,支持64位,而 FreeNAS 基于 FreeBSD 的(直到最近才支持64位),Openfiler 的功能和 FreeNAS 差不多,都能支持 NAS, SAN, CIFS, NFS, HTT/DAV, FTP, SIMBA, RSYNC, iSCSI 等,Openfiler 能更好的支持 RAID, LVM,不过 FreeNAS 能支持 ZFS(VPSee 对 ZFS 文件系统非常感兴趣,如果 Linux 上有类似的克隆就好了)。

VPSee 想对虚拟机运行存储系统和真实机器运行存储做个对比,看看性能上到底有多大的损失。Openfiler 官方网站上有 VMware ESX Virtual Appliance, XenServer XVA Virtual Appliance, Xen domU Filesystem 等多个预装好的虚拟镜像可以下载。我们选择 Xen 作为运行 Openfiler 的虚拟环境,本来以为 Openfiler 的镜像和 stacklet.com 上面的 Xen 镜像一样直接下载下来就可以用,结果不是这么简单,下载的只是一个文件系统,要自己做一些配置,和徒手安装 Xen domU 的过程差不多。

下载 Openfiler 的 Xen tar 包:

# mkdir -p /xen/openfiler
# cd /xen/openfiler
# wget http://www.rpath.org/rbuilder/downloadImage?fileId=26670

创建一个 LVM 区来存放 Openfiler:

# lvcreate -L 10G -n openfiler XenGroup

在新建的 LVM 上创建 Ext3 文件系统,并作为 Openfiler 虚拟机的 root 根系统:

# mkfs.ext3 /dev/XenGroup/openfiler
# e2label /dev/XenGroup/openfiler root

挂载 root 文件系统后,把下载下来的 openfiler-2.3-x86_64.tar.gz 解压到 /mnt 里面去:

# mount /dev/XenGroup/openfiler /mnt/
# cd /mnt/
# tar xzpvf /xen/openfiler/openfiler-2.3-x86_64.tar.gz

解开 openfiler-2.3-x86_64.tar.gz 后会在 /mnt 下产生一个完整的 Linux 系统,我们需要把这个 Linux 的内核拷贝出来以便加到 Xen 虚拟机配置文件中:

# mkdir -p /xenboot/
# cp /mnt/boot/config-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU /xenboot/
# cp /mnt/boot/initrd-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU.img /xenboot/
# cp /mnt/boot/System.map-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU /xenboot/
# cp /mnt/boot/vmlinuz-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU /xenboot/

解除挂载:

# cd 
# umount /mnt

创建启动 Openfiler 虚拟机需要的 Xen 配置文件:

# vi /etc/xen/openfiler

name = 'openfiler'
memory = '512'
kernel = '/xenboot/vmlinuz-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU'
ramdisk = '/xenboot/initrd-2.6.21.7-3.20.smp.gcc3.4.x86_64.xen.domU.img'
disk = [ 'phy:/dev/XenGroup/openfiler,xvda1,w' ]
root = "/dev/xvda1 ro"
vif = [ "mac=00:16:3e:38:76:22,bridge=xenbr0" ]
on_reboot = 'restart'
on_crash = 'restart'

启动 Openfiler 虚拟机:

# xm create openfiler

启动成功后就可以通过 https://172.16.39.1:446 来访问和管理 Openfiler 了,默认用户名和密码为 openfiler/password,登录后界面如下:

openfiler