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
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