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