vmware ESX server 是当前服务器市场上基于intel平台的最流行的虚拟软件产品。对比其他虚拟软件产品,ESX的最大优点就是可以大大减少host系统所占用资源的。ESX server内核直接运行在硬件之上,而且系统稳定性和性能都有很大的提高。

ESX server也很适合企业级应用,因为它支持重要的冗余功能,比如多路经,以及链路绑定。由于有诸如p2v vmotion 和virtualcenter软件的支持,ESX server 非常适合企业部署

注意 此章节是按照ESX server 2.1.0来介绍的。对于其他版本的ESX server这些方法不一定都可以通用。

介绍

对于大型的ESX server系统来调整性能是一件非常艰巨的任务。ESX server可以在硬件上承载非常大的负载。根据负荷量以及所运行虚拟系统的数量。服务器的一些子系统可能会达到性能瓶颈。因此非常重要的一件事情就是要评估设计以及配置硬件系统,来保证不会出现系统瓶颈。

理解ESX server仅仅会虚拟化你的负载这个概念很重要,他的意思是说实际上你需要根据原先的计划来调整ESX server系统。虚拟化很多基础服务器或者终端服务器会对你配置你系统的方法产生巨大影响。另外需要明白ESX server是虚拟化当前的硬件。你还需要根据不同的虚拟操作系统来做相应的系统性能调整。

理解Vmware性能概念

在讨论调整ESX Server性能之前,理解虚拟化对性能带来的影响是很重要的。ESX server虚拟化硬件,而且提供在一个物理机器上运行多个虚拟操作系统的环境。

默认情况下,对于硬件的访问,比如硬盘,网络,每一个虚拟机器有同等的权利。通常不希望看到一个虚拟系统吃掉了其他虚拟系统所有可用的资源。比如有一个服务器连接了一个SAN存储,提供了250MBps带宽。如果安装了ESX server,创建了一个虚拟机器测试输出,一般只有25-50MBps输出这么少,是不是ESX server性能很差?现在,创建另一个虚拟机器,同时运行测试,每一个虚拟系统都可以达到25-50MBps,你可以继续这个测试,一直到ESX server内核或者SAN网络产生瓶颈。从这个例子中可以看出ESX server设计上来说是尽量考虑并行可扩展性,而不是某一个虚拟机器的高性能。如果你的应用确实需要某一个子系统的高性能负荷,你最好不好把这个应用放到ESX server上来。然而如果你有很多服务器应用但是每个都不是对i/o和cpu要求很高,使用ESX server确实可以节省硬件以及软件的费用。有些应用程序运行的性能可以和本地运行媲美。

硬件布局

在xserver上配置ESX server的时候,你可以有很丰富的硬件选择,从2路机器到16路机器64G内存,并且联接SAN存储。因此,可以做出一个非常好的解决方案,当然硬件的配置是要看自身的需求才有意义。

对于ESX server,硬件子系统容易出现瓶颈的地方通常是:

内存 磁盘,网络

在虚拟机器中的典型应用比如ESX server通常不会造成cpu的瓶颈。

为了避免内存内存瓶颈的产生。尽量选择高前端总线的系统。ESX server对于cpu到内存以及i/o到内存的操作很频繁。他们都会利用前端总线。另外尽量加大内存,来避免交换分区的产生影响性能。注意,内存的需要量是由各个虚拟机器上运行的应用程序需求来决定的。

提示:如果配置445 440,需要每一个SMP板上的内存容量相同。如果不同的话,会影响性能。

同内存同等重要的就是磁盘系统的调整,对于ESX server磁盘系统的影响尤为重要。承载ESX server内核,以及内核映像,以及控制台系统文件的磁盘来说应该配备raid1的保护

我们不推荐利用板载lsi作raid,推荐用5i 6i 6m卡,因为板载的lsi的cpu很慢,没有缓存,没有电池保护,因此不建议应用在生产环境

对于VMFS存储,我们推荐用可以用到的最好的存储设备来承载。比如:用很多磁盘作raid,磁盘越多,性能越好,尽量用10k或者15k的硬盘。如果用scsi,用u320的磁盘,使用高性能的raid控制器,比如6m,ds4300光纤控制器。使用raid10配置最大的stripe大小。对于serveRaid,使用64k 光纤通道用512k或者1MB

VMFS文件系统使用的block大小就是1MB所以尽量的配合他的大小。如果用光纤存储比如告诉HBA卡比如fc2-133。本身配置SAN存储已经是一个非常复杂的任务了,但请尽量给ESX server划分单独的存储分区

总的来说,调整磁盘系统是一个非常复杂而且耗时间的工作,需要分析利用以及系统负荷,来调整性能。

提示:如果你对ESX server在ds4000上部署非常感兴趣,可以参考红皮书SG24-6434-00

对于网络配置,我们建议至少有2个千兆网卡(不要共享给控制台系统)网络配置依据于网络布局,比如如果交换机是10/100m那么配置多个1000m网卡也就没有意义了。根据网络布局,最好把ESX server连接到一个高速交换机,并可以支持网卡绑定功能。

cpu子系统需要根据所有的虚拟机器以及加上额外的10%-20%的复合计算的。因为ESX server支持到16路cpu,可以很容易在445上部署,请注意,不应该只考虑性能调整,你还应该考虑冗余等问题

提示:ESX server支持超线程,如果是2.1.2版本的话,推荐启用HT。不过如果用的是2.1.0,强烈建议禁用超线程。需要在bios,以及ESX server内核中都禁用。

