在部署Linux集群,或者提供服务的主机,必须确保时间精确。例如,在CentOS 7 NFS服务器设置中,如果NFS服务器和NFS客户端时间不一致,会导致非常诡异的情况。

本文简述在CentOS中快速设置NTP进行时间矫正的方法。

安装

安装ntp软件包

yum install ntp

设置ntpd启动 - CentOS 7

systemctl enable ntpd

设置ntpd启动 - CentOS 6或以前版本

checkconfig ntpd on

同步系统时间

对于时钟差异较大的主机,直接启动ntpd服务进行自动调整会无法调整时间,所以在没有启动 ntpd 服务的情况下执行ntpdate和互联网上提供时钟服务的时间服务器进行时间校准(启动ntpd的时候不能执行ntpdate

ntpdate pool.ntp.org

给局域网内部服务器提供时间服务

可以在局域网内部设置几台服务器作为整个内部网络的时间服务器,这几台时间(基准)服务器可以访问因特网,和公共时间服务器进行时间同步。这样内网的其他主机即使不能访问公网的时间服务器也能从内部时间服务器校准时间。

配置时间服务器 /etc/ntp.conf 设置允许内部ntp客户端访问的IP地址范围,例如添加以下配置运行 10.1.1.0/24 网段客户端访问

# -- CLIENT NETWORK -------
restrict 10.1.1.0 mask 255.255.255.0 notrust nomodify notrap

启动NTP服务

/etc/init.d/ntpd start

简单的同步时间方法

如果主机不作为NTP服务器,只是单纯同步本机时间,也可以使用ntpdate命令来更新时间

关闭ntpd

chkconfig ntpd off
/etc/init.d/ntpd stop

创建脚本synctime

#!/bin/bash
/usr/sbin/ntpdate pool.ntp.org

然后添加每日cron

#min hour day_of_month month day_of_week  user   command
*/05 * * * * /home/work/scripts/crons/synctime > /dev/null 2>&1

时间和时区

在设置了ntp时间同步,你仍然看到服务器时间和你的本地(手表)时间不一致,这实际是因为服务器安装系统时选择时区和本地时区不同。

以下以设置上海作为服务器时区,然后校准时间,将系统时间写入BIOS,并启动ntpd服务(持续同步时间)

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate pool.ntp.org
hwclock --systohc
/etc/init.d/ntpd start

参考