rhel6 kvm 备忘-阿里云开发者社区

开发者社区> 开发与运维> 正文

rhel6 kvm 备忘

简介: KVM 当今机架,刀片服务器都非常强大,通常在使用时候也无法尽量用光物理内存,CPU 可利用该物理(宿主)主机上安装新的虚拟机,虚拟出新的物理主机环境   当前环境 RHEL6,具备本地 ISO 镜像,网络也共享 ISO 镜像中文件数据(http) 本地已配置 yum 源   检查是否满足使用 KVM 条件, 利用下面方法检测一下 CPU 指令集 INTEL CPU 需满足

KVM
当今机架,刀片服务器都非常强大,通常在使用时候也无法尽量用光物理内存,CPU
可利用该物理(宿主)主机上安装新的虚拟机,虚拟出新的物理主机环境

 

当前环境 RHEL6,具备本地 ISO 镜像,网络也共享 ISO 镜像中文件数据(http)
本地已配置 yum 源

 

检查是否满足使用 KVM 条件, 利用下面方法检测一下 CPU 指令集
INTEL CPU 需满足具备 VMX 指令集,ADM CPU 满足具备 SVM 指令集,如下演示

egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

 

注: 当 CPU 不满足 KVM 条件,则无任何返回值

 

 

安装软件包(最小化安装)

yum install virt-manager libvirt libvirt-python python-virtinst libvirt-client openssh-askpass


 

另外一种选择,安装软件包组

yum groupinstall -y "Virtualization" "Virtualization Client" "Virtualization Platform"  "Virtualization Tools"


 

可用命令提示

virt-manager (GUI 下 kvm 管理器)
libvirt (提供 libvirted 服务)
virt-viewer (文本下 kvm 管理器)
kvm
virt-install (文本下提供 kvm 安装的工具)
libvirt-python (包含 python 程序接口)
libvirt-client(virsh 命令)


 

 

 

启动 KVM 服务方法

/etc/init.d/libvirtd start


 

 

 

利用下面命令检测 KVM 是否能够正常使用

virsh -c qemu:///system list
 Id    名称                         状态
----------------------------------------------------


 

 

如当前有 KVM 虚拟机在运行,那么可以通过上述命令查询看到虚拟机命名

配置 kvm 必须的桥接模式
当前网络架构如下


[互联网/内联网] -- bond0 [ 物理主机 (数据包转发) [虚拟机eth0] --桥接-- br0 ] (bond1) 

 

 

解释
物理主机具有 4 个物理网卡

lspci | grep Ether | awk -F: '{print $3}'
 Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
 Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
 Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
 Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)
当前利用 eth0, eth1 建立 bond0 双网卡绑定单 IP 技术
当前利用 eth2, eth3 建立 bond1 双网卡绑定单 IP 技术


 

参考上面架构图,我们可以理解为, 虚拟机具有网卡 eth0, 而且虚拟机在物理机器的内部
而虚拟机的网卡eth0 是无法与物理机的网卡 bond1,bond0 进行直接连接
因此,需在物理主机中虚拟一个网络接口 br0 (bridge连接模式)
或者利用数据包转发的方式,利用 nat 模式把数据中转到虚拟机中 (不描述)

可以理解为,假设虚拟机要访问互联网时,网络出口连接先后顺序后,参考


虚拟机eth0 -内核层-> 物理 br0 -内核层-> 物理 bond1 -tcp->  物理 bond0 -tcp层-> 互联网


配置 br0 方法