vmware磁盘分区

在ESX server中,你需要明确集中不同的磁盘存储类型:

存储虚拟系统的

存储ESX server内核,交换文件,日至文件的,以及控制台系统

虚拟机器运行在VMFS系统上,通常来说,由ESX server默认设置的安装方法已经非常合适,不需要更多的优化了。以下是一个典型的磁盘存储布局(带SAN存储)

/dev/sda1   *    1         6     47974+  83  Linux /boot
/dev/sda2        7       325   2552319   83  Linux /
/dev/sda3      326       516   1528191   82  Linux swap
/dev/sda4      517      4442  31411926    f  Extended partition
/dev/sda5      517      4429  31307881+  fb VMFS
/dev/sda6     4430      4442    103981+  fc VMFS for core dump and swap
/dev/sdb1        1     17681 142022601   fb VMFS for virtual machines

注意控制台交换分区的大小是控制台建议最大内存的2倍。这样就允许你添加更多的内存给您的server,你也可以设置这个分区是实际应用内存的2倍

在外部存储上,如果存储设备非常大,建议配置多余一个的VMFS文件系统。虽然可能损失一些性能,但是可以保证万一一个VMFS坏掉了,还有其他的可以工作。注意,如果在小磁盘上划分了多个VMFS的话,系统性能会下降很多,因为磁头会来回的在两个VMFS系统之间移动。

调整控制台系统

因为控制台系统是一个非常微小的redhat系统,控制台的调整空间也就很小。通常来说,控制台系统不需要调整。系统已经运行在3模式下,而且必要的服务已经启动。

为一个可以对性能有一点提高的就是禁用一些虚拟控制台。可以再/etc/inittab种注释掉tty4 tty5 tty6

例子

# Run gettys in standard runlevels
1:2345:respawn:/usr/sbin/vmkstatus tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6

请注意,在控制台系统上如果安装ibm director agent会很影响性能的,因为它是基于java的。如果一定要安装director agent请额外给控制台系统添加至少50MB的内存。如果有其他的agents,要相应添加内存.虽然控制台系统没有更多的参数配置,但是如果ESX server承载60个以上的虚拟系统或者在重负载的情况下,有一些情况是需要了解的。这种情况下,特别是承载web服务的时候,控制台系统会非常的慢。这时候可以到管理工具里面增加控制台的内从容量到500MB-800MB,同时考虑到ibm director的影响。

如果vmware的管理借口仍然很慢,更改http进程的优先全县。登陆进入控制台系统,检查进程id
ps -axw |grep http
输出入下,可以看到httpd线程的id是1431,现在便可以调整优先权限了
renice -10 -p 1431

[root@xseries01 root]# ps -axw
PID TTY      STAT   TIME COMMAND
   1 ?        S      0:03 init
1431 ?        S      0:00 /usr/lib/vmware-mui/apache/bin/httpd -DSSL
-DSSL_ONLY -DSTANDARD_PORTS -DESX -d /usr/lib/vmware-mui/apach
1166 pts/0    R      0:00 ps -axw
[root@xseries01 root]# ps -p 1431
PID TTY          TIME CMD
1431 ?        00:00:00 httpd
[root@xseries01 root]# renice -10 -p 1431
1431: old priority 0, new priority -10

这样httpd的权限已经得到了调整,相反的可以用-15减少httpd 的优先权限

除了给httpd增加cpu时间之外,也可以调整为web服务保留的内存,如果有80个虚拟系统,要把默认的内存保留从24MB调整到更高,可以调整实际共享的内存,利用配置文件/etc/vmware/config ,例如从24MB提高到28MB 如下

control.fullpath = "/usr/bin/vmware-control"
wizard.fullpath = "/usr/bin/vmware-wizard"
serverd.fullpath = "/usr/sbin/vmware-serverd"
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl"
# The setting below increases the memory shares available for the httpd
mui.vmdb.shmSize = "29360128"

renice命令会即时生效,但内存的扩大需要重新启动httpd服务
killall -HUP httpd
为了确保可以在重负荷下登陆控制台,推荐把vmware联结超时的时间从30秒提高到更高的数值。可以通过修改/etc/vmware/config

vmware.fullpath = "/usr/bin/vmware"
control.fullpath = "/usr/bin/vmware-control"
wizard.fullpath = "/usr/bin/vmware-wizard"
serverd.fullpath = "/usr/sbin/vmware-serverd"
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl"
mui.vmdb.shmSize = "29360128"
# The setting below increases the login timeout to 2 minutes
vmauthd.connectionSetupTimeout = 120
~
也可以可以提高vmware-服务的内存限制,因为这个操作涉及到vmware线程,因此需要停掉所有虚拟机器才可以完成。修改/etc/vmware/config 提高软内存从64MB到96MB

vmware.fullpath = "/usr/bin/vmware"
control.fullpath = "/usr/bin/vmware-control"
wizard.fullpath = "/usr/bin/vmware-wizard"
serverd.fullpath = "/usr/sbin/vmware-serverd"
serverd.init.fullpath = "/usr/lib/vmware/serverd/init.pl"
mui.vmdb.shmSize = "29360128"

vmauthd.connectionSetupTimeout = 120
# The line below will alter the soft memory limit
vmserverd.limits.memory = “65536”
# The line below will alter the hard memory limit
vmserverd.limits.memhard = “98304”
~
当完成编辑后,需要重新启动vmware-serverd服务
shutdown -r now
或者
killall -HUP vmware-serverd

注意:需要事先关闭所有的虚拟操作系统