服务器虚拟化的大趋势正朝提高宿主服务器内虚拟机(VM)密度的方向发展,随着VM密度的增加,每VM的硬件成本逐渐下降。网络管理员通常为服务器配置尽可能多的CPU和内存,但服务器的网络端口却限制了可以托管的VM数量,因为每个VM都需要网络端口和外界通信,通常情况下,多个VM共享一个网络端口,带宽也是共享的,这样问题就来了,如果遇到运行网络密集型应用程序的VM,情况会变得很糟糕,网络带宽不够用,网络堵塞在虚拟世界中一样存在。
令人欣慰的是,可以通过某些手段增加提供给VM的可用带宽,进而使增加VM密度成为现实。
增加网络端口
最简单的办法是在服务器上加装网卡,一般情况下,服务器出厂时只在主板上集成了一或两个集成网卡接口,另外就是扩展槽,我们可以通过扩展槽增加网络端口数量,但需要注意的是,应该尽量选择多端口的网卡,如有些PCI-X和PCI Express网卡带有4个独立的端口。
另一种办法是使用外接网卡,如USB网卡。但对于服务器而言,我们是不推荐使用USB网卡的,特别是有些虚拟化平台还不支持将USB设备暴露给VM,即便如此,有时候还是可以派上用场的。
不管怎么分配网络端口,最好为管理通信预留一个端口,不能将所有网络端口全部分配给VM,VM和宿主服务器之间必须留出一个管理通道,如果你的虚拟化软件支持将USB网卡暴露给VM,你可以预留一个USB网卡用于VM和宿主服务器之间通信。
尽管可以在多个VM之间共享一块网卡,问题是单块网卡提供的带宽是有限的,绑定到该网卡的所有VM共同使用带宽。如果可能,你应该尽可能使用更快速的网卡,如使用10Gb以上网卡,一块可以顶几块千兆网卡。
使用虚拟网络
如果不能增加物理网卡,还有一个办法,那就是尽可能减少VM对网络带宽的需求。
实现这个目标的办法之一是创建虚拟网络,虚拟网络完全存在于宿主服务器内部,如果你使用Microsoft Hyper-V或VMware,默认至少创建了一个虚拟网络,VM使用的每个物理网卡连接到虚拟交换机,虚拟交换机按顺序连接到每个VM的虚拟网卡。
虚拟网络为VM提供到物理网络的连接,但它不能访问物理网络,这样我们就可以借助虚拟网络的作用卸载一部分原先要使用物理网络的通信,从而减少物理网络带宽需求。例如,假设你有一个虚拟化的Web服务器,后端SQL Server数据库运行在另一个虚拟机上,在Web服务器和数据库服务器之间创建一个虚拟网络,这样数据库查询就不会经过物理网络端口,便间接地增加了VM的可用带宽。
根据VM需要分配网络端口
创建虚拟网络可以将大量网络通信转移到虚拟网络中,如果这也不能实现,还有最后一招,根据VM对网络的需求分配网络端口。当然,在创建了虚拟网络的情况下,也可以这么做。
不是每个VM对网络带宽的需求都一样,给每个VM分配一个网络端口也不现实,因此分析每个VM的网络需求,合理合并低带宽需求的VM共享一个网络端口,为高带宽要求的VM指定专用端口成为最理想的办法。例如,假设你有一个SQL Server服务器,你应该为它分配一个独享的网络端口,相反,对于域控制器和DHCP服务器,它们需要的带宽不多,可以共享一个端口。
总之,网络可用带宽会限制宿主服务器上的VM密度,但也有许多方法可以增加分配给VM的网络带宽,在朝最大化VM密度前进的路上,我们会看到越来越多的解决办法出现。