VMware虚拟机时间总是异常?
系统时间问题看似很小,但是对于一些时效性要求较高的业务系统,例如:考试系统、实时监控系统等,时间问题影响甚大。我们在实际生产中也遇到一台虚拟机安装的Windows Server系统(操作系统时间同步NTP,未配置同步主机)由于系统时间异常导致应用服务出现问题。
操作系统时间同步
Windows:Windows操作系统直接把CMOS时间认定为当前显示时间,不根据时区转换。这样每调整一次系统时区,系统会根据调整的时区来计算当前时间,确定后,也就同时修改了CMOS内的时间。
Linux:Linux和苹果操作系统以当前主板CMOS内时间做为格林威治标准时间,再根据系统设置的时区来最终确定当前系统时间。
为什么虚拟机会有波动?
计时器中断
虚拟机与主机操作系统共享底层硬件,正在运行的虚拟机,有时也会延迟交付虚拟计时器中断。虚拟机只在某些特定的时刻检查挂起的虚拟计时器中断,比如底层硬件接收到物理计时器中断时,让虚拟机在精确指定的时间内,去请求物理计时器中断。
因为客户操作系统通过计算中断来保持时间,所以当存在计时器中断积压时,由客户操作系统测量的时间就会落后于实时时间。
VMware虚拟机如何处理计时器中断?
VMware虚拟机通过跟踪当前计时器中断待办事项列表来处理这个问题,并在待办事项列表过大时以更高的速度交付计时器中断,以便赶上进度。
如果虚拟机运行得太慢,可能是由于与主机上运行的其他虚拟机或进程争夺CPU时间的结果,则不能为虚拟机提供足够的时间跟上进度。
发生这种情况后,如果客户操作系统安装了VMware Tools并且时钟同步功能启用状态,VMware Tools会在客户操作系统未来的某个时候,通过同步客户操作系统与主机的时钟校正时间。
VMware vSphere虚拟化环境时间配置点
ESXi主机时间
主机时间配置分为两种:手动配置、同步NTP服务器
主机时间配置
虚拟机时间配置
虚拟机时间配置:同步主机时间(注:必须安装VMware Tools)
虚拟机时间配置-同步主机时间
虚拟机操作系统时间
Windows和Linux时间配置同样分为:VMware Tools定期时钟同步、手动配置、同步网络时间。一般是Microsoft W32Time for Windows和NTP for Linux,通常比 VMware Tools 周期性时间同步更准确。
通常,在我们交付虚拟机时,最好一次只使用一个时钟同步服务,以确保避免多个服务对时钟进行更改造成冲突的问题。
虚拟机时间在什么时候会发生变动?
初始化时间
VMware虚拟机提供了与物理机器类似的机制:一个虚拟电池支持的CMOS时钟和虚拟网卡,可以用来从网络时间服务器获取时间。另外还提供了一种机制:VMware Tools在启动时重置客户操作系统的时钟,以匹配主机的时钟。客户机和主机之间的接口使用UTC(协调世界时,也称为格林威治标准时间或GMT),因此客户机和主机不必在同一时区。
注:UTC的偏移量与虚拟机的CMOS非易失性内存的其他内容一起存储在虚拟机的nvram文件中的。
虚拟机管理操作
当虚拟机停止一段时间并继续运行时,客户操作系统的时钟通常会落后于实际时间——特别是在挂起并恢复、快照和还原为快照或VMotion操作之后。因此,如果在客户操作系统中安装了VMware Tools, VMware Tools守护进程将在这些事件发生后,即时关闭了定期的时间同步也会纠正客户操作系统时钟。
VMware Tools周期同步
执行时间同步之后,VMware Tools 会每分钟检查一次,以确定客户机和主机操作系统上的时钟是否仍然匹配。如果不匹配,则将同步客户机操作系统上的时钟以与主机上的时钟匹配。
如何禁用虚拟机时间同步?
即使未打开周期性时间同步,虚拟机有时也会与主机同步时间。若要完全禁用时间同步,必须编辑虚拟机的配置文件(.vmx 文件),并将某些同步属性设置为 FALSE。
tools.syncTime = "FALSE"是否定期同步
time.synchronize.continue = "FALSE"是否快照后同步
time.synchronize.restore = "FALSE"是否快照恢复后同步
time.synchronize.resume.disk = "FALSE"是否在从挂起恢复并使用VMware VMotion特性迁移到新主机后同步。
time.synchronize.shrink = "FALSE"是否在整理虚拟磁盘碎片后同步
time.synchronize.tools.startup = "FALSE"是否在工具守护进程启动时同步,通常在客户操作系统启动时同步。
操作系统内禁用时间同步
总结
有时候我们在虚拟机安装完操作系统后,往往漏掉一些配置,例如:VMware Tools未安装、操作系统时间是否同步网络NTP或者关闭时间网络同步而去同步主机时间等。我们需要根据实际情况,选择一种比较适合自己环境的时间同步方式,从而保证系统及应用程序的稳定运行。