關于虛擬化
什么是虛擬化
在計算機技術中,虛擬化(技術)或虛擬技術(英語:Virtualization)是一種資源管理技術,是將計算機的各種物體資源(CPU、記憶體、磁盤空間、網路配接器等),予以抽象、轉換后呈現出來并可供磁區、組合為一個或多個電腦配置環境,
由此,打破物體結構間的不可切割的障礙,使用戶可以比原本的配置更好的方式來應用這些電腦硬體資源,這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理配置所限制,
一般所指的虛擬化資源包括計算能力和資料存盤,
由于目前資訊技術領域的很多企業都曾在宣傳中將該企業的某種技術稱為虛擬化技術,這些技術涵蓋的范圍可以從Java虛擬機技術到系統管理軟體,這就使得準確的界定虛擬技術變得困難,因此各種相關學術論文在談到虛擬技術時常常提到的便是如前面所提到的那個不嚴格的定義,
為什么用虛擬化
同一臺物理機運行多個不同版本應用軟體
硬體依賴性較低和便于資料遷移
虛擬化技術的優勢
1.降低運營成本
服務器虛擬化降低了IT基礎設施的運營成本,令系統管理員擺脫了繁重的物理服務器、OS、中間件及兼容性的管理作業,減少人工干預頻率,使管理更加強大、便捷,
2.提高應用兼容性
服務器虛擬化提供的封裝性和隔離性使大量應用獨立運行于各種環境中,管理人員不需頻繁根據底層環境調整應用,只需構建一個應用版本并將其發布到虛擬化后的不同型別平臺上即可,
3.加速應用部署
采用服務器虛擬化技術只需輸入激活配置引數、拷貝虛擬機、啟動虛擬機、激活虛擬機即可完成部署,大大縮短了部署時間,免除人工干預,降低了部署成本,
4.提高服務可用性
用戶可以方便地備份虛擬機,在進行虛擬機動態遷移后,可以方便的恢復備份,或者在其他物理機上運行備份,大大提高了服務的可用性,
5.提升資源利用率
通過服務器虛擬化的整合,提高了CPU、記憶體、存盤、網路等設備的利用率,同時保證原有服務的可用性,使其安全性及性能不受影響,
6.動態調度資源
在服務器虛擬化技術中,資料中心從傳統的單一服務器變成了統一的資源池,用戶可以即時地調整虛擬機資源,同時資料中心管理程式和資料中心管理員可以靈活根據虛擬機內部資源使用情況靈活分配調整給虛擬機的資源,
7.降低能源消耗
通過減少運行的物理服務器數量,減少CPU以外各單元的耗電量,達到節能減排的目的,
KVM簡介
KVM,基于內核的虛擬機(英語:Kernel-based Virtual Machine,縮寫為 KVM),是一種用于Linux內核中的虛擬化基礎設施,可以將Linux內核轉化為一個hypervisor,KVM在2007年2月被匯入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上,
KVM在具備Intel VT或AMD-V功能的x86平臺上運行,它也被移植到S/390,PowerPC與IA-64平臺上,在Linux內核3.9版中,加入ARM架構的支持,
KVM目前由Red Hat等廠商開發,對CentOS/Fedora/RHEL等Red Hat系發行版支持極佳,
關于KVM
-
KVM是開源軟體,全稱是kernel-based virtual machine(基于內核的虛擬機),
-
是x86架構且硬體支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案,
-
它包含一個為處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko),
-
KVM還需要一個經過修改的QEMU軟體(qemu-kvm),作為虛擬機上層控制和界面,
-
KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)并為每一個虛擬機配置個性化硬體環境(網卡、磁盤、圖形配接器……)同時KVM還能夠使用ksm技術幫助宿主服務器節約記憶體,
-
在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心,
關于Virtual Machine Manager
電腦運算中,紅帽公司的Virtual Machine Manager是一個虛擬機管理員,可以讓用戶管理多個虛擬機,
基于內核的虛擬機libvirt與Virtual Machine Manager,
Virtual Machine Manager可以讓用戶:
創建、編輯、引導或停止虛擬機,
查看并控制每個虛擬機的控制臺,
查看每部虛擬機的性能以及使用率,
查看每部正在運行中的虛擬機以及主控端的即時性能及使用率資訊,
不論是在本機或遠程,皆可使用KVM、Xen、QEMU,

