VMware網(wǎng)絡(luò)設(shè)置解決虛擬機(jī)數(shù)據(jù)包丟失問(wèn)題
即使是設(shè)計(jì)良好的VMware網(wǎng)絡(luò)也會(huì)遇到虛擬化帶來(lái)的一些問(wèn)題,例如虛擬機(jī)的數(shù)據(jù)包丟失嚴(yán)重。適當(dāng)?shù)卣{(diào)整VMware網(wǎng)絡(luò)設(shè)置可以在不改變子OS的前提下解決數(shù)據(jù)包丟失率高的問(wèn)題。
正常的網(wǎng)絡(luò)連接中很少會(huì)出現(xiàn)多個(gè)包丟失的現(xiàn)象,每成功接收或轉(zhuǎn)發(fā)100,000個(gè)數(shù)據(jù)包最多只會(huì)有幾個(gè)包丟失(如圖1)。在Linux虛擬機(jī)中,通過(guò)ifconfig命令可以很輕松地監(jiān)控到這種狀態(tài)。

圖1. 通常以太網(wǎng)卡是不會(huì)丟包的
當(dāng)虛擬機(jī)的網(wǎng)絡(luò)在突發(fā)大量訪問(wèn)的情況下,可能會(huì)發(fā)生多個(gè)包丟失,這樣就需要調(diào)整虛擬機(jī)的網(wǎng)絡(luò)設(shè)置。首先,確認(rèn)虛擬機(jī)使用了VMXNET3虛擬網(wǎng)卡驅(qū)動(dòng)。這樣,在Linux宿主機(jī)的特定情況下,當(dāng)大數(shù)據(jù)文件在高帶寬的網(wǎng)絡(luò)上傳輸時(shí)會(huì)發(fā)生多數(shù)據(jù)包丟失。關(guān)閉接收和轉(zhuǎn)發(fā)校驗(yàn)總和可以解決這種情況。因?yàn)樾r?yàn)總和的作用是停止錯(cuò)誤包的發(fā)送,這樣做會(huì)增加風(fēng)險(xiǎn)。考慮到以太網(wǎng)卡的錯(cuò)誤率通常低于百萬(wàn)分之一,風(fēng)險(xiǎn)的級(jí)別并不高。
使用Linux ethtool工具來(lái)關(guān)閉VMware網(wǎng)絡(luò)設(shè)置中的接收和轉(zhuǎn)發(fā)校驗(yàn)總和,在命令行窗口中以root賬戶登錄ethtool。例如關(guān)閉網(wǎng)卡eth0的校驗(yàn)總和命令如下:readethtool --offload eth0 rx off tx off;
命令生效后,打開(kāi)相應(yīng)網(wǎng)卡的配置文件:
/etc/sysconfig/network/ifcfg-eth0 ( SUSE) 或 /etc/sysconfig/network-scripts/ifcfg-eth0 (Red Hat )
同時(shí)把ETHTOOL_OPTIONS參數(shù)變?yōu)镋THTOOL_OPTIONS='--offload eth0 rx off tx off'
如果依然存在丟包問(wèn)題,嘗試用ethtool工具增加接收隊(duì)列的緩沖區(qū)大小。默認(rèn)情況下,緩存設(shè)為256,可以設(shè)置的***值為4096。重新設(shè)置緩存大小為512,使用命令ethtool -G eth0 512。如果結(jié)果不理想,嘗試更大的值。
遇到Windows虛擬機(jī)的高丟包率就需要調(diào)整VMXNET3驅(qū)動(dòng)的網(wǎng)絡(luò)設(shè)置。在Device Manager中右鍵單擊VMXNET3驅(qū)動(dòng)并選擇Properties。在Advanced頁(yè)中有兩個(gè)參數(shù):Small RX Buffers和RX Ring #1 Size。適當(dāng)增加這些參數(shù)的值然后測(cè)試能否有改善。逐步加大該值直到問(wèn)題解決。
多數(shù)情況下,這些設(shè)置可以降低虛擬機(jī)的丟包率。如果調(diào)整網(wǎng)絡(luò)參數(shù)失敗,或許就需要解決虛擬機(jī)其它的一些性能相關(guān)問(wèn)題,而不是虛擬機(jī)和ESXi平臺(tái)之間的VMware網(wǎng)絡(luò)設(shè)置。咨詢宿主機(jī)OS的相關(guān)專家,應(yīng)該有很多可以調(diào)整性能的相關(guān)參數(shù)。當(dāng)心更改了錯(cuò)誤的參數(shù)可能會(huì)對(duì)虛擬機(jī)帶來(lái)明顯的負(fù)面影響。