从网上搜索到的虚拟化笔记
第一課時
[S1 虛擬化與云計算]
通過網絡獲取所需服務
分為三類:
SaaS EndUsers 基礎設施類
PaaS ApplicationDeveloper 平臺服務
IaaS NetworkArchitects 軟件服務
私有云:
1.部署在企業內部網絡
2.部署在云服務商上
現大規模商用的廠家
亞馬遜IaaS 全球最大的公有云服務提供商
威瑞VMware vSphere 私有云占有率最高的虛擬化解決方案
思杰Citrix Xen
RHEV
IBM藍云
虛擬化分類:
1.軟件虛擬化
2.硬件方案
或
1.準虛擬化 缺乏硬件支持情況
2.全虛擬化
KVM:Kernel Virtual Machine:內核虛擬機
優勢:
1.內存管理:Kernel Same-page Merging,KSM)
2.存儲
3.設備驅動程序
4.性能和可伸縮性:KVM宿主機支持4096個CPU核心,64TB內存
[S2KVM核心基礎功能]
硬件平臺和軟件版本說明
1.硬件平臺:硬件要支持輔助虛擬化(Intel VT-x)
2.KVM內核:在linux.git源碼倉庫中執行
# git tag
v3.4-rc6
v3.4-rc7
v3.5-rc1
...
#git checkout v3.5
在kvm.git中,沒有v標簽,可以
# git log
# git checkout 73bcc499
在qemu-kvm.git中,可以使用git tag
在編譯qemu時,configure加上 --disable-sdl
使用qemu命令行,默認開啟對KVM支持,# qemu-kvm 查看KVM默認打開,需要啟動QEMU命令行上加上-enable-kvm
CPU配置
QEMU/KVM為客戶機提供一套完整的硬件系統環境
客戶機所擁有的CPU是vCPU
在KVM環境中,每個客戶機都是一個標準的Linux進程(QEMU進程)
每一個vCPU在宿主機中是QEMU進程派生的一個普通線程
客戶機的命令模擬實現:
1.用戶模式
處理I/O模擬和管理,由QEMU代碼實現
2.內核模式
處理需要高性能和安全相關指令。處理客戶模式下I/O指令或其他特權指令引起的退出,處理影子內存管理
3.客戶模式
執行Guest中的大部分指令,I/O和一些特權指令除外(引起VM-Exit,被hypervisor截獲并模擬)
SMP支持
多處理,多進程
邏輯CPU個數
# cat /proc/cpuinfo | grep "pro"|wc -l
多線程支持
# cat /proc/cpuinfo | grep -qi "core id" |echo $?
實際CPU個數
# cat /proc/cpuinfo | grep "physical id" |sort | uniq | wc -l
每個物理CPU中邏輯CPU的個數
logical_cpu_per_phy_cpu=$(cat /proc/cpuinfo |grep "siblings"| sort | uniq | awk -F: '{print $2}')
echo $logical_cpu_per_phy_cpu
在qemu的命令行中,模擬客戶機的SMP系統,參數
-qemu n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
n 邏輯cpu數量
maxcpus 最大可被使用的cpu數量
cores 每個cpu socket上的core數量
threads 每個cpu core上的線程數
sockets 客戶機中看的總的cops socket數量
8個客戶機logical cpu即宿主機的8個線程
logical cpu 8
physical cpu 2
core cpu 2
logical cpu 4
8個邏輯cpu
2個物理
PUC socket 每個socket有兩個核,每個核有2個線程
CPU模型
查看當前qemu支持的所有CPU模型
# qemu-system-x86_64 -cpu ?
啟動鏡像時,可以使用上命令的結果的CPU模型啟動
# qemu-system-x86_64 /root/.../...img -cpu SandyBridge
隔離其他CPU不供客戶機使用
grub 文件
root=UUID.... isolcpus=2,3
查看隔離成功
# ps -eLo psr|grep 0|wc-l
然后改變0,檢查各個CPU的進程數
把一個有兩個的vCPU的客戶機綁定到宿主機的兩個CPU上
# qemu-system-x86_64 rhel6u3.img -smp 2 -m 512 -daemonize
查看代表vCPU的QEMU的線程
#ps -eLo ruser,pid,ppid,lwp,psr,args |grep qemgrep -v grep
綁定整個客戶機的QEMU進程,運行在CPU2上
#taskset -p 0x4 3963
#綁定第一個cCPU線程,使其運行在cpu2上
# taskset -p 0x4 3967
第二個
#taskset -p 0x8 3968
內存配置
QEMU啟動命令
-m megs 設置客戶機的內存為MB大小
# free -m 查看內存
# dmesg|grep Memory
內存轉換
客戶機->宿主機(GVA->GPA)執行者:客戶機操作系統
客戶機<-宿主機(GVA<-GPA)執行者:hypervisor
在EPT加入之后,直接在硬件上支持虛擬化內存地址轉換
查看支持EPT VPID
# grep ept /proc/cpuinfo
# cat /sys/module/kvm_intel/parameters/ept
# cat /sys/module/kvm_intel/parameters/vpid
加載ept vpid模塊
# modprobe kvm_intel ept=0,vpid=0
# rmmod kvm_intel
# modprobe kvm_intelept=1,vpid=1
大頁
x86默認提供4kb內存頁面
x86_64支持2MB大小的大頁
# getconf PAGESIZE
# cat /proc/meminfo
掛載大頁
# mount -t hugetlbfs hugetlbfs /dev/hugepages
# sysctl vm.nr_hugepages=1024
然后讓qemu啟動項內存參數使用大頁
-mem-path /dev/hugepages
掛載大頁內存可以顯著提高客戶機性能,但是,不能使用swap
內存過載使用
1.內存交換(swaping)
2.氣球(ballooning):通過virio_balloon驅動來實現宿主機Hyperviosr和宿主機的合作
3.頁共享(page sharing):通過KSMkernel Samepage Merging合并多個客戶機使用的相同內存頁。
存儲配置
存儲配置和啟動順序
存儲的基本配置選項
-hda file :將file作為客戶機第一個IDE設備,序號0,客戶機中表現/dev/hda或/dev/sda設備
-hdb /-hdc..
-fda file 軟盤
-cdrom,cdrom作為hdc,不能共同使用
-mtdblock file 作為客戶機自帶的一個FLASH存儲器 閃存
-sd file sd 卡
驅動器
-driver file=file 文件作為鏡像文件加載到客戶機的驅動器中
if=interface 指定驅動器使用的接口類型
bus=bus,unit=unit 總線編號,單元編號
index=index 索引編號
media=media 設置驅動器中沒接的類型
snapshot=snapshot on/off ~~~~~
....
配置客戶機啟動順序的參數
-boot order=drivers,once=drives,menu=on|off,splash=splashfile,splash-time=sp-time
ex:-boot order=dc,menu=on 按F12
存儲配置示例
啟動客戶機命令
# qemu-system-x86_64 -m 1024 -smp 2 rhel6u3.img
# qemu-system-x86_64 -m 1024 -smp 2-hda rhel6u3.img
# qemu-system-x86_64 -m 1024 -smp 2-drive file=rhl6u3.img,if=ide,cache=writehrough?
qemu命令
qemu-img:qemu磁盤管理工具
check [-f fmt] filename
fmt:qcow2 qed vdi
create [-f fmt][-o options] filename [size] 創建鏡像文件
convert 鏡像轉換
# qemu-img convertmy-vmware.vmdk my-kvm.img #用這個轉換
# qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.gcow2
info [-f fmt] filename
展示filename鏡像文件信息
snapshot [-l|-a snapshot|-c snapshot|-d snapshot] filenamne
rebase
resize filename [+|-] size
QEMU支持的鏡像文件格式
1.raw
2.host_device
3.qcow2
4.qcow
cow,vid.vmdk,vpc,sheepdog
客戶機存儲方式
1.本地
2.物理磁盤或磁盤分區
3.LVM
4.NFS
5.ISCSI
6.本地或光纖通道LUN
7.GFS2
高性能IO使用半虛擬化virtio作為磁盤驅動程序
QEMU支持的網絡模式
1.基于網橋(bridge)的虛擬網卡
2.基于NAT(Network Address Translation)的虛擬網絡
3.QEMU內置的用戶模式網絡
4.直接分配網絡設備的網絡(包括VT-d 和 SR-IOV)
-net nic,model=? 會列出默認虛擬網卡
-net nic,model=e1000 會模擬出一個interl e1000的網卡供客戶使用
第二課時
半虛擬化驅動
KVM必須要求有硬件虛擬化輔助技術(Intel VT-x,AMD-V)的hypervisor
(QEMU提供了全虛擬化環境
缺點:每次I/O操作路徑較長,有較多的VMentry,VMExit,需要多次上下文切換,也需要多次數據復制,性能較差。)
半虛擬化驅動virtio:利用物理機驅動批量處理虛擬機的I/O請求,效率高。
linux中virtio驅動
內核已自帶
CONFIG.*VIRTIO.*=m ?#內核編譯配置文件與virtio有關的
編譯好內核后,查看驅動
# find /lib/modules/2.6.32-279.el6.x86_64/ -name "virtio*.ko"
會顯示一些virtio_net.ko?virtio_pci.ko virt-ring.ko
查看已加載的
# lsmod|grep virtio
2.安裝windows中的virtio驅動
# yum install virto-win
安裝后可看到/usr/share/virtio-win/目錄下有一個virtio-win.iso文件。
啟動win7客戶機,
#qemu-system-x86_64 win7.img -smp 2 -m 2048 -cdrom /usr/share/virti-win/virtio-win.iso -vnc :0 -usbdevice tablet
然后進入win7,安裝驅動
安裝后使用virtio驅動后重新啟動
使用virtio_balloon
系統運行時改變內存大小
啟動virtio_balloon
編譯內核時選項 CONFIG_VIRTIO_BALLOON=m
操作步驟
1)啟動客戶機
# qemu-system-x86_64 rhel6u3.img -smp2 -m 2048-balloon virtio
2)在客戶機中查看內存使用情況
# lspci
查看是否加載驅動
# lspci -s 00:04.0 -v|grep virtio-pci
# free -m
3)在qemu monitor 中查看和改變客戶機占用的內存
(qemu) info balloon
balloon:actual=2048
(qemu) balloon 512
(qemu)info balloon
balloon: actual=512
-----
KVM動態調整內存工具:virsh setmem <domain-id or domain-name><Amount of memory in KB>
設備直接分配(VT-d)
VT-d
1)Emulated device :QEMU純軟件模擬設備
2) Virtio device :實現VIRTIO API的半虛擬化驅動的設備
3) PCI device assignment: PCI 設備直接分配
VT-D不需要與Hypervisor(KVM)參與,極大的提高IO性能。
需要硬件支持 VT-D
配置:
1)打開主板VT-D選項
2)編譯配置,REDHAT6.3+默認
啟動系統后
# dmesg | grep DMAR -i
# dmesg | grep IOMMU -i # 如未打開 那么在內核配置文件中CONFIG_PCI_STUB=m
3)在宿主機中隱藏設備
# modprobe pci_stub
# lsmod | grep stub
ls /sys/bus/pci/drivers/pci-stub/
都有顯示回復即可
查看設備的vendorID deviceID?
# lspci -Dn -s 08:00:00
-D domain,-n 用數字顯示ID,-s
綁定設備到pci_stub驅動
echo -n "8086 10b9" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:08:00.0 > /sys/bus/pci/devices/0000:08:00.0/driver/unbind
echo 0000:08:00.0 > /sys/bus/pci/drivers/pci-stub/bind
# lspci -k -s 08:00.0
設備驅動是intel的e1000e,綁定后為pci_stub
第三課時
主、從服務器系統版本:
Red Hat Enterprise Linux Server release 5.5 (Tikanga
客戶端系統版本:
Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
配置過程
1,配置主服務器
為便于區分主從服務器,建議修改node3,node9的主機名
將node3修改為nis,將node9 修改為slavenis
1)編輯/etc/sysconfig /network文件
HOSTNAME=nis
2)修改/etc/hosts文件
192.168.111.3nis.godson.ictnisnis
192.168.111.9 slavenis.godson.ictslavenisslavenis
重啟網絡:
/etc/init.d/network restart
3)修改/etc/yp.conf文件,加入一條
domain godson.ict server slavenis ?#指定備用服務器
4)修改/var/yp/Makefile文件
NOPUSH=false ?#允許主服務器向從服務器傳遞數據庫文件
vim /var/yp/ypservices ?添加從服務器主機名
slavenis.godson.ict?
重啟服務:
/etc/init.d/ypserv restart
/etc/init.d/ypbind restart
/etc/init.d/yppasswdd restart
/etc/init.d/ypxfrd restart
5)查看服務是否啟動:
rpcinfo -p
6)將服務設置開機啟動:
chkconfig --level 35 ypxfrd on
7)建立主服務器的數據庫文件:
/usr/lib64/yp/ypinit -m
2,配置從服務器
1)修改/etc/sysconfig/network文件
HOSTNAME=slavenis
NISDOMAIN=godson.ict
2)修改/etc/rc.local文件
echo “/bin/nisdomainname godson.ict”>>/etc/rc.local
3)修改/etc/hosts文件
192.168.111.3nis.godson.ictnisnis
192.168.111.9 slavenis.godson.ictslavenisslavenis
重啟網絡:
/etc/init.d/network restart
4)安裝rpm包:ypserv,ypbind,yp-tools,portmap
5)修改/etc/nsswitch.conf文件
6)修改/etc/yp.conf文件
domain godson.ict server nis
domain godson.ict server slavenis
ypserver nis ? ? ? ? ??
7)修改/etc/ypserv.conf文件
* ? ? ? ? ?: godson.ict : * ? ?: none
重啟服務:
/etc/init.d/ypserv restart
/etc/init.d/ypxfrd restart
/etc/init.d/ypbind restart
/etc/init.d/portmap restart
8)將服務設置開機啟動:
chkconfig --level 35 ypxfrd on
chkconfig --level 35 ypbind on
chkconfig --level 35 ypserv on
chkconfig --level 35 portmap on
9)同步主服務器的數據庫文件:
/usr/lib64/yp/ypinit -s nis
轉載于:https://blog.51cto.com/hobowizard/1782392
總結
以上是生活随笔為你收集整理的从网上搜索到的虚拟化笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51CTO学院三周年-最受学员喜爱讲师评
- 下一篇: Android实现双击事件的两种方式