Total Pageviews

Thursday, 11 January 2018

VPS时钟偏差的成因、后果及解决办法

今天来谈一谈一个大家平时估计不大会注意到的问题——VPS的时钟偏差。平时,我没有考虑过VPS的系统时间的问题,但最近在对博客主题进行修改的时候,发现,这台VPS的时间在搬到阿里云的六个月的时间内比正常时间走慢了24分钟。下面我先来简单分析一下VPS时钟偏慢的原因,再说一说同步VPS系统时间的意义与方法。
大家都知道,VPS不论是什么类型的架构,比如OpenVZ, Xen, KVM, VMWare, HyperVM等,都是采用了虚拟化技术。在对CPU进行虚拟的时候,很可能会发生不完全的模拟,而这导致的一个很可能出现的现象就是CPU时钟频率在虚拟机上与在母机上不一致。比如,母机上正常的CPU时钟频率是2600MHz,而模拟到VPS上可能就只有2599MHz,但是VPS上的系统仍然会认为这台虚拟机上的CPU时钟频率是2600MHz,这就使得时钟频率出现相对偏差。而有偏差的CPU时钟频率就可能会使得系统时钟渐渐走快或者走慢。虽然这可能只是非常微小的差别,但经过长时间的运行,虚拟机内的系统时钟就可能发现严重的偏移。比如我这个博客,6个月就走慢了24分钟。
可能大家觉得,VPS上的时钟偏差并没有什么关系,对我们搭建网站没有什么影响。然而事实却非如此,有些情况下,系统时间的偏差会影响网站的正常运行。我这个博客站在四个多月之前就实现了微博与人人的社会化登录,那时还用的是灯鹭的借口。两个月前,我在用人人和微博账号登录的时候,Wordpress一直提示“时间戳错误”。我花了一个月的时间也没有想明白原因。后来,突然发现,这个系统时间好像走得不大对呀,于是就在想是不是时间差太大的原因。果然,在校正了系统时间后,社会化登录就不再报错了。这其实是可以理解的,因为博客和第三方网站是两个不同的网络环境,如果两者的绝对时间相差太多(比如我之前的24分钟),就会导致被接入方认为接入的数据不可信而报错。因此,为了不再发生类似的问题,我们需要保证VPS的时间与标准的时间基本一致。对于我们VPS使用者来说,没有办法在虚拟化的过程中做文章,所以只能对自己的VPS加以更改。可以的一个办法是每隔几天就连一下Putty校正时间,但更方便的做法是使用Linux下的时间同步功能。
Linux系统中有一个工具叫做ntp,执行yum install ntp或者apt-get install ntp可以进行安装。这个工具包含了服务端与客户端软件,我们在客户端同步的时候只需要用客户端部分就可以了。每天的时间同步可以用crontab来完成,执行crontab -e,按照vi的方式输入下面这一条:
00 00 * * * root ntpdate 210.72.145.44
其中,210.72.145.44是中国国家授时服务器的地址,大家也可以选择其他的服务器地址来进行替换。
好吧,就写到这里了。

No comments:

Post a Comment