kvm虛擬化環境中的時區設置


guest OS時間保持

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_clocksource
kvm-clock

在kvm-clock方式下,guest OS不能直接訪問Host時鍾,Host把系統時間寫入一個guest可以讀取的內存頁,這樣guest就可以讀取此內存頁設置自身硬件時間,但是Host並不是實時更新時間到此內存頁,而是在發生一個vm event(vm關機,重啟等)時才更新,因此此種方式也不能保持guest時間准確無誤

在繼續之前,我們要先理解系統時間和硬件時間等概念

UTC時間 與 本地時間

UTC時間:又稱世界標准時間、世界統一時間,UTC是以原子鍾校准的,世界其它地區是以此為基准時間加上自己時區來設置其本地時間的

本地時間:由於處在不同的時區,本地時間一般與UTC是不同的,換算方法就是

本地時間 = UTC + 時區 或 UTC = 本地時間 - 時區

時區東為正,西為負,在中國,時區為東八區,也就是 +8區,本地時間都使用北京時間,在linux上顯示就是 CST, 所以CST=UTC+(+8小時) 或 UTC=CST-(+8小時)

(China Standard Time,中國標准時,注意美國的中部標准時Central Standard Time也縮寫為CST)

系統時間 與 硬件時間

硬件時間:主板上BIOS中的時間,由主板電池供電來維持運行,系統開機時要讀取這個時間,並根據它來設定系統時間(注意:系統啟動時根據硬件時間設定系統時間的過程可能存在時區換算,根據/etc/localtime)

系統時間: 就是我們執行 date 命令看到的時間,linux系統下所有的時間調用(除了直接訪問硬件時間的命令)都是使用的這個時間。

/etc/localtime 這個文件用來設置系統的時區,將 /usr/share/zoneinfo/ 中相應時區文件拷貝到/etc下並重命名為 localtime 即可修改時區設置(也可以使用tzselect命令修改),而且這種修改對 date 命令是即時生效的。不論是 date 還是 hwclock 都會用到這個文件,系統會根據這個文件的時區設置來進行UTC和本地時間之間的換算。

libvirt中設置虛擬機硬件時鍾

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"選項,是用於配置虛擬機硬件時鍾,虛擬機中的系統時間還要再加上相應的時區換算得到,根據以上分析,集群環境多台虛擬機時間配置需要以下幾步:

  1. libvirt中設置正確的"clock offset"
  2. 虛擬機中設置正確的時區(/etc/localtime)
  3. 搭建內部ntp服務器,每個五分鍾進行一次時間同步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM