閱讀488 返回首頁    go 阿裏雲 go 技術社區[雲棲]


rhel6 kvm 備忘

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


https://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
https://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

 

 

 


 

最後更新:2017-04-02 18:14:51

  上一篇:go SQLiteDatabase
  下一篇:go 為Android應用程序添加社會化分享功能