NTP(The Network Time Protocol) 是网络时间协议,用以同步网络内计算机的时间。
它通过udp包交换,用特定算法进行协商,从而把计算机上的时间与时间服务器上的
时间保持一致。通过互联网它支持的误差是10毫秒,局域网则可以达到200微秒。

 

NTP时间服务器分为多层,从0层到4层,每层依次与上一次服务器同步,最高层的服务器
则直接连接一个高精度的时钟设备,比如原子钟、GPS或者电波时等。

 

自己搭建时间服务器需要指定一个上层的时间服务器,然后它可以向局域网内的其它机器
提供同步服务。

详细信息可以见:

http://en.wikipedia.org/wiki/Network_Time_Protocol

 

安装NTP Server


 

Linux系统内核提供了对NTP的支持,因此只需要再安装一个NTP Server的守护进程即可。
常用的ntpd由ntp.org提供。

下载安装ntpd的稳定版本。目前是ntp-4.2.6p3.

http://www.ntp.org/downloads.html

示范脚本::

wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p3.tar.gz
tar zxf ntp-4.2.6p3.tar.gz
mkdir /app/ntp
cd ntp-4.2.6p3
./configure --prefix=/app/ntp --enable-all-clocks --enable-parse-clocks
make clean && make check && make && make intall

注意:/app/ntp为ntpd的安装后文件路径


 

配置

 

1. 配置文件位置为::

/etc/ntp.conf

2. 修改配置允许局域网内机器与该服务器进行时间同步。

将下面语句::

restrict default kod nomodify notrap nopeer noquery

修改为::

restrict default nomodify

3. 修改上一层的时间服务器。

ntp.org现在提供NTP POOL PROJECT,即ntp 服务器池项目。在中国区域,配置如下即可::

server 0.cn.pool.ntp.org
server 0.asia.pool.ntp.org
server 2.asia.pool.ntp.org

其中0.cn 是中国服务器池,后面两个是亚洲的服务器池。

最新列表见:

http://www.pool.ntp.org/zone/cn


 

启动 NTP 服务器


 

进入ntpd安装后的路径,如/app/ntd, 启动参数如下::

./ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid -l /app/ntp/log/ntp.log

注意启动后需要等几分钟,否则其它机器来同步时会得到

no server suitable for synchronization found

的错误。


 

Linux客户端机器配置

 

客户端机器使用ntpdate 程序来执行同步。 格式如下::

ntpdate ntp-server-ip

如果需要配置计划任务,命令如下::

# 查看是否已经添加时间同步的计划任务
cat /etc/crontab

# 如果没有则添加下列行,每30分钟同步一次:
echo '*/30 * * * * root /usr/sbin/ntpdate 10.20.219.43' >> /etc/crontab

# 将计划任务设为自动,默认是启动的【可选】
chkconfig crond on

# 启动计划任务服务
service crond restart

# 有些机器需要设置时区为中国
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


 

Windows客户端机器配置

 

微软从Windows 2000后支持NTP,由Win32 Time服务提供。

配置的命令行代码如下::

rem : 将时间同步服务设为自动,默认被禁用 :
sc config W32Time start= AUTO
rem : 启动时间同步服务 :
net start W32Time
rem : 设置同步选项 , 10.20.222.2 为时间服务器ip
w32tm /config /syncfromflags:manual /manualpeerlist:10.20.222.2

rem : 更新同步选项 :
w32tm /config /update
rem : 执行同步 :
w32tm /resync