网络时间服务器如何同步虚拟机时间

小安
2018-07-06
来源:西安同步原创

本文主要是为用户提到的虚拟机时间不同步的问题,进行了一个解决干的整理。我们对于虚拟机时间同步,主要提供虚拟机单独和网络时间服务器同步的方法,和虚拟机与主机时间同步两种方法,给大家提供相对比较完整的解决方案。

1、虚拟机时间不同步的分析

针对于虚拟机时间不同步的问题,我们首先了解一下虚拟机,英文名Virtual Machine,是在计算机科学中的体系结构裏,是指一种特殊的软件,它可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作软件。

在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。对于用户提出的虚拟机时间不同步的问题,我在网上搜索了一下不同的分析,主要提出的有:

a.   CMOS问题

b.   时区问题

c.   vmware的原因

d.   硬件原因

以上原因,意见各不统一,不能做大的争论,在这里分析是现场环境和硬件环境关系比较大,具体依个人使用而定。在China UNIX的论坛中家境小康的分析:“设想一下,我们的机器的cmos时钟不停走,即使关机了也依靠主板上的电池继续走,因此时间是可以保留的。但是虚拟机就不一样了,关掉之后时间就不走了,只能靠vmware来纠正了。我猜测是vmware没有更新虚拟机cmos时间”。

对于这一点我相对比较赞成,后面我们里一下如何更新CMOS时间,修改到正确的时间。

2、网络时间服务器同步虚拟机时间

本文我们重点是需要讲一下网络时间服务器如何同步虚拟时间,那么何为网络时间服务器?网络时间服务器,即通过网络授时方式,给需要同步时间的客户端设备进行时间同步,一般计算机和虚拟机机时间同步指的是NTP时间同步。

NTP(Network TimeProtocol)是由美国德拉瓦大学的David L. Mills教授于1985年提出,除了可以估算封包在网络上的往返延迟外,还可独立地估算计算机时钟偏差,从而实现在网络上的高精准度计算机校时,它是设计用来在Internet上使不同的机器能维持相同时间的一种通讯协定。

网络时间服务器(time server)是利用NTP的一种服务器,通过它可以使网络中的机器维持时间同步。在大多数的地方,NTP可以提供1-50ms的可信赖性的同步时间源和网络工作路径。

网络时间协议(NTP)的详细说明在RFC-1305[Mills1992]中,RFC-1305对 NTP协议自动机在事件、状态、转变功能和行为方面给出了明确的说明。它以合适的算法以增强时钟的准确性,并且减轻多个由于同步源而产生的差错,实现了准确性低于毫秒的时间服务,以满足目前因特网中路径量测的需要。

NTP(Network TimeProtocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议,如果局域网计算机(Windows系统)可以连接Internet,可以通过“控制面板”—>”日期和时间”—>”Internet时间”—>”更改设置” 与Internet时间服务器同步,如下图所示:

网络时间服务器与虚拟机时间同步1.jpg

如图所示,我们在计算机的Internet时间中直接输入网络时间服务器的IP地址即可(图中我们指向的实现西安同步的对外开放地址)。

1)虚拟机与网络时间服务器直接同步

虚拟机与网络时间服务器的时间同步,在正常情况下类似与和计算机时间同步,因为在系统上它拥有计算机常规系统的运行环境,可以直接在虚拟机配置中修改,如下图所示:

网络时间服务器与虚拟机时间同步2.jpg

在虚拟机系统中打开配置-时间配置-点击右下角选项:

网络时间服务器与虚拟机时间同步3.jpg

在选项中点击NTP设置,会弹出一个对话框,**网络时间服务器的IP地址,勾选重启后NTP生效,点击确定即可。

根据以上步骤即可实现网络时间服务器与虚拟机的时间同步,是最快速的方法。

2)虚拟机与网络时间服务器的间接同步

在实际的应用环境中,我们知道网络时间服务器和部分虚拟机是没法直接实现时间同步的,或者服务器在虚拟机上运行多时,总是发现时间会不正常,调整好了,运行几日,会出现日期时间不正确的情况,正常时间1分钟,BSD上才走大约半分钟,偏移得厉害。用ntpdate或ntpd都不能校正,无法正常同步时间。

