V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itsjoke
V2EX  ›  Linux

大家是如何解决 Linux 下的时间问题的?

  •  1
     
  •   itsjoke · 2014-07-25 10:28:05 +08:00 · 6670 次点击
    这是一个创建于 3809 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Linux下面有二个时间,一个系统时间,一个Bios时间
    随着系统运行的时间越长,系统时间与"真实"时间相差越来越大
    由于业务的原因,不能进行同步等操作,大家有没有遇到这样的问题?
    请教大家是如何解决这样的呢?
    [root@113 ~]# date
    Fri Jul 25 10:12:14 CST 2014
    [root@113 ~]# clock
    Fri 25 Jul 2014 10:17:52 AM CST -0.031876 seconds
    33 条回复    2014-07-26 02:10:22 +08:00
    Honwhy
        1
    Honwhy  
       2014-07-25 10:34:03 +08:00
    使用ntpdate us.pool.ntp.org同步时间
    将ntpdated加入开机启动chkconfig

    RHEL系列。
    ryanking8215
        2
    ryanking8215  
       2014-07-25 10:37:47 +08:00
    因为你有业务,不能修正系统时间,那么把定时把系统时间同步到rtc里去。
    `hwclock -w`

    但是不知道哪个时间是对的,建议还是使用ntp同步,大家都好
    itsjoke
        3
    itsjoke  
    OP
       2014-07-25 10:37:50 +08:00
    @Honwhy
    兄台,业务原因不能使用时间同步
    Honwhy
        4
    Honwhy  
       2014-07-25 10:44:46 +08:00
    @itsjoke 哦哦,那你希望以哪个时间为主呢?是不是想修改BIOS时间呢?
    dorentus
        5
    dorentus  
       2014-07-25 10:48:24 +08:00
    服务器使用的话,我推荐 ntpd。

    ntpdate 每次运行是直接把时间与上游时间服务器同步的,假如相差太多的话,一次性更改太大,可能会影响一些对时间敏感的程序的运行,或者至少在各种日志里面会出现比较奇怪的时间。

    ntpd 作为守护进程运行,会与上游时间服务器保持通讯,默认行为是尽量平滑地同步时间,感觉效果更好。

    Linux 下面最著名的 ntpd 实现就是 http://www.ntp.org 自家的了,各发行版的软件库里面应该都有自带。

    我现在用的是 http://www.openntpd.org 的 OpenNTPD(Debian 8 里面官方软件库里还没有,我装的是 Debian unstable 里的);不用 ntpd 的原因主要是 ntpd 默认会监听一个端口,关不掉,只能在软件配置里面设置了禁止外来的查询,看着烦……
    gyteng
        6
    gyteng  
       2014-07-25 10:51:58 +08:00
    同样遇到这个问题,不能联网的机器在机房若干年后时间就差很远了
    itsjoke
        7
    itsjoke  
    OP
       2014-07-25 10:54:48 +08:00
    @Honwhy
    @ryanking8215
    @dorentus
    不是想修改Bios时间.
    程序都是读的系统时间吧?初次安装的机器可以同步时间再加入到业务中去
    加入之后再同步的话就会导致崩溃,业务非常依赖时间.
    刚才查了下资料,貌似还没有好的解决方法
    http://tldp.org/HOWTO/Clock-2.html
    mengzhuo
        8
    mengzhuo  
       2014-07-25 11:00:46 +08:00
    ntpd必须的啊

    然后相关服务程序全部用UTC时间,这样就什么问题都没有了
    aliuwr
        9
    aliuwr  
       2014-07-25 11:03:52 +08:00
    ntpdate 是直接跳到当前时间, 可能对业务造成影响, 不推荐.
    而 ntpd 可以在误差小于 600s 时是极小粒度的调整(默认约 0.5ms/s), 所以一般不会有什么问题. 更多信息可以看 man ntpd.
    ryanking8215
        10
    ryanking8215  
       2014-07-25 11:07:26 +08:00
    @itsjoke 系统启动时从rtc读取系统时间,然后os自己维护系统时间,和rtc就没关系了,你说业务不能同步时间,是指不能修改时间吧,但同步到rtc里去应该没影响阿。

    只不过这个时间是以你的系统时间为基准,所以和实际时间不一定准了。
    yangqi
        11
    yangqi  
       2014-07-25 11:07:55 +08:00
    @itsjoke 可以内网同步的, 只要一台机器或者路由和外面同步就行了.
    decken
        12
    decken  
       2014-07-25 11:13:21 +08:00
    @gyteng 如果能连内网的话 用htpdate获取内网开了http服务的机器的时间,很好用
    itsjoke
        13
    itsjoke  
    OP
       2014-07-25 11:34:51 +08:00
    @ryanking8215
    抱歉,可能是我没有表达清楚...
    客户的业务依赖于系统的时间,如果系统时间不准的话,用户会经常反映
    但是架构上又不能修改时间,修改时间的话会导致集群崩溃
    sumu
        14
    sumu  
       2014-07-25 11:40:39 +08:00
    但是架构上又不能修改时间,修改时间的话会导致集群崩溃

    哪有这样的架构设计,这不是自己给自己添堵么?只要SVR超过一台,那就必须有一个ntp server,自建或者用通用的服务都ok,其他机器从时间服务器得到时间,保证所有ip时间一致。没其他更好的办法了
    yangqi
        15
    yangqi  
       2014-07-25 11:45:27 +08:00
    @itsjoke 这样就只有ntpd一个办法了, 可以内网同步, 提高polling的频率, 每次只是修改很小的偏差, 应用里是看不出差别的, 还可以保证内网的所有机器时间同步
    dorentus
        16
    dorentus  
       2014-07-25 11:49:19 +08:00
    @itsjoke
    所以就用 ntpd 啊,它是在后台极小粒度慢慢调整时间的,比如你的时钟慢了 10 s,它可能会花上几个小时的时间,每次调零点几毫秒,来把时间调成同步的(具体策略应该可以设置)。正常的服务器集群时间同步都是用这个的吧,再精细的需求估计就要给每台机器配个独立的原子钟了 :)
    tititake
        17
    tititake  
       2014-07-25 11:55:41 +08:00
    @itsjoke 集群时间也要同步的吧?
    rrfeng
        18
    rrfeng  
       2014-07-25 12:07:19 +08:00
    难道 ntp 不是服务器标配?
    rainysia
        20
    rainysia  
       2014-07-25 12:39:39 +08:00
    debian+ntpd啊. 这个应该是标配吧
    tjmao
        21
    tjmao  
       2014-07-25 13:34:45 +08:00 via iPhone   ❤️ 1
    无补偿的晶振,误差在几十到几百ppm。计算机的钟不够准,我都不敢不开ntp服务。这项服务,在Debian和Ubuntu发行版里默认处于开启状态。默认不安装ntp的发行版,都是极其不靠谱的发行版。

    内网时间同步,用ptp协议。与全世界同步,用ntp协议。

    另外就是好多人校正时间采用ntpdate(8)的方式,不知道是从哪里看到这么用的。难道是RH的培训材料?

    @dorentus 刚启动服务时,ntpd也会产生一次时钟跳变。启动后,不会出现高至10s的偏差,除非晶振坏了。
    itsjoke
        22
    itsjoke  
    OP
       2014-07-25 13:37:53 +08:00
    @sumu
    @yangqi
    @dorentus
    @tititake
    @rrfeng
    感谢各位,现在还无法判断用ntpd是否可行,只有新建集群的时候测试了
    wzxjohn
        23
    wzxjohn  
       2014-07-25 13:48:34 +08:00
    @itsjoke 还有从架构上无法同步时间的集群???这么牛逼。。。
    itsjoke
        24
    itsjoke  
    OP
       2014-07-25 14:36:18 +08:00
    @wzxjohn
    是的,集群中有控制器,依赖于时间
    刚才测试修改时间,直接导致控制器认为主机脱离集群
    itsjoke
        25
    itsjoke  
    OP
       2014-07-25 14:45:32 +08:00
    @tjmao
    求科普...
    itsjoke
        26
    itsjoke  
    OP
       2014-07-25 15:10:04 +08:00
    @dorentus
    翻了一下man
    貌似只有一个同步的时间超过1000S的告警
    不知道说的小粒度是如何实现的
    wzxjohn
        27
    wzxjohn  
       2014-07-25 15:28:44 +08:00
    @itsjoke 所以说你整个集群的时间都是错的?!Orz给跪了。。。集群中居然不放时间同步服务器。。。
    dorentus
        28
    dorentus  
       2014-07-25 15:42:18 +08:00   ❤️ 1
    @itsjoke 小粒度更新是 ntpd 的默认行为啊。
    itsjoke
        29
    itsjoke  
    OP
       2014-07-25 16:47:15 +08:00   ❤️ 1
    @dorentus
    感谢
    -x Normally, the time is slewed if the offset is less than the step threshold, which is 128 ms by default, and stepped if above the threshold. This option sets the threshold to 600 s, which is well
    within the accuracy window to set the clock manually. Note: Since the slew rate of typical Unix kernels is limited to 0.5 ms/s, each second of adjustment requires an amortization interval of 2000 s.
    Thus, an adjustment as much as 600 s will take almost 14 days to complete. This option can be used with the -g and -q options. See the tinker command for other options. Note: The kernel time disci-
    pline is disabled with this option.
    panzhc
        30
    panzhc  
       2014-07-25 22:23:01 +08:00
    ntpd,关键是平滑的。
    pfitseng
        31
    pfitseng  
       2014-07-25 22:34:43 +08:00 via Android
    上时间同步设备,暂停集群,同步。和运营确定好方案先。
    likuku
        32
    likuku  
       2014-07-26 01:21:51 +08:00
    推荐阅读:

    RTC 与 NTP - delphij's Chaos : https://blog.delphij.net/2010/08/rtc-ntp.html

    AsiaBSDCon上说OpenBSD的sensor framework的时候的一个观点 [为什么不用ntpdate,而要用ntpd] - delphij's Chaos : https://blog.delphij.net/2007/03/asiabsdconopenb.html
    Owenjia
        33
    Owenjia  
       2014-07-26 02:10:22 +08:00 via Android
    是不是编译内核的时候 rtc 没选啊~~~一般不会相差特别大吧~~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1040 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.