首頁 > 軟體

高效執行Linux虛擬機器的六大技巧

2020-06-16 17:49:37

Linux在企業資料中心已經盛行多年。LAMP服務、Web伺服器、代理伺服器、防火牆和負載平衡器,只是Linux為基本作業系統提供的幾個用例。在過去十年,隨著易用性的提高和文件的完善,許多Linux發行版使用量明顯增加。在增長階段,我們還將虛擬化技術引入資料中心。與此同時,在執行Linux虛擬機器時要留意一些注意事項。

邏輯卷管理

最近許多Linux的發行版都包含邏輯卷管理(LVM)這一技術,因為它屬於磁碟和分割區管理,允許管理員執行大量的任務。一些分段特性——擴充套件或跨多個磁碟分段資料——在虛擬化的世界裡可能不太普遍,使用者通常是將資料儲存在同一儲存區域網路或資料儲存區。除了這些,LVM還提供其他有趣的功能。通過啟用LVM,管理員可以擴充套件網路檔案系統,在工作中擴充套件不同的分割區和檔案系統,同時保持檔案系統線上和可存取。根據嚴格的合規要求,LVM允許我們在沒有呼叫vSphere所帶功能的情況下執行基於捲的快照用於備份和恢復。

我的建議是,如果在工作負載你有嚴格的可用性策略並利用線上調整功能,就要將LVM與虛擬機器分割區。如果你不需要大量的正常執行時間或不打算安裝Linux在單獨的分割區執行,LVM的複雜性將遠遠大於好處,最終禁用LVM。

分割區選項

預設安裝的Linux通常提示使用者僅僅使用一個分割區的所有檔案。在某些情況下這樣做沒錯,但當你試著調整和改善虛擬機器安全性和效能時,每個檔案有單獨的分割區如/tmp、/var、/home、/usr,這樣做更有意義——特別是如果你想要每個分割區有不同的安裝選項。通過利用/etc/fstab檔案,可以在相應的行指定適用於不同分割區的安裝選項,如下所示:

UUID=0aef28b9-3d11-4ab4-a0d4-d53d7b4d3aa4 /tmp ext4 defaults,noexec 1 2

例如Web伺服器,一個最常見的用例為Linux虛擬機器,我們很快就會發現一些“預設”安裝選項最終破壞安全以及績效計劃。

Noatime/atime/relatime:這些安裝選項決定如何處理包含在分割區檔案上的時間戳。在舊的Linux發行版中,預設是“一次”,這意味著每讀寫一次,作業系統會為檔案後設資料寫一個時間戳——是的,僅僅讀呼叫次數。一直使用對外提供檔案的Web伺服器,你可以想象這個過程的開銷。通過指定存放Web伺服器資料分割區上的“noatime”,你可以不更新存取時間,減輕伺服器的開銷。新發行版預設選項是“relatime”,它的功能很強大, 如果修改時間更新,只更新存取時間。

Noexec/exec: 在給定的分割區禁用或啟用二進位制檔案執行。對於Web伺服器的例子而言,用“noexec”安裝/tmp分割區的意義重大。事實上,許多硬化指南建議使用這個選項來提高安全性。

使用者更改存取時間引數時必須謹慎。一些應用程式,比如郵件相關的功能,需要一個完整的“一次”安裝選項。在Web伺服器的例子中,只要安全指導方針允許它存取,可以用“noatime”安裝Web伺服器資料。就noexec而言,明智地使用這個選項,很多自動安裝程式和安裝包就解壓到/tmp並從那兒開始執行。它很容易開啟和關閉,但我至少可以為/tmp新增noexec。

VMXNET3和PVSCSI

很長一段時間,大家都推薦在虛擬機器中利用VMXNET3網路介面卡和超虛擬化磁碟介面卡。在基於Windows系統的虛擬機器,我們可以僅僅指定這些還有利用VMware工具自動安裝的驅動。利用這個硬體,Linux帶來了一些挑戰。首先,新版的Linux發行版通常有自己的VMXNET3介面卡和驅動程式,即使安裝了VMware工具,也將它們作為預設驅動程式。

