NTP时间服务器学习笔记
引言
NTP时间服务器就是提供时间授权(对时)的服务器,它可以用Linux或Windows系统来架设。总来说NTP时间服务器理解和配置都相对简单,我们只在此提醒一点NTP通信端口采用udp的 123端口。以下我们以Windows 2008/Redaht5.4作为时间服务器为服务端,Linux和Windows系统为客户端来学习一下。
服务端
Windows NTP服务器
默认情况下,独立服务器WINDOWS SERVER 2008是作为NTP客户端工作的 ,所以必须通过修改注册表,以使系统作为NTP服务器运行。工作之前请先备份注册表文件。 1、修改以下选项的键值
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\NtpServer内的[Enabled]设定为1。打开NTP服务器功能(默认是不开启NTP Server服务,除非电脑升级成为域控制站)。 2、修改以下键值
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\Config\\AnnounceFlags设定为5.该设定强制主机将它自身宣布为可靠的时间源,从而使用内置的互补金属氧化物半导体 (CMOS) 时钟。如果要采用外面的时间服务器就用默认的a值即可. # 210.72.145.44 (国家授时中心服务器IP地址) 3、修改以下键值
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\Parameters\\Type内的[Type]设定为NTP。
4、重启Win32Time服务:先关闭 windows time 服务,再开启该服务。可以在“管理工具”的“服务”界面下完成,也可以以 DOS 方式输入“net stop w32time”、“net start w32time”。 至此,已完成服务器端设定.
注意:
1) 通讯端口:123 必须打开
2) Windows Time服务设置为\自动\模式,以便重启系统后,继续提供时间授权。 3)时区不能进行同步,时区是在安装系统时选择或者配置修改。
命令行模式下启动服务: net stop w32time 停止服务 / net start w32time 启动服务
Linux NTP服务器
1、安装NTP软件版本 # rpm -qa | grep ntp ntp-4.2.2p1-9.el5_3.2 chkfontpath-1.10.1-1.1
没有安装,加载光盘进行安装。 2、编辑配置文件 修改二个文件即可。 # vi /etc/ntp.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html). server 192.168.2.151 server 192.168.2.152
# Hosts on local network are less restricted.
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap # 解释
? nomodify客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络
校时。
? notrap 的真正含义是不响应ntp mode6控制消息模式 。 ntp mode6 通常是使用
ntpq来监视ntpd操作。
? nomodify和notrap其实使用这两个参数的目的 是从安全角度考虑 防止恶意修改
ntp服务端事件参数 3、重启NTP服务
#chkconfigntpd on #开机启动服务
#/etc/init.d/ntpdstart 或者 service ntpd start #启动服务 #/etc/init.d/ntpdstop 或者 servicentpd stop #停止服务 #/etc/init.d/ntpdrestart #重启服务 4、等待后同步
重启服务后 需要于ntp服务器端同步 通常ntp同步是温和的,不会一次同步成功,同步完 慢慢缩小时间差,这是一个原因。通常要等5分钟左右!! 5、状态查看
检查服务器同步状态:
# netstat-an |grep 123 #123端口开放 #ntpq –p
查看日志
# tail -f /var/log/message
6、可能出现的问题及解决方案
1)如果出现 jitter的值 为4000则是防火墙或者网络问题 解决方法:service iptables stop 关闭防火墙 2)如果客户端更新时间时报错入下:
3 Dec 16:26:42ntpdate[12489]: the NTP socket is in use, exiting 因为客户端也启动的ntp服务的缘故,
所以关闭后就可以了 service ntpd stop
3)nux 下防火墙规则如果极严格的话可能会影响 ntpd 对时,打开 sport 123 即可(假设 OUTPUT 链全 ACCEPT):
iptables -I INPUT -pudp -m udp --sport 123 -j ACCEPT
客户端
Windows 客户端
命令行下:w32tm /resync 桌面同步:
客户端的设定更改注册表即可
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\NtpClient SpecialPollInterval 值修改成十进制43200 (单位为秒,43200为12小时) SpecialPollTimeRemaining 值修改成[时间同步服务器],0 如:192.168.1.1,0 客户端设置完成.说法二:
HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\W32Time\\Parameters\\NtpServer 修改时间服务器地址。(修改NTP地址;注:后面的0X1 一定不能删掉)windows 2008 是0x9 说明:SpecialPollInterval 定时间同步时间,如:10分钟同步一次。
脚本同步
基于w32tm /resync 命令只返回本条命令是否成功执行参数,不考虑网络以及服务端的情况。 因为只从脚本无法实现自动主备服务器进行切换。但利用iTimeSync 这个小程序可以实现。 脚本
******************************************************************************* 脚本一 @echo off
REG ADD HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Services\\W32Time\\Parameters /v NtpServer /t REG_SZ /d \net stop w32time net start w32time w32tm /resync
脚本二 @echo off
w32tm /config /update /manualpeerlist:\net stop w32time net start w32time w32tm /resync
******************************************************************************* 脚本说明
测试脚本使用环境平台:
Windows2008R2_64bit、Windows2003_32bit、Windows2003R2_32bit、Windows2003_64bit 注意:
1)根据实际环境修改IP地址。
2)不同的Windows平台,只需修改NTPServer路径:在注册表中的位置
Linux 客户端
手动同步
同步命令:# ntpdte IP地址 #确保ntpd服务器开启。/etc/init.d/ntpd start
若出现:the NTP socket is in use, exiting,停用一下 ntpd服务/etc/init.d/ntpd stop 或在 # setup 进入服务关闭ntpd服务。 指定NTP地址:
# vi /etc/ntp.conf 中指定NTP服务器 IP地址 # 可以指定多个 开机启用服务
开机启动ntp服务:
chkconfig --level ntpd 35 on 定时同步
linux 默认3-5分钟同步,可以定时同步:
1、创建自己的一个crontab文件,随便建立一个文件date.cron,首先可以使用任何文本 编辑器建立一个新文件,然后向其中写入需要运行的命令或脚本和要定期执行的时间。 vi date.cron加入下面要运行的命令和要定期执行的时间
*/10 * * * * /usr/sbin/ntpdate 192.168.1.32 # 10分钟同步一次 # minute hour day month dayofweek command
minute - 从0到59的整数 hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期) month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示) command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令) 0 3 * * * /home/dbbackup/db1backup.sh backup