其他虛擬化軟體
?? Xen
Xen是一個開放源代碼虛擬機監視器,由XenProject開發,它打算在單個計算機上運行多達128個有完全功能的作業系統,
在舊(無虛擬硬體)的處理器上執行Xen,作業系統必須進行顯式地修改(“移植”)以在Xen上運行(但是提供對用戶應用的兼容性),這使得Xen無需特殊硬體支持,就能達到高性能的虛擬化,
?? QEMU
QEMU是一套由Fabrice Bellard所撰寫的模擬處理器的自由軟體,它與Bochs,PearPC近似,但其具有某些后兩者所不具備的特性,如高速度及跨平臺的特性,經由KVM(早期為kqemu加速器,現在kqemu已被KVM取代)這個開源的加速器,QEMU能模擬至接近真實電腦的速度,QEMU有兩種主要運作模式:
User mode模擬模式,亦即是用戶模式,
QEMU能引導那些為不同中央處理器編譯的Linux程式,而Wine及Dosemu是其主要目標,
System mode模擬模式,亦即是系統模式,
QEMU能模擬整個電腦系統,包括中央處理器及其他周邊設備,它使得為系統源代碼進行測驗及除錯作業變得容易,其亦能用來在一部主機上模擬數部不同虛擬電腦,
KVM部署與使用
系統環境說明
[root@kvm01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@kvm01 ~]# uname -r
3.10.0-693.el7.x86_64
[root@kvm01 ~]# sestatus
SELinux status: disabled
[root@kvm01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@kvm01 ~]# hostname -I
10.0.0.11
# kvm主機記憶體不能低于4GB
安裝KVM虛擬化軟體
安裝依賴包(可以使用本地yum源)
[root@kvm01 ~]# yum install libvirt* virt-* qemu-kvm* -y
# libvirt # 作用:虛擬機的管理軟體
# virt # virt-install virt-clone 作用:虛擬機的安裝和克隆
# qemu-kvm # qemu-img 作用:復制管理虛擬機的磁盤 管理虛擬機磁盤
啟動服務
[root@kvm01 ~]# systemctl start libvirtd.service
[root@kvm01 ~]# systemctl status libvirtd.servic
安裝VNC軟體(windows版):
下載vnc軟體方法,tightvnc官網: http://www.tightvnc.com
VNC軟體,用于VNC(Virtual Network Computing),為一種使用RFB協議的顯示屏畫面分享及遠程操作軟體,此軟體借由網路,可發送鍵盤與滑鼠的動作及即時的顯示屏畫面,
VNC與作業系統無關,因此可跨平臺使用,例如可用Windows連接到某Linux的電腦,反之亦同,甚至在沒有安裝客戶端程式的電腦中,只要有支持JAVA的瀏覽器,也可使用,
安裝VNC時,使用默認安裝即可,無需安裝server端,(只安裝客戶端)
配置第一臺KVM虛擬機
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 \
--name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 \
--cdrom /opt/CentOS-7.4-x86_64-DVD-1708.iso --network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole
注意:
需要先將鏡像檔案拷貝到 /opt/目錄下,xshell下使用xftp 默認的rz sz不行
VMware需要在配置內開啟虛擬化
使用引數說明
| 引數 | 引數說明 |
|---|---|
| --virt-type HV_TYPE | 要使用的管理程式名稱 (kvm, qemu, xen, ...) |
| --os-type | 系統型別 |
| --os-variant DISTRO_VARIANT | 在客戶機上安裝的作業系統,例如:'fedora18'、'rhel6'、'winxp' 等, |
| -n NAME, --name NAME | 客戶機實體名稱 |
| --memory MEMORY | 配置客戶機虛擬記憶體大小 |
| --vcpus VCPUS | 配置客戶機虛擬 CPU(vcpu) 數量, |
| --disk DISK | 指定存盤的各種選項, |
| -cdrom CDROM | 光驅安裝介質 |
| -w NETWORK, --network NETWORK | 配置客戶機網路介面, |
| --graphics GRAPHICS | 配置客戶機顯示設定, |
| 虛擬化平臺選項: | |
| -v, --hvm | 這個客戶機應該是一個全虛擬化客戶機 |
| -p, --paravirt | 這個客戶機應該是一個半虛擬化客戶機 |
| --container | 這個客戶機應該是一個容器客戶機 |
| --virt-type HV_TYPE | 要使用的管理程式名稱 (kvm, qemu, xen, ...) |
| --arch ARCH | 模擬 CPU 架構 |
| --machine MACHINE | 機器型別為仿真型別 |
| 其它選項: | |
| --noautoconsole | 不要自動嘗試連接到客戶端控制臺 |
| --autostart | 主機啟動時自動啟動域, |
| --noreboot | 安裝完成后不啟動客戶機, |
| 以上資訊通過 " virt-install --help " 獲得, |
在啟動的同時使用vnc連接
然后開始安裝系統
KVM虛擬機管理操作
virsh命令常用引數總結
| 引數 | 引數說明 |
|---|---|
| 基礎操作 | |
| list | 查看虛擬機串列,列出域 |
| start | 啟動虛擬機,開始一個(以前定義的)非活躍的域 |
| shutdown | 關閉虛擬機,關閉一個域 |
| destroy(危險) | 強制關閉虛擬機,銷毀(停止)域 |
| vncdisplay | 查詢虛擬機vnc埠號 |
| reboot | 重啟(有些版本不支持) |
| 配置管理操作 | |
| dumpxml | 匯出主機配置資訊 |
| undefine | 洗掉主機 |
| define | 匯入主機配置 |
| domrename | 對虛擬機進行重命名 |
| 掛起與恢復 | |
| suspend | 掛起虛擬機 |
| resume | 恢復虛擬機 |
| 自啟動管理 | |
| autostart | 虛擬機開機啟動 |
| autostart --disable | 取消虛擬機開機啟動 |
| 以上引數通過 “virsh --help” 獲得, |
KVM虛擬機組態檔位置
[root@kvm ~]# ll /etc/libvirt/qemu/centos7.xml
修改KVM組態檔
修改KVM虛擬機配置的方法
[root@kvm ~]# virsh edit centos7
使用該命令修改可以對檔案進行語法校驗,(如crontable -e)
備份與恢復
備份虛擬機配置(關機時備份):
[root@kvm ~]# virsh dumpxml centos7 > centos7.xml
洗掉虛擬機配置
# 查看
[root@kvm ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
- centos7 關閉
# 洗掉
[root@kvm ~]# virsh undefine centos7
域 centos7 已經被取消定義
[root@kvm ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
匯入虛擬機
# 匯入 備份(dumpxml)
[root@kvm ~]# virsh define centos7.xml
定義域 centos7(從 centos7-off.xml)
# 查看
[root@kvm ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
- centos7 關閉
修改虛擬機名稱
# 重命名
[root@kvm ~]# virsh domrename centos7 web01
Domain successfully renamed
# 查看
[root@kvm ~]# virsh list
Id 名稱 狀態
----------------------------------------------------
9 web01 關閉
虛擬機掛起與恢復
掛起虛擬機
[root@kvm01 ~]# virsh suspend centos7
域 centos7 被掛起
# 查看狀態
[root@kvm01 ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
9 centos7 暫停
恢復虛擬機
[root@kvm01 ~]# virsh resume centos7
域 centos7 被重新恢復
查詢虛擬機vnc埠
[root@kvm ~]# virsh vncdisplay centos7
:0
# :0 即 為 5900 埠,以此類推 :1為5901 ,
開機自啟動設定
# 設定 libvirtd 服務開機自啟動,
[root@kvm ~]# systemctl enabled libvirtd.service
enabled
設定宿主機開機虛擬機在其他
[root@kvm ~]# virsh autostart centos7
域 nfsnobody標記為自動開始
# 實質為創建軟連接
[root@kvm ~]# ll /etc/libvirt/qemu/autostart/centos7.xml
lrwxrwxrwx 1 root root 27 1月 22 12:17 /etc/libvirt/qemu/autostart/centos7.xml -> /etc/libvirt/qemu/centos7.xml
取消開機自啟動
[root@kvm ~]# virsh autostart --disable centos7
域 centos7取消標記為自動開始
kvm虛擬機console登錄
CentOS 7.X 版本console登錄
配置console登錄
在centos7虛擬機內操作(該操作僅限centos7):
[root@kvm01 ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@kvm01 ~]# reboot
# 115200n8:能顯示虛擬機的啟動程序
重啟完成后,使用virsh console 連接虛擬機,
[root@kvm ~]# virsh console centos7
連接到域 centos7
換碼符為 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-327.el7.x86_64 on an x86_64
centos7 login: root
Password:
Last login: Mon Jan 22 12:24:48 from 192.168.122.1
[root@centos7 ~]# w
12:26:11 up 0 min, 1 user, load average: 0.09, 0.03, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root ttyS0 12:26 3.00s 0.02s 0.01s w
CentOS 6.X 版本console登錄
使用virsh console連接CentOS 6虛擬主機方法:
安裝一臺centos6的kvm虛擬機
virt-install --virt-type kvm --os-type=linux --os-variant rhel6 \
--name centos6 --memory 1124 --vcpus 1 \
--disk /data/centos6/centos6.raw,format=raw,size=10 \
--cdrom /data/CentOS-6.9-x86_64-bin-DVD1.iso \
--network network=default --graphics vnc,listen=0.0.0.0,port=5901 \
--noautoconsole
新安裝一臺虛擬機后,是無法通過virsh console 命令連入虛擬機中的,這時我們需要開啟虛擬機的console功能,
以下操作都在虛擬機中進行
1、添加ttyS0的許可,允許root登陸
[root@centos6 ~]# echo "ttyS0" >> /etc/securetty
2、編輯/etc/grub.conf中加入console=ttyS0
在該檔案的第16行,kernel選項后添加
[root@centos6 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /etc/grub.conf
[root@centos6 ~]# sync # 同步配置到 /boot/grub/grub.conf
[root@centos6 ~]# cat -n /etc/grub.conf
1 # grub.conf generated by anaconda
2 #
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/vda3
8 # initrd /initrd-[generic-]version.img
9 #boot=/dev/vda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS 6 (2.6.32-696.el6.x86_64)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=48532582-c271-4c0a-b55f-395fe16cd8aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet console=ttyS0
17 initrd /initramfs-2.6.32-696.el6.x86_64.img
3、編輯/etc/inittab
在最后一行加入內容 S0:12345:respawn:/sbin/agetty ttyS0 115200
[root@centos6 ~]# echo 'S0:12345:respawn:/sbin/agetty ttyS0 115200' >>/etc/inittab
4、以上操作都完成后,重啟虛擬機
[root@centos6 ~]# reboot
以下操作在kvm宿主機上執行
1、檢查虛擬機的狀態
[root@kvm ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
11 nfsnobody running
21 nfsnobody6 running
2、進行連接測驗
[root@kvm ~]# virsh console nfsnobody6
連接到域 nfsnobody6
換碼符為 ^] # 注:退出virsh console連接的方法,使用組合鍵Ctrl+]即可
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
nfsnobody6 login: root
Password:
Last login: Mon Jan 22 05:44:25 on ttyS0
[root@nfsnobody6 ~]# who
root ttyS0 2018-01-22 05:50
# 登陸成功,查看登陸介面為之前設定的ttyS0
KVM虛擬機磁盤、快照與克隆
磁盤管理
KVM qcow2、raw、vmdk等鏡像格式說明:
http://blog.csdn.net/zhengmx100/article/details/53887162
# 創建一塊qcow2的虛擬硬碟(僅測驗使用,無實際意義)
[root@kvm01 data]# qemu-img create -f qcow2 nfsnobody.qcow2 2G
查看當前虛擬機硬碟資訊
[root@kvm01 ~]# qemu-img info /data/nfsnobody.raw
image: /data/nfsnobody.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.1G
raw轉qcow2格式:
# 引數說明
[root@kvm01 data]# qemu-img --help |grep convert
qemu-img convert [-f fmt] [-O output_fmt] filename output_filename
轉換原有磁盤格式
[root@kvm01 data]# qemu-img convert -f raw -O qcow2 nfsnobody.raw nfsnobody.qcow2
修改nfsnobody 虛擬機組態檔
[root@kvm01 data]# virsh edit nfsnobody
修改前:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/data/nfsnobody.raw'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
修改后:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/data/nfsnobody.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
洗掉原磁盤檔案
[root@kvm01 data]# \rm nfsnobody.raw
啟動虛擬機
[root@kvm01 data]# virsh start nfsnobody
[root@kvm01 data]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
22 nfsnobody running
KVM鏈接克隆
鏈接克隆腳本
#!/bin/bash
# kvm link clone scripts
# user nfsnobody
# blog: https://www.nfsnobody.com
# 2018-02-06
###
# init
if [ $# -ne 2 ]
then
echo "Usage: $0 OLD_VMNAME NEW_VMNAME"
exit 2
fi
LOG=/var/log/messages
old_vm=$1
new_vm=$2
new_xml="/tmp/${new_vm}.xml"
. /etc/init.d/functions
# dump old xmlfile
virsh dumpxml $old_vm >$new_xml
old_disk=`awk -F "'" '/source file/{print $2}' $new_xml`
tmp_dir=`dirname $old_disk`
new_disk=${tmp_dir}/${new_vm}.qcow2
# make link disk
qemu-img create -f qcow2 -b $old_disk $new_disk &>> $LOG
# make over xml info
sed -i '/uuid/d' $new_xml
sed -i '/mac address/d' $new_xml
sed -i '2s#'$old_vm'#'$new_vm'#' $new_xml
sed -i "s#$old_disk#$new_disk#g" $new_xml
sed -i '/source mode/d' $new_xml
# import new xml file
virsh define $new_xml &>> $LOG
# start new vm
virsh start $new_vm &>> $LOG
if [ $? -eq 0 ]
then
action "vmhost $new_vm start" /bin/true
else
action "vmhost $new_vm start" /bin/false
echo "log info : $LOG"
fi
# END
\rm $new_xml
說明:
手動克隆
第一步:復制虛擬磁盤檔案
第二步:修改xml組態檔
1)name
2)uuid
3)虛擬磁盤存盤路徑
4)mac地址
腳本實作思路
1) 備份old_vm的組態檔,并重定向生成一個新的虛擬機組態檔
2)取出old_vm的磁盤路徑
3)創建新的鏈接磁盤檔案
4) 修改xml組態檔
5) 匯入新虛擬機
6)啟動測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/141381.html
標籤:Linux