所以需要先用网络时间服务器同步主机时间,然后再实现虚拟机和主机时间同步。

在上面我们已经提到了主机时间同步的方法,那对于主机和虚拟机时间同步改如何实现呢?

VMWare下普遍存在虚拟机CPU时钟频率慢于标准频率的BUG,导致虚拟机系统时间不准确甚至出现大幅度的偏移。在虚拟Windows系统下可以通过安装VMWare Tools并开启时间同步功能解决。但是在FreeBSD的命令行下怎么设置VMTool的强制时间同步。

经测试FreeBSD同样也可以:

第一步、安装VMWare Tools:

VMWare中选择Settings > VMWare Tools Install.

mount/cdrom

cp/cdrom/vmware-freebsd-tools.tar.gz /tmp

umount/cdrom

解压并安装:

cd /tmp

tar zxfvmware-freebsd-tools.tar.gz

cdvmware-tools-distrib./vmware-install.pl

第二步、修改配置:

这里有两种办法可以修改VMWare tool guest daemon的运行参数:

a.   使用命令行方式

Unix下VMWare Tool的命令行程序为vmware-guestd,默认目录为/usr/sbin/vmware-guestd。这是一个通过脚本自动运行的后台程序,可以使用这个程序更改运行参数。

语法为:

–cmd“vmx.set_option ”

在UNIX里就是vmware-guestd,(在Windows系统下为VMwareService.exe,也可以执行该命令行方式)

是设置选项,这里使用synctime,详细信息可以参考官方说明。

旧参数,新参数,0为FALSE,1为TRUE。通过设定这两个参数就可以更改**选项的内容了。

要启用VMWare tool的时间同步就可以运行:

./vmware-guestd–cmd “vmx.set_option synctime 0 1″

b.   直接修改虚拟机配置文件

如果只需要开启时间同步,这是相对比较简单直接的办法:

停止虚拟机,然后在在虚拟机的.vmx文件中找到:

tools.syncTime= “FALSE”

将FALSE改为TRUE,再启动虚拟机即可。

默认VMWare Tool后台程序每三分钟与宿主主机同步更新一次时间。

3、虚拟机时间自身同步

我们提到了虚拟机和网络时间服务器的同步,那么对于在没有网络时间服务器的情况下,如何实现虚拟机的时间同步呢。其实我们常规理解的虚拟机时间同步,就是和主机时间一致的说法,那我们只要按照与主机时间同步方法的步骤操作即可。

我们主要讲一下实现VMware虚拟机linux系统时间同步的解决办法,步骤如下:

a.   在计算机中,右键点击需要同步时间的虚拟机;

b.   选择更新Tools,点击设置;

c.   在虚拟机设置选项卡上,点击选项;

d.   选择 VMware Tools,在右边勾选客户机时间于主机同步(S)的选项;

网络时间服务器与虚拟机时间同步4.jpg

e.   复制相应的时区文件,替换系统时区文件;或者创建链接文件

cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

例如:在设置中国时区使用亚洲/北京(+8)

cp /usr/share/zoneinfo/Asia/BeiJing /etc/localtime

2)前面我们提到虚拟机时间同步出错问题的几种可能,这里我们针对ESXi同步器出现问题做一个修正:

a.   关闭VMWARE ESXi同步管理器(主机设置)

b.   将各虚拟主机VMWARE TOOLS工具安装并激活,同时设置客户机与主机时间同步

通过以上步骤,现在已试验过证明可以进行正确的时间同步。




4、小结

本文主要是根据用户反馈,网上调查等总结了几处关于虚拟机时间同步的问题和解决方案。对于网络时间服务器在这一方面的应用,后期我们也会不断试验并总结,希望有更有效快速的办法可以帮助用户解决虚拟机时间同步的问题。

关于网络时间服务器,我们现在已经广泛应用于航海航空,电力通信,高校教育,医院医疗,政府公共事业单位以及广电研究所等各行各业中,且网络时间服务器因应用性质不同,具有不同配置性能,以最高的性价比为用户提供适配的时间同步设备。

阅读3854
分享