kvm技術是全虛擬化,guest os並不需要做修改就可以直接執行,然而在計時方面卻存在問題,guest os計時的一種方式是通過時鐘中斷計數,進而換算得到,但host產生的時鐘中斷不能及時到達所有guest os,因為guest os中的中斷並不是真正的硬體中斷,它是由host注入的中斷
許多網路應用,web中的sessions驗證等,都會呼叫系統時間,guest os中若時間有誤,則會引起程式出錯,為此,kvm給guest vms提供了乙個半虛擬化時鐘(kvm-clock),在rhel5.5及其以上版本中,都使用了kvm-clock作為預設時鐘源,可以在guest 中使用下面命令檢視是否使用了kvm-clock
cat /sys/devices/system/clocksource/clocksource0/current_clocksourcekvm-clock
在kvm-clock方式下,guest os不能直接訪問host時鐘,host把系統時間寫入乙個guest可以讀取的記憶體頁,這樣guest就可以讀取此記憶體頁設定自身硬體時間,但是host並不是實時更新時間到此記憶體頁,而是在發生乙個vm event(vm關機,重啟等)時才更新,因此此種方式也不能保持guest時間準確無誤
在繼續之前,我們要先理解系統時間和硬體時間等概念
本地時間 = utc + 時區 或 utc = 本地時間 - 時區
時區東為正,西為負,在中國,時區為東八區,也就是 +8區,本地時間都使用北京時間,在linux上顯示就是 cst, 所以cst=utc+(+8小時) 或 utc=cst-(+8小時)
(china standard time,中國標準時,注意美國的中部標準時central standard time也縮寫為cst)
/etc/localtime 這個檔案用來設定系統的時區,將 /usr/share/zoneinfo/ 中相應時區檔案拷貝到/etc下並重命名為 localtime 即可修改時區設定(也可以使用tzselect命令修改),而且這種修改對 date 命令是即時生效的。不論是 date 還是 hwclock 都會用到這個檔案,系統會根據這個檔案的時區設定來進行utc和本地時間之間的換算。
kvm虛擬機器一般使用libvirt進行管理,在虛擬機器配置的xml檔案中,有關於虛擬機器硬體時鐘設定項
<clock
offset
='localtime'
>
clock
>
clock的offset屬性有"utc","localtime","timezone","variable"四個可選項
如果guest os是linux系統,應該選用"utc",guest os在啟動時便會向host同步一次utc時間,然後根據/etc/localtime中設定的時區,來計算系統時間
如果guest os是windows系統,則應該選用"localtime",guest os在啟動時向host同步一次系統時間
在虛擬機器集群環境中,不能夠只依賴kvm管理程序提供的計時功能,文章開頭也提及這種計時並不很精確,而libvirt中配置的"clock offset"選項,是用於配置虛擬機器硬體時鐘,虛擬機器中的系統時間還要再加上相應的時區換算得到,根據以上分析,集群環境多台虛擬機器時間配置需要以下幾步:
libvirt中設定正確的"clock offset"
虛擬機器中設定正確的時區(/etc/localtime)
搭建內部ntp伺服器,每個五分鐘進行一次時間同步
linux虛擬化之KVM虛擬化 kvm的安裝
kvm 是基於核心的虛擬機器 kernel based virtual machine 它是linux 的乙個核心模組,核心版本需要在linux 2.6.20以上。kvm虛擬機器是基於硬體輔助虛擬化技術。目前支援這個功能的應用為qume。所以qume和kvm虛擬機器磁碟的指令相關。ps 後面提到這個...
Linux下KVM虛擬化環境部署
環境要求 rhel5.4 64位系統以上版本才支援。kvm 2.6.20以上,cpu支援虛擬化指令集 intel vt amd v 物理主機bios上設定cpu支援虛擬化 虛擬機器設定中勾選intel vt x或amd v rvi v 一 安裝rhel6 7或centos6 7 英文最小化安裝,配置...
kvm虛擬化的巢狀
巢狀虛擬化是指在虛擬化的客戶機中執行乙個hypervisor,從而再虛擬化執行乙個客戶機。巢狀虛擬化不僅包括相同hypervisor的巢狀 如kvm巢狀kvm xen巢狀xen等 也包括不同hypervisor的相互巢狀 如kvm巢狀巢狀xen等 根據巢狀虛擬化的概念可知,其不僅包括兩層巢狀 如kv...