用同一个配置文件启动任意 Xen DomU

当我们使用 xm create vps1 这行命令创建一个 Xen DomU (VPS) 的时候,xm 会自动在 /etc/xen/ 目录下匹配到 vps1 这个配置文件,通过正确解析 vps1 配置文件而成功启动一个 DomU,如果我们有很多个 DomU 需要启动的话,那就需要在 /etc/xen/ 下创建和编辑很多个对应的 DomU 配置文件。这些配置文件的内容都是差不多的,无非就是一些参数需要修改,那么如何只在 /etc/xen/ 下保留一份配置文件并让所有 DomU 能通过传参数的方式来启动不同的 DomU 呢?比如,如何通过下面一行命令来自定义配置文件参数并启动 DomU 呢?

# xm create vps.config vpsid=1 vpscpu=2 vpsmem=512

我们企图通过上面这行命令来启动一个 VPS ID 为1、CPU cores 数为2、内存大小为 512MB 的 VPS (DomU). 我们接下来需要编辑 vps.config 这个文件,让这个文件在 xm create 时能接受 vpsid, vpscpu, vpsmem 这些参数。

# A domU configuration file for all the domUs
# written by vpsee.com

def vpsid_check(var, val):
    val = int(val)
    if val <= 0:
         raise ValueError
    return val
def vpscpu_check(var, val):
    val = int(val)
    if val <= 0:
        return 1
    elif val >= 8:
        return 8
    return val
def vpsmem_check(var, val):
    val = int(val)
    if val <= 128:
        return 128
    return val

xm_vars.var('vpsid',
            use="VPS ID > 0",
            check=vpsid_check)
xm_vars.var('vpscpu',
            use="VPS CPU > 0 and <= 8",
            check=vpscpu_check)
xm_vars.var('vpsmem',
            use="VPS RAM >= 128",
            check=vpsmem_check)

xm_vars.check()

name="vps%d" % vpsid
bootloader = "/usr/bin/pygrub"
vcpus = "%d" % vpscpu
maxmem="%d" % vpsmem
memory="%d" % vpsmem
disk=[ "tap:aio:/home/vpsee/xen/vps%d/disk.img,sda1,w" % vpsid ]
vif = [ "bridge=xenbr0" ]
on_shutdown = "destroy"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"

上面的片段来自我们自己的脚本程序,VPSee 去除了一些和业务相关的代码,比如 xm create 的时候自动把客户名和客户的联系方式、VPS 配置、初始化流量等信息提交到数据库等。我们自己编写了很多类似的脚本帮助我们自动化管理和减少我们的管理、维护服务器和 VPS 的成本。

评论 (4 Comments)

  1. v哥,刚成为你fan,看过你的“在 CentOS 下源码安装 Xen“,问一下你装的是32位的还是64位的cent os?我是在校学生,需要用xen虚拟两个台式机来做下实验,现在想去刻盘,谢谢了!

  2. 一般 4GB 内存以上用 64位(当然 CPU 要支持),4GB 以下用32位就可以。

  3. @vpsee

    hi ,想请教下~
    xen的/etc/xen/guest配置文件里,什么时候用bootloader = “”
    什么时候用 kernel =“” 和 ramdisk = “” (代替 bootloader) ?

  4. @天天
    需要用 pygrub 启动虚拟机里面的内核的时候用 bootloader,启动 host 上的内核的时候用 kernel, ramdisk.

发表评论