在 Debian 上安装 Xen 虚拟机集群管理工具 Ganeti
2010年11月10日 | 标签: cloud, ganeti, lvm, xen | 作者:vpsee
随着 Xen 服务器的增多,管理起来会越来越麻烦,如果有一些集成化的辅助工具来统一管理所有的服务器、虚拟机以及集中分配计算资源将会很方便。不过 VPSee 一般都避免使用一些太智能的工具,智能化自动工具有时候太智能,而且很难理解,特别是遇到问题的时候很难排错,因为自动和智能掩盖了工具背后的原理和过程,不知道是工具错了还是自己用错了。市面上有一些结合虚拟技术面向云计算的 Xen/KVM 管理工具,比如 Eucalyptus, OpenNebula, OpenQRM 等用来统一部署和管理虚拟环境,Ganeti 虽然没有前面几个强大,也勉强算一员。Ganeti 最初是由 Google 瑞士苏黎世 office 的一小撮人开发的 Xen/KVM 虚拟机集群管理工具,用来管理内部一些由廉价计算机组成的虚拟服务器集群,廉价计算机集群是 Google 的特色之一。
详细一点说,Ganeti 是一个基于 Xen 或 KVM 虚拟技术的虚拟集群环境管理工具,用来管理一堆运行 Xen 服务器的统一管理界面,这样创建、删除、启动、关闭、重装、查看、移植虚拟机就用不着逐个去某台 Xen 服务器上操作,整合了整个虚拟操作环境,统一管理所有硬盘、操作系统、内存等资源,简化了操作,显然 Ganeti 需要运行在 Xen/KVM 平台上。把 Ganeti, Xen/KVM, LVM, DRBD, RAID10 等几个技术整合起来可以架设一个云计算基础环境,配上一个基于 Web 的控制面板和计费系统就可以当作 “云 VPS” 拿来忽悠。
安装和配置基本系统
首先在每个 node(node1, node2, …)上都安装上最基本的 Debian 系统(Ganeti 官方推荐1个集群里的 node 数目不要超过40个),VPSee 建议在所有 node 上一致采用最小化安装并使用最简单的分区方式:使用 sda1 做 /(10GB),使用 sda2 做 swap(2GB),剩余的空间将会在下面的步骤用到。安装完后开始对每个 node 都做如下类似配置,以 node1 为例,每个 node 上都需要配置 /etc/hosts,Ganeti 就是靠这里的 hostname 来识别 node 的,所以这一步很重要,设置好 hostname 后用 hostname -f 测试一下是否正确:
# vi /etc/hosts 127.0.0.1 localhost.localdomain localhost 172.16.39.10 cluster1.vpsee.com cluster1 172.16.39.11 node1.vpsee.com node1 172.16.39.12 node2.vpsee.com node2 172.16.39.101 inst1.vpsee.com inst1 # hostname -f node1.vpsee.com
如果 node1 上的 hostname 不正确可以修正:
# vi /etc/hostname node1.vpsee.com # /etc/init.d/hostname.sh start
接下来需要给每个 node 配置一个静态 IP,需要注意的是 Ganeti 在默认 bridge 模式下会是用 xen-br0 这个名字,所以我们需要在每个 node 上建立这个 bridge:
# vi /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 172.16.39.11 netmask 255.255.254.0 network 172.16.38.0 broadcast 172.16.39.255 gateway 172.16.38.1 auto xen-br0 iface xen-br0 inet static address 172.16.39.11 netmask 255.255.254.0 network 172.16.38.0 broadcast 172.16.39.255 gateway 172.16.38.1 bridge_ports eth0 bridge_stp off bridge_fd 0
需要注意的是,要对每个想加入 Ganeti 的 node 做相应的配置和调整,比如 IP,hostname 等。在 node2, node3, …, nodeN 上重复上面的步骤。
安装和配置 LVM
这一步骤也需要在每个 node 上重复。先检查分区,在 sda3 上分区,分区格式是 LVM,每个 node 上的这个区将被拿来做 Ganeti 的存储池(storage pool)用来存储 Xen 虚拟机镜像(要注意的是记得在安装 debian 的是后就留出大部分空间来做 sda3):
$ sudo fdisk -l ... Device Boot Start End Blocks Id System /dev/sda1 * 1 1216 9764864 83 Linux /dev/sda2 1216 1703 3906560 82 Linux swap / Solaris $ sudo fdisk /dev/sda n p 3 enter enter t 3 L 8e w $ sudo fdisk -l ... Device Boot Start End Blocks Id System /dev/sda1 * 1 1216 9764864 83 Linux /dev/sda2 1216 1703 3906560 82 Linux swap / Solaris /dev/sda3 1703 60801 474711584+ 8e Linux LVM
安装 LVM 工具包,并用 LVM 工具创建物理卷和 LVM 卷组:
# apt-get install lvm2 $ sudo pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully created $ sudo vgcreate xenvg /dev/sda3 Volume group "xenvg" successfully created
重启系统以便刚创建的 LVM 生效:
# shutdown -r now
安装和配置 Xen 系统
按照 “在 Debian 上安装 Xen” 的步骤安装 Xen:
# apt-get install xen-hypervisor-3.2-1-amd64 \ xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 \ xenstore-utils xenwatch xen-shell xen-tools
安装和配置 Ganeti
可以从 Ganeti 官方网站下载源代码编译安装,为了少给自己添麻烦避免一些未知的编译、安装错误,建议新手直接从 debian 源安装:
# apt-get install ganeti
开始使用 Ganeti
在给集群(cluster)增加结点(node)之前需要先初始化这个集群,指定谁是老大(master node)。所以首先用 gnt-cluster 初始化一个 node (node1),这个 node1 将成为 master node,登陆到 node1 上,在 node1 上执行以下操作:
# gnt-cluster init node1 # gnt-node list Node DTotal DFree MTotal MNode MFree Pinst Sinst node1.vpsee.com 454044 454044 3893 3686 128 0 0
有了 master node (node1) 后,这个 master node 就是老大,用来管理其他的 slave nodes (node2, node3, …, nodeN) ,所有操作都要在 master node 上执行。现在我们可以在这个集群中加入 node2:
# gnt-node add node2.vpsee.com # gnt-node list Node DTotal DFree MTotal MNode MFree Pinst Sinst node1.vpsee.com 454044 454044 3893 3686 128 0 0 node2.vpsee.com 37440 37440 2035 1024 969 0 0
可以看到这个集群已经统一管理 node1, node2 以及 node1 和 node2 上的资源,比如内存、硬盘等。现在我们终于可以开始创建虚拟机了,我们只需要在 master node (node1) 上执行安装虚拟机的命令就可以自动部署到集群中:
# gnt-instance add -t plain -n node2.vpsee.com -o debootstrap -s 5g \ --swap-size 256 -m 256 --kernel /boot/vmlinuz-`uname -r` \ --ip 172.16.39.101 inst1.vpsee.com * creating instance disks... adding instance inst1.vpsee.com to cluster config - INFO: Waiting for instance inst1.vpsee.com to sync disks. - INFO: Instance inst1.vpsee.com's disks are in sync. creating os for instance inst1.vpsee.com on node node2.vpsee.com * running the instance OS create scripts... ...
要重装虚拟机的话,执行 reinstall:
# gnt-instance reinstall inst1.vpsee.com This will reinstall the instance inst1.vpsee.com and remove all data. Continue? y/[n]/?: y Running the instance OS create scripts...
查看正在运行的虚拟机(instance):
# gnt-instance list Instance OS Primary_node Status Memory inst1.vpsee.com debootstrap node1.vpsee.com running 256
Ganeti 结合 DRBD 后还可以实现冗余、备份、在不同 node 之间自由迁移等功能,比如一个 node 挂了另一个 node 自动接替,某个 node 负载太高把上面的一个或几个 instance(虚拟机)暂时或永久迁移到另一个 node 降低单一 node 的负载等,非常酷。更多参考资料、帮助文档和命令行参数解释请看 Ganeti 的官方文档。
请问这个ganeti配置好后,vps用户如何通过xen-shell管理自己的vps呢?
以前只有一台母机,只要ssh到母机,就可以调用xen-shell对自己的vps管理,现在vps可以跑在任意一个node了,那该如何登陆到自己vps对应的母机调用xen-shell管理呢?
还是说这个模式就只是方便管理员统一管理,vps用户就只能通过自己vps ip登陆到自己系统了?
请帮我看看什么问题,按照文档安装。但是到gnt-cluster init的时候卡住了。
提示如下:
#gnt-cluster init node1
Failure: prerequisites not met for this operation:
Cluster IP already active. Aborting.
我的/etc/hosts已经加入了node1
node1:~# hostname -f
node1.localdomain
我按照您的文档修改了/etc/network/interfaces文件,但是好像xen-br0没有起来。
node1:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:4a:1e:f7
inet addr:192.168.194.132 Bcast:192.168.194.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe4a:1ef7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:147 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:18759 (18.3 KiB) TX bytes:10286 (10.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:960 (960.0 B) TX bytes:960 (960.0 B)
peth0 Link encap:Ethernet HWaddr 00:0c:29:4a:1e:f7
inet6 addr: fe80::20c:29ff:fe4a:1ef7/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:157 errors:0 dropped:0 overruns:0 frame:0
TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22687 (22.1 KiB) TX bytes:11810 (11.5 KiB)
还望指点下什么地方出现了问题
因为 xen-shell 只支持单台 node 上的管理,所以如果要用 xen-shell 的话需要修改 xen-shell,并且记录哪个 vps 在哪个 node 上用哪个 node 上的 xen-shell. 所以用户只能 ssh ip 了,(如果不用命令的话)甚至连管理员都不知道哪个 VPS 运行在哪个 node 上。
感谢回答。不过目前ganeti还是不能gnt-cluster init
即使我用brctl addbr xenbr0
也一样提示
#gnt-cluster init node1
Failure: prerequisites not met for this operation:
Cluster IP already active. Aborting.
请教如何挂载磁盘柜,登陆iscsi后不识别分区,原来用的xenserver挂载的可用.
你好,vpsee,看到了openstack,很想去试试,由于换了工作,手头上没有可用的资源。想问个问题,以前在公司成做过UEC的实验,如果虚拟机分配了外网ip,就会有两个,一内一外,但发现虚拟机之间无法以内网形式通讯的,是否配置问题?另外,每台cluster controller的所处的外网ip网段(外网端口被网络供应商的以vtag形式控制了)都是不同的,用管理系统分配ip时就出现了分配的ip与虚拟机所处的网段不相符造成虚拟机无法与外界通讯。非同一集群下的虚拟机能否以内网形式通讯? 有些虚拟机做数据库等,是希望被隐藏在内网环境中的。openstack,amazon 能做到吗?可能写得不太清楚,请见谅!