舊的Linux發行版可能包含一個過時的VMXNET3驅動版本,可能不會為你提供包含在VMware工具版本的完整特性集。VMware的KB2020567概述如何在VMXNET驅動啟用某些特性。如果你想在VMware工具安裝VMXNET3驅動,可以在VMware工具安裝時指定以下選項:

./vmware-install.pl –clobber-kernel-modules=vmxnet3

低成本的CPU想要獲得一些額外的吞吐量,超虛擬化SCSI介面卡是一個不錯的方式。做出這個選擇之前一定要檢查所支援的作業系統列表,以確保超虛擬化SCSI介面卡支援核心或分布。

如果可能的話,我建議管理員使用VMXNET3和PVSCSI。如果使用一個舊的核心,就安裝VMware工具VMXNET3版本。如果你使用一個更新的核心,在分布中使用本地Linux驅動程式。

記憶體管理

Linux作業系統不斷將儲存頁面從實體記憶體頁移動到本地交換分割區,這是由設計決定的。事實上,VMware利用記憶體管理功能在做同樣的事。但是Linux記憶體管理的行為有點不同,即使實體記憶體——目前虛擬記憶體可用,也會移動記憶體頁面。為了減少Linux 虛擬機器內部交換活動,我們可以調整一個“swapiness”值。更高的值表示更多的運動,而較低的值表示記憶體不會移動。要調整這個值,只需在/etc/sysctl.conf 新增“Vm.swappiness=##”,重新啟動後將“##”替換為你想要的值。

我喜歡將這個值替換成一個低於預設值60的數位。同時使用作業系統和vSphere管理你的記憶體交換是沒有意義的。而且,這取決於應用程式,但我通常設定這個值為15至20。

I/O排程器

ESXi在管理記憶體方面作用很大,當它屬於I/O排程器並寫入磁碟時,它又呈現另一種狀態。此外,Linux作業系統內部重複一些這方面的功能。2.6的核心,大多數發行版已經利用Completely Fair Queuing作為預設的I/O排程器。其他可用的是NOOP,Anticipatory和Deadline。VMware只解釋了如何改變這個值還有你為什麼想要更改,排程兩次I/O是沒有意義的。簡而言之,通過附加機器轉換到grub核心條目,使用Linux核心的預設I/O排程器可以進行切換。

不需要先安排作業系統再安排到管理程式。我建議使用NOOP I/O排程器,因為它沒有優化磁碟I/O,並允許vSphere全權管理。

刪除未使用的硬體並禁用不必要的服務

在過去的一年裡,你有多少次在虛擬機器中使用虛擬軟碟和內部的電腦揚聲器呢?如果你不打算使用這些裝置,就把將它們拉入黑名單。刪除軟碟的命令如下:

echo "blacklist floppy" | tee /etc/modprobe.d/blacklist-floppy.conf

rmmod floppy

update-initramfs -u

也沒有必要糾結未使用的硬體。如果你還在使用,不妨禁用任何虛擬控制台。這可以在/etc/inittab中通過如下操作實現:

1:2345:respawn:/sbin/getty 38400 tty1

2:23:respawn:/sbin/getty 38400 tty2

#3:23:respawn:/sbin/getty 38400 tty3

#4:23:respawn:/sbin/getty 38400 tty4

#5:23:respawn:/sbin/getty 38400 tty5

#6:23:respawn:/sbin/getty 38400 tty6

我建議你卸掉軟碟。請記住,你還必須刪除虛擬機器的硬體設定,並在虛擬機器的BIOS禁用它。關於其他服務,你可以將它們列入黑名單,包括監視磁碟陣列設定(mptctl), pcspker, snd_pcm, snd_page_alloc, snd_timer, snd, snd_soundcore, coretemp, parport and parport_pc.

將這些服務拉入黑名單之前,你要確保沒有使用它們。同時,我總會開啟幾個可能用到的虛擬控制台,但開啟六個就有點多了。

這是一些執行Linux虛擬機器的注意事項。考慮到效能收益,每個人應視情況而定。做出一些細微的調整,你可能會看到更多效能方面的提升和一些退化的效能。像往常一樣,更改之前,要在實驗室環境中進行測試。技術是不斷變化的,所以通過提前測試可以達到最佳效果。如果你有任何其他技巧或建議,可以在評論中提出。

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-11/125540.htm


IT145.com E-mail:sddin#qq.com