[root@minia ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
ONBOOT=yes
#IPADDR=10.1.1.27      [需要注释部分]
#NETMASK=255.255.255.0 [需要注释部分]
BONDING_MASTER="yes"
BOOTPROTO=none
IPV6INIT=no
BRIDGE=br0 [新增加部分]

[root@minia ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge            [注意大小写]
BOOTPROTO=static
IPADDR=10.1.1.27      [原 bond1 地址被配置到 br0 中]
NETMASK=255.255.255.0
ONBOOT=yes


重启网络后监看 IP 地址是否配置成功

[root@minia ~]# ifconfig br0
br0       Link encap:Ethernet  HWaddr D8:9D:67:17:66:96
          inet addr:10.1.1.27  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::da9d:67ff:fe17:6696/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14782840 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12491905 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4787651971 (4.4 GiB)  TX bytes:6824441386 (6.3 GiB)


[root@minia ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.d89d67176696       no              bond1
virbr0          8000.525400d72d1f       yes             virbr0-nic


 

如使用 IPV6, 需要修改

/etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0


 

 

 

如使用防火墙规则,需增加 iptables 规则定义

iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

 

 

完成配置后重启一下 KVM 服务

service libvirtd restart


 

安装虚拟机
虚拟机文件存放位置: /vm/proxy1
iso 文件存放位置:   /backup/iso/CentOS-6.4-x86_64-bin-DVD1.iso

如需本地安装,可参考下面命令

virt-install --name=centOS6-proxy1 --disk path=/vm/proxy1/root.img,size=30 --vnc --vcpus=2 --ram=4096 --network bridge=br0 --os-type=linux --os-variant=rhel6  --cdrom=/backup/iso/CentOS-6.4-x86_64-bin-DVD1.iso

开始安装...... 创建存储文件 root.img                              |  30 GB     00:00 创建域......                                       |    0 B     00:00 无法打开显示: Run 'virt-viewer --help' to see a full list of available command line options 域安装仍在进行。您可以重新连接 到控制台以便完成安装进程。


 

通过提示,利用 virt-manager  工具即可完成整个安装过程(忽略)

 


 

如需远程管理对方 kvm 虚拟机,可利用下面命令进行连接(22222 SSH 端口)

virt-manager -c qemu+ssh://root@some_machine:22222/system



注,有可能会提示错误,参考错误提示详细信息


原因1. /usr/local/libexec/ssh-askpass 文件无法获得
解决方法

yum install -y openssh-askpass
cp /usr/libexec/openssh/ssh-askpass  /usr/local/libexec/ssh-askpass



 

 

网络安装

pxe 网络安装

virt-install --hvm --connect qemu:///system  --network bridge=br0 --pxe --name pxe10 --ram=2046 --vcpus=2 --os-type=linux --os-variant=rhel6 --disk path==/vm/proxy2/root.img,size=30 --name=kvm-proxy2

 

 

pxe + kickstart 网络安装方法

virt-install  --name=kvm-proxy3    --disk path===/vm/proxy2/root.img,size=30 --graphics=vnc --vcpus=2 --ram=2048    --network bridge=br0  --os-type=linux --os-variant=rhel6  --location=nfs:10.1.1.1:/share/rhel6.1 --extra-args "ks=ftp://cs:cs@10.1.1.10/my.cfg"


 

KVM 管理工具
 kvm 内核模块 <- qemu 管理工具 (可用性低)
 qemu 是开源虚拟化软件, 虚拟不同 CPU 架构, 可以 x86 虚拟 power cpu

 libvirt, virsh, virt-manager (redhat 的辅助工具)
 libvirt api 提供管理接口工具
 virt-manager 调用 libvirt 工具

 

 

libvirt 接口
 virsh 命令行工具
 virt-manager 图形工具
 RHEV-M (redhat 专用收费软件)
 
 支持三种虚拟设备
  Emulated software devices 仿真设备 ->  南北桥, USB, PS/2 ISA PCI
  Para-virtualized devices -> 时钟, 网络, 串口,
  Physically shared devices  --> 光纤设备
  


迁移
 在线
 离线 静态迁移


在线
共享存储的动态迁移

 动态迁移(Live Migration):也叫在线迁移(Online Migration)
 运行状态中进行迁移
 不影响在线用户使用, 未保证迁移过程中虚拟服务可用, 需短暂停机
 迁移前, 服务在源主机运行, 迁移后, 源主机与目标主机需进行短暂切换
 迁移对用户透明(不知情) 但对硬件要求高

 迁移需要使用共享存储, 迁移过程只在内存中进行
 共享存储动态迁移, 减少 DOWN 机时间


 迁移方法:
 由于源,目标主机都可以访问镜像, 只需要复制 xml 配置文件 
 
 使用 nfs 服务, 打开 virt-manager
  # Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。
  # Format:选择存储类型。这里必须是 nfs。
  # Host Name:输入共享存储服务器,也就是 NFS 服务器的 IP 地址或 hostname。
  # Source Path:NFS 服务器上输出的共享目录

 点完成后, 自动进行挂载

 在目标机中激活
  virsh define /etc/libvirt/qemu/xxx.xml <- 主机镜像路径必须正确

 在源主机的 virt-manager 窗口中,右键点击等待迁移的虚拟机,选择“Migrate ”。

  * New host:选择目的主机的 hostname。
  * Address:填入目的主机的 IP 地址。
  * Port and Bandwith:指定连接目的主机的端口和传输带宽,本文中没有设定,使用默认设置。

 

 


块迁移 - 使用本地存储
 迁移频率低, 对迁移时间没有要求, 廉价, 稳定性不如 SAN  存储

迁移方法
 直接从源主机拷贝镜像文件和 XML 配置文件到目的主机中

保存虚拟机的运行状态
 如果希望保存目标主机状态, 需要对虚拟机以暂停方法进行关闭


离线
 也叫做常规迁移、离线迁移(Offline Migration)。
 关机或暂停 情况下迁移
 迁移虚拟机镜像和相应的配置文件到另外一台物理主机上
 主: 暂停, 复制  从: 重建配置, 恢复执行

 缺点: 需要停机

 先启动源主机
 在目标主机中 创建文件, 大小与原设备一致

 

 

 

虚拟虚拟化
 virt-v2v 工具, 支持 VMware ESX


最小需求
 6G 空间
 2G 内存
 支持虚拟化 64 位 CPU  --> grep -E 'svm|vmx' /proc/cpuinfo
 最多 64 个 CPU
  


file:///E:/training/linux/ULA/html/Virtualization/sect-Virtualization-Tips_and_tricks-Verifying_virtualization_extensions.html


http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm2/index.html

 


################## 动态迁移 ##########################

## rhel 6.1 中, 利用  virt-manager 进行迁移时候必须打开高级选项, 输入连接性中地址 ##



[ station10 ]     [ station20 ] <- sdb -> /vm

 |       |

 |---------------------------|

    |    
   [ station19 ]
 iscsi 存储

文件位置  /dev/sdb  -> /vm/kvm/rhel5.img
配置 /etc/libvirtd/qemu/net5.xml

 

步骤
 1. station10 利用 virt-manager 连接 /vm/kvm/rhel5.img

  建立 guest -> net5 并启动
步骤

 2. 复制 station10 /etc/libvirtd/qemu/net5.xml  --> station20 相同位置

 

 [root@station10 /]# virsh list
 Id
 名称               状态

 ----------------------------------

 2 net5                 running

 

[root@station20 ~]#  virsh list

 Id 名称               状态
 
----------------------------------

 (空)
 
 


station10 启动后安装 -> yum install -y firefox wireshark

 

 

步骤3 动态迁移.
 
先利用 ssh, ftp 等工具登录到 net5 主机中 (测试是否断开了链接)

 

 virsh migrate --live net5 qemu+ssh://10.1.1.20/system

 

同步过程中

[root@station20 ~]#  virsh list

Id 名称               状态

----------------------------------

  2 net5                 暂停

 

命令执行成功后


[root@station10 /]# virsh list

 Id 名称               状态

----------------------------------

(空)


[root@station20 ~]#  virsh list

 Id 名称               状态

----------------------------------

2 net5                 running

 

ssh, ftp 链接没有被断开
安装过的资料仍然存在

[root@localhost ~]# rpm -qa | grep -E 'wireshark|firefox'

firefox-3.0.18-1.el5_4

wireshark-1.0.8-1.el5_3.1

 

 

如果要利用 virt-manager 进行迁移:


 (环境,  station20 中没有建立任何虚拟机)
 建立链接后,双击主界面中新增加链接 (iscsi 配置,有 bug)
 
 \-> 存储
  
   \-> + (增加)
   
    名称: net5
   
    类型: iscsi 目标
    
      \-> 目标路径: /vm
     
       格式:
     
       主机名 10.1.1.19
     
       源路径: iqn.2011-03.com.cluster.station20:kvm

       
 rm -rf /etc/livbirtd/qemu/net5.xml

 
 
 在 station10 主界面中点 add-connection
 
 
  程序管理: qemu-kvm
 
   connection to remote host: ssh
 
   user: root  <- 建立 ssh 密钥
 
   主机名: 10.1.1.20


   
   建立链接后,双击主界面中新增加链接 (iscsi 配置,有 bug)
 
    \-> 存储
  
     \-> + (增加)
   
      名称: net5
   
      类型: iscsi 目标
    
       \-> 目标路径: /vm
     
        格式:
     
        主机名 10.1.1.19
     
        源路径: iqn.2011-03.com.cluster.station20:kvm

 
  
 完成后, 自动建立 iscsi 链接

 存储池建立具有故障, 无法继续操作


建立链接后,

 双击主界面中新增加链接 (nfs配置)
 
  \-> 存储
  
   \-> + (增加)
   名称: rhel-net
   类型: netfs:网络导出的目录

    \-> 目标路径: /net/kvm  <- 必须与源主机一致 (station10=20 )
 
      格式: nfs
     
      主机名 10.1.1.19
     
      源路径: /vm/kvm

 

 

点完成后, station20 会自动挂载
存储页面增加一新标签,并能够查询使用情况
 

 新建卷
  \-> 名称 [net-rhel5].img <- 必须区别源卷
   
     格式 qcow2
   
     最大容量: 1000 mb
   
     分配 0 mb


完成后, 直接点虚拟机中迁移按钮则可以


################## 动态迁移 ##########################

para 虚拟设备

para-virtual
 1. 增强了 I/O 性能
 2. 推荐在 I/O 负载大的应用程序中使用 PARA 虚拟化
 3. 使用 PARA 虚拟化, 必须使用驱动, 默认 rhel4.7  rhel5.4, rhel6.0 都具备该功能
 4. windows 客户端必须手动装载驱动

模块由软件包 virtio  提供, 并包括
 virtio-net 网络驱动
 virtio-blk 存储驱动 (无法支持软驱)
 虚拟时钟 -> grep constant_tsc /proc/cpuinfo 检测 CPU 是否支持

rhel3.9 或其他底版本需要手动加载 para 模块, 参考官方文档
windows 也同样需要, 参考官档


增加新磁盘使用 para 虚拟设备
 设备类型选择 virtio disk


增加新网络使用 para 虚拟设备
 设备类型使用 virtio

pci 设备识别
 virsh nodedev-list --tree
 virsh nodedev-list | grep pci <- 只获得 pci 设备 (利用 lspci -n 获得对应设备信息)

如 pci_0000_00_1a_7 该设备

$ printf %x 0
0
$ printf %x 26
1a
$ printf %x 7
7

对应变量值为
bus='0x00'
slot='0x1a'
function='0x7'

#

# virsh edit win2k3
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
      <address domain='0x0000' bus='0x00' slot='0x1a' function='0x7'/>
  </source>
</hostdev>

selinux 允许使用该 pic
setsebool -P virt_use_sysfs 1

virsh start win2k3 启动该设备

而利用 virt-manager 可以直接增加 物理硬件设备

 

如果新安装时需要使用硬件设备
virsh nodedev-list --tree
virsh nodedev-list | grep pci


irt-install \
 -n hostdev-test -r 1024 --vcpus 2 \
 --os-variant fedora11 -v \
 -l
http://download.fedoraproject.org/pub/fedora/linux/development/x86_64/os \
 -x 'console=ttyS0 vnc' --nonetworks --nographics  \
 --disk pool=default,size=8 \
 --debug --host-device=pci_8086_10bd  <-  --host-device=pci_8086_10bd

 

 

 


 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章