Xen虚拟化平台安装及实时迁移
前言
Xen是英国剑桥大学计算机实验室开发的一个虚拟化开源项目,Xen可以在一套物理硬件上安全的执行多个虚拟机,它和操作平台结合的极为密切,占用的资源极少。以高性能、占用资源少著称,赢得了IBM、AMD、HP、Redhat和Novell等众多世界级软硬件厂商的高度认可和大力支持,已被国内外众多企事业用户用来搭建高性能的虚拟化平台。
Xen虚拟化类型
Xen对虚拟机的虚拟化分为两大类,半虚拟化和完全虚拟化。
半虚拟化
半虚拟化(Paravirtualization)有些资料称为“超虚拟化”,简称为PV,是Xen主导的虚拟化技术。这种技术允许虚拟机操作系统感知到自己运行在Xen Hypervisor上而不是直接运行在硬件上,同时也可以识别出其他运行在相同环境中的客户虚拟机。
完全虚拟化
完全虚拟化(Hardware Virtual Machine)又称“硬件虚拟化”,简称HVM,是指运行在虚拟环境上的虚拟机在运行过程中始终感觉自己是直接运行在硬件之上的,并且感知不到在相同硬件环境下运行着其他虚拟机的虚拟技术。
基本组件
Xen包含三大部分:
Hypervisor:直接运行于硬件之上,是Xen客户操作系统与硬件资源之间的访问接口。通过将客户操作系统与硬件进行分类,Xen管理系统可以允许客户操作系统安全,独立的运行在相同硬件环境之上。
Domain 0:运行在Xen管理程序之上,具有直接访问硬件和管理其他客户操作系统的特权的客户操作系统。
DomainU:运行在Xen管理程序之上的普通客户操作系统或业务操作系统,不能直接访问硬件资源(如:内存,硬盘等),但可以独立并行的存在多个。
详述见:http://my.oschina.net/davehe/blog/94039
Xen及虚拟机安装
安装Xen(CentOS6.6)
1
2
3
4
5
6
7
|
[[email protected] ~] # cd xen/
[[email protected] xen] # ls
kernel-xen-3.7.4-1.el6xen.x86_64.rpm xen-hypervisor-4.2.4-30.el6.centos.alt.x86_64.rpm kernel-xen-firmware-3.7.4-1.el6xen.x86_64.rpm xen-libs-4.2.4-30.el6.centos.alt.x86_64.rpm kernel-xen-release-6-4.noarch.rpm xen-licenses-4.2.4-30.el6.centos.alt.x86_64.rpm xen-4.2.4-30.el6.centos.alt.x86_64.rpm xen-runtime-4.2.4-30.el6.centos.alt.x86_64.rpm [[email protected] xen] # yum install *.rpm -y
|
修改grub文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[[email protected] ~] # vim /etc/grub.conf
default=0 timeout=5 splashimage=(hd0,0) /grub/splash .xpm.gz
hiddenmenu title CentOS (3.7.4-1.el6xen.x86_64) root (hd0,0)
kernel /xen .gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
module /vmlinuz-3 .7.4-1.el6xen.x86_64 ro root= /dev/mapper/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa llserver /lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver /lv_swap KEYBOARDTYPE=pc
KEYTABLE=us rd_NO_DM rhgb quiet module /initramfs-3 .7.4-1.el6xen.x86_64.img
title CentOS 6 (2.6.32-504.el6.x86_64) root (hd0,0)
kernel /vmlinuz-2 .6.32-504.el6.x86_64 ro root= /dev/mapper/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa llserver /lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver /lv_swap KEYBOARDTYPE=pc KE
YTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2 .6.32-504.el6.x86_64.img
|
重启系统,查看内核参数
1
2
|
[[email protected] ~] # uname -r
3.7.4-1.el6xen.x86_64 |
启动服务
1
2
3
4
5
6
|
[[email protected] ~] # service xend start
Starting xend daemon: [ OK ] [[email protected] ~] # xm list
WARNING: xend /xm is deprecated.
Name ID Mem VCPUs State Time(s) Domain-0 0 512 2 r----- 218.7 |
创建桥设备
由于虚拟机运行在宿主机之上,虚拟机运行的网络环境需要由宿主机提供,需要先配置好网桥,以便虚拟机与宿主机之间通信
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#关闭NetworkManager [[email protected] ~] # service NetworkManager stop
[[email protected] ~] # chkconfig NetworkManager off
[[email protected] ~] # vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0 TYPE=Bridge ONBOOT= yes
NM_CONTROLLED=no BOOTPROTO=none IPADDR=172.16.10.124 PREFIX=16 GATEWAY=172.16.0.1 DNS1=172.16.0.1 [[email protected] ~] # vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 TYPE=Ethernet ONBOOT= yes
NM_CONTROLLED=no BOOTPROTO=none BRIDGE=br0 [[email protected] ~] # service network restart
[[email protected] ~] # brctl stp br0 on #避免环路
|
准备引导文件
1
2
3
4
5
6
7
|
[[email protected] ~] # mount /dev/cdrom1 /media/cdrom/
mount : block device /dev/sr0 is write-protected, mounting read -only
[[email protected] ~] # cp /media/cdrom/isolinux/{vmlinuz,initrd.img} /tmp
[[email protected] ~] # ln -sv /media/cdrom/ /var/www/html/centos6.6
` /var/www/html/centos6 .6 ' -> `/media/cdrom/'
[[email protected] ~] # service httpd start
Starting httpd: [ OK ] |
创建磁盘映像文件
1
2
3
4
5
|
[[email protected] ~] # mkdir -pv /xen/vm1
[[email protected] ~] # dd if=/dev/zero of=/xen/vm1/centos6.6.img oflag=direct bs=1M seek=102399 count=1
[[email protected] ~] # ll /xen/vm1/ -h
total 1.0M -rw-r--r-- 1 root root 100G Jul 16 17:53 centos6.6.img |
定义domain
1
2
3
4
5
6
7
8
9
10
11
|
[[email protected] ~] # vim /etc/xen/centos6.6
kernel = "/tmp/vmlinuz"
ramdisk = "/tmp/initrd.img"
name = "centos6.6"
vcpus = 1 memory = 512 vif = [ "bridge=br0" ]
disk = [ 'file:/xen/vm1/centos6.6.img,xvda,w' ]
on_crash = "destroy"
on_reboot = "destroy"
|
启动虚拟机
1
|
[[email protected] ~] # xm create -c centos6.6
|
启动虚拟机即可进入安装界面,和VMware安装类似,简单截取一下就不详细记录了
配置IP,可手动配置
获取IP后,指定安装源
初始化磁盘
设置root密码
使用全部磁盘
开始安装
安装结束,重启虚拟机
以为定义domain时,我们设定on_reboot = "destroy",所以虚拟机会关机,接下来需要修改domain配置
1
2
3
4
5
6
7
8
9
10
11
12
|
[[email protected] ~] # vim /etc/xen/centos6.6
#kernel = "/tmp/vmlinuz" #ramdisk = "/tmp/initrd.img" name = "centos6.6"
vcpus = 1 memory = 512 vif = [ "bridge=br0" ]
disk = [ 'file:/xen/vm1/centos6.6.img,xvda,w' ]
on_crash = "destroy"
on_reboot = "restart"
bootloader= "/usr/bin/pygrub"
|
重读配置文件,启动虚拟机
1
|
[[email protected] ~] # xm create -c centos6.6
|
登陆虚拟机,查看IP(安装时为DHCP,登陆后又手动修改了IP)
至此,基于Xen平台的虚拟机安装完成,以上过程较繁琐,主要是为了理解Xend的工作过程,如果想要简单安装,可选择使用第三方管理工具 virt-manager(类似于VMware图形界面)
Xen实时迁移
实验拓扑
因为其中一个Xen平台已经搭建成功,且已安装虚拟机,另一个节点只需配置Xen环境即可,无需安装
安装Xen
1
2
|
[[email protected] ~] # cd xen/
[[email protected] xen] # yum install *.rpm
|
修改grub文件
1
2
3
4
5
6
7
8
9
10
|
[[email protected] xen] # vim /etc/grub.conf
title CentOS (3.7.4-1.el6xen.x86_64) root (hd0,0)
kernel /xen .gz dom0_mem=512M cpufreq=xen dom0_max_vcpus=2 dom0_vcpus_pin
module /vmlinuz-3 .7.4-1.el6xen.x86_64 ro root= /dev/mapper/vg_firewallserver-lv_
root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=vg_firewa llserver /lv_root crashkernel=auto rd_LVM_LV=vg_firewallserver /lv_swap KEYBOARDTYPE=pc
KEYTABLE=us rd_NO_DM rhgb quiet module /initramfs-3 .7.4-1.el6xen.x86_64.img
|
创建桥设备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[[email protected] ~] # service NetworkManager stop
[[email protected] ~] # chkconfig NetworkManager off
[[email protected] xen] # vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0 TYPE=Bridge ONBOOT= yes
NM_CONTROLLED=no BOOTPROTO=none IPADDR=172.16.10.125 PREFIX=16 GATEWAY=172.16.0.1 DNS1=172.16.0.1 [[email protected] xen] # vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 TYPE=Ethernet ONBOOT= yes
NM_CONTROLLED=no BOOTPROTO=none BRIDGE=br0 |
重启系统,查看内核参数
1
2
3
|
准备磁盘映像
1
2
|
#只创建目录即可,待挂载 [[email protected] ~] # mkdir -p /xen/vm1
|
NFS服务器配置
1
2
3
4
5
6
7
8
9
10
11
|
[[email protected] ~] # vim /etc/exports
/xen/vm1 172.16.0.0 /16 (rw,no_root_squash)
[[email protected] ~] # mkdir -p /xen/vm1
[[email protected] ~] # service nfs start
Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] |
源节点操作
同步Xen实例文件至目标节点
1
2
3
|
[[email protected] xen] # scp /etc/xen/centos6.6 node3:/etc/xen/
[email protected]'s password: centos6.6 100% 234 0.2KB /s 00:00
|
关掉正在运行的虚拟机
1
2
3
4
5
6
7
8
|
[[email protected] ~] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 495 2 r----- 942.7 centos6.6 3 512 1 -b---- 88.4 [[email protected] ~] # xm shutdown centos6.6
[email protected] xen] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 495 2 r----- 1075.5 |
挂载nfs
1
2
3
|
[[email protected] ~] # cp /xen/vm1/centos6.6.img /tmp
[[email protected] xen] # mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/
[[email protected] xen] # mv /tmp/centos6.6.img /xen/vm1/
|
配置实时迁移
1
2
3
4
5
|
[[email protected] xen] # grep xend-relocation /etc/xen/xend-config.sxp |grep -v '#'
(xend-relocation-server yes )
(xend-relocation-port 8002) (xend-relocation-address '' )
(xend-relocation-hosts-allow '' )
|
同步至目标节点
1
2
3
|
[[email protected] xen] # scp /etc/xen/xend-config.sxp node3:/etc/xen
[email protected]'s password: xend-config.sxp 100% 11KB 11.1KB /s 00:00
|
重启服务
1
2
3
|
[[email protected] xen] # service xend restart
Stopping xend daemon: [ OK ] Starting xend daemon: [ OK ] |
目标节点操作
挂载nfs
1
2
3
|
[[email protected] ~] # mount -t nfs 172.16.10.126:/xen/vm1/ /xen/vm1/
[[email protected] ~] # ls /xen/vm1/
centos6.6.img |
重启服务
1
2
3
|
[[email protected] ~] # service xend restart
Stopping xend daemon: [ OK ] Starting xend daemon: [ OK ] |
迁移测试
源节点启动虚拟机
1
2
3
4
5
6
7
8
9
10
11
|
[[email protected] ~] # xm create -c centos6.6
[[email protected] ~] # ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3E:45:41:28 inet addr:172.16.10.231 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::216:3eff:fe45:4128 /64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:177 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8595 (8.3 KiB) TX bytes:1326 (1.2 KiB)
Interrupt:247
|
查看各节点状态
1
2
3
4
5
6
7
|
[[email protected] xen] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 495 2 r----- 2495.1 centos6.6 4 512 1 -b---- 52.0 [[email protected] ~] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 512 2 r----- 373.5 |
开始迁移
1
|
[[email protected] xen] # xm migrate -l centos6.6 172.16.10.125
|
迁移过程中一直对虚拟机进行ping操作
迁移过程中服务中断过几秒,可忽略不计
再次查看各节点状态
1
2
3
4
5
6
7
|
[[email protected] xen] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 493 2 r----- 2578.2 [[email protected] ~] # xm list
Name ID Mem VCPUs State Time(s) Domain-0 0 496 2 r----- 484.3 centos6.6 1 512 1 -b---- 1.3 |
连接虚拟机,验证是否工作
1
2
3
4
5
6
7
8
9
10
11
|
[[email protected] ~] # xm console centos6.6
[[email protected] ~] # ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3E:45:41:28 inet addr:172.16.10.231 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::216:3eff:fe45:4128 /64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2480 errors:0 dropped:0 overruns:0 frame:0
TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:146639 (143.2 KiB) TX bytes:10466 (10.2 KiB)
Interrupt:247
|
至此,Xen实时迁移成功实现
The end
Xen虚拟化平台安装及实时迁移就先说到这里了,部署过程中遇到问题可留言交流。以上只是演示了简单的实时迁移过程,实际生产环境中可对Xen平台做高可用,当物理机故障可移动检测并进行实时迁移,保证业务不受影响。以上仅为个人学习整理,如有错漏,大神勿喷~~~
本文转自 北城书生 51CTO博客,原文链接:http://blog.51cto.com/scholar/1675485