logo头像

为学日益,为道日损

时间同步服务器

目录

时间定义

linux上的时间设定

ntp服务详解

时间定义

linux上的时间设定

linux 时间同步的2种方法

最近维护的服务器因为时间偏差出现计算数据问题。

原因是A服务器定时抽取一部分数据每整点五分钟计算一次,B服务器则根据A服务器的计算结果在进行指标计算,A服务器和B服务器出现时间偏差,导致B服务器计算指标时A服务器还没有计算出结果,最终出现数据问题。

出现此问题是由于硬件的原因,机器运行一段时间后或多或少的会跟标准时间出现偏差,日积月累误差会越来越大,一个月下来可能会误差几秒到几分钟不等。对于服务器来说时间不准,会有很多麻烦。例如,支付的时候,无法下单,游戏无法登录等。

第一种方法:用ntpdate从时间服务器更新时间

如果你的linux系统根本没有ntpdate这个命令,需要先安装ntp服务。

1
yum install ntp

安装完了之后,可以直接测试一下

1
2
[root@localhost ~]# ntpdate ntp1.aliyun.com  
28 Nov 16:29:50 ntpdate[31571]: step time server 120.25.115.20 offset 1.049964 sec

测试成功后,就可以在crontab加上定时,内容如下。

1
*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com   #域名或IP

表示每隔十分钟同步一次。推荐几个时间服务器。

阿里云ntp服务器

  • ntp1.aliyun.com
  • ntp2.aliyun.com
  • ntp3.aliyun.com
  • ntp4.aliyun.com
  • ntp5.aliyun.com
  • ntp6.aliyun.com
  • ntp7.aliyun.com

用ntp搭建自己的时间服务器

上面我们是利用别人的时间服务器来同步时间,这些时间服务器都是比较权威的。当我们自己搭建时间服务器就不用crontab来定时去跑。

  1. 安装时间服务器ntp.

    1
    yum install ntp
  2. 配置ntp

查看复制打印

1
[root@localhost ~]# cat /etc/ntp.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}'

1
2
3
4
5
6
7
8
9
10
11
restrict default ignore   //默认不允许修改或者查询ntp,并且不接收特殊封包  
restrict 127.0.0.1 //给于本机所有权限
restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify //给于局域网机的机器有同步时间的权限
server time.nist.gov prefer //设置时间服务器,加prefer表示优先
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
  1. 启动 ntp

    1
    [root@localhost ~]# /etc/init.d/ntpd start
  2. 查看并测试

    1
    [root@localhost ~]# netstat -upnl |grep ntpd
  3. 查看同步的服务器

    1
    2
    3
    4
    5
    6
    7
    8
    [root@localhost ~]# ntpq -pn    //查看同步的服务器IP  
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    50.77.217.185 .INIT. 16 u - 64 0 0.000 0.000 0.000
    202.90.158.4 .INIT. 16 u - 64 0 0.000 0.000 0.000
    202.71.100.89 .INIT. 16 u - 64 0 0.000 0.000 0.000
    202.134.1.10 .INIT. 16 u - 64 0 0.000 0.000 0.000
    *127.127.1.0 .LOCL. 10 l 18 64 377 0.000 0.000 0.001
  4. ntpstat 命令查看时间同步状态,这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。

    1
    2
    3
    4
    [root@localhost ~]# ntpstat   //同步的结果  
    synchronised to local net at stratum 11
    time correct to within 12 ms
    polling server every 512 s
  • remote:即NTP主机的IP或主机名称。注意最左边的符号,如果由“+”则代表目前正在作用钟的上层NTP,如果是“*”则表示也有连上线,不过是作为次要联机的NTP主机。
  • refid:参考的上一层NTP主机的地址
  • st:即stratum阶层
  • when:几秒前曾做过时间同步更新的操作
  • poll:下次更新在几秒之后
  • reach:已经向上层NTP服务器要求更新的次数
  • delay:网络传输过程钟延迟的时间
  • offset:时间补偿的结果
  • jitter:Linux系统时间与BIOS硬件时间的差异时间
    推荐第一种方法,虽然搭建个时间服务器,还是比较简单的,但是我觉得没有这个必要。如果用别人的时间服务器,每隔10分钟同步一次,可以精确到毫秒。

资料

微信打赏