集群时间戳不一致导致的问题及其分析和思考

ntp

对Linux而言,可以使用ntp来实现集群的时间同步。

同步时间,可以使用ntpdate命令,也可以使用ntpd服务。

ntpdate

使用ntpdate比较简单。格式如下:

$ ntpdate [-nv] [NTP IP/hostname]
$ ntpdate 192.168.0.1
$ ntpdate time.ntp.org

ntpdate只是强制将系统时间设置为ntp服务器时间。如果机器cpu tick有问题,这种同步治标不治本。此时,一般配合cron任务来定期同步。例如:

3 * * * * /usr/sbin/ntpdate 172.17.1.1

ntpd

使用ntpd服务,要好于使用ntpdate+cron

ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响,比如sleep,timer等。

ntpd服务可以在修正时间的同时,修正cpu tick。

理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。

需要注意的是,ntpd有一个自我保护设置: 如果本机时间与源时间相差太大, 则ntpd不运行。所以新设置的时间服务器一定要先利用ntpdate命令获取初始时间, 然后启动ntpd服务。

关于ntpd的使用,网上已经有很多资料了,这里就不做过多的介绍了。

ntpstat

ntpstat用于显示网络时间的同步状态。ntpstat会给出本地计算机上运行的ntpd的同步状态。如果本地系统与参考时间源同步,则ntpstat会给出近似的时间精度。

$ ntpstat
synchronised to NTP server (192.168.0.1) at stratum 3
   time correct to within 43 ms
   polling server every 1024 s

问题引申 虽然可以利用ntp来同步集群时间,但是有一个问题是值的思考的:如何在集群时钟不同的情况下,解决时间戳不一致带来的问题一节中描述的问题。

系统在架构上要做何种优化,才能避免业务对集群时钟同步的依赖?而这种优化所带来的系统架构的复杂度和成本又将如何?

资料

results matching ""

    No results matching ""