Advanced NTP Topics
http://docs.hp.com/en/B2355-90774/ch04s02.html?btnNext=next%A0%BB
时钟服务器的层次
time servers 组成一个时间同步网(synchronization subnet)
stratum层次,用以表明该time server距离time source的距离.值越小距离越近. 同义词是level 或者strata.
stratum-1是直接连接到外部时钟(gps,radio...).外部时钟本身是stratum-0.
stratum-2用stratum-1做为time source,而stratum-3用2做为源.最多可支持15层.
时钟服务器的角色
在同步网中,time server可以扮演不同的角色.甚至一个可以扮演多个角色.
server:在客户端请求时提供时间.各个strata的time server都可以担当该角色.
peer:在请求发生时候,从指定的time server获取时间并同时提供时间给那台服务器. 最适合用于stratum-1和2的time server.
client:从指定的服务器获取时间,但不提供时间给那台服务器. 从低级别的stratum服务器取得时间(比如本身级别是2,从1取得时间),虽然不回送时间,但仍然可以提供给其他client请求使用.(所以client角色非只获取时间的client,也提供,只不过不提供给他的source)
broadcast:提供时间给指定的host或者本地lan内广播时间.
broadcast client:监听和同步通过广播获得的时间(从上面broadcast中得到).
一个角色的例子:
4-3
1,Bonita和Gordo是两个stratum-1 time server,role是server.
2,Penelope和Golden是两个stratum-2的time server,Penelope是Bonita的Client角色,Golden是Gordo的Client. 而Penelope和Golden相互之间的关系是Peer. 同时, 对于其网络内的其他服务器,它们的角色是Broadcast.
3,Hugo是网络内的一台机器,其角色是Broadcast client,用于从Penelope和Golden中获取时间.
多时钟服务器的配置规划
每个NTP的总体架构中应该至少包含一个stratum-1的服务器.
在一个管理域中配置至少3个time server用于冗余.time server间关系应该是peer.
每个time server应该选择一个获3个外部的同步源.当然stratum要小于该time server.
每个外部源应该处于不同的管理域,并且你到该源的path不同(走不同的网关等).避免循环和单点故障.不要同步一个域中的时间服务器到同一个外部源.
在高级别和低级别time server间设立角色关系的时候,建立在高级别设置(其实都可以),因为高级别配置更改的概率更大.
使用配置文件配置NTP
1,配置和其他服务器间的关系
peer,server,broadcast host|address
broadcastclient=yes|no
还有几个其他选项
key加密
version 1 旧版本
perfer 多个源存在时优先选择的一个
每个节点必须或者server,或者broadcastlient这两者必取其一(其他角色看你需要),而stratum-1的必须是server,来源或者外部或者内部系统时钟.
当然,如果本地服务器只做为其他client的server的话,不需要任何配置,只需要其他client上配置server=该服务器地址.
2,配置外部时钟
127.127.t.u t代表时钟类型 而u代表单元编号(unit number). 有了u可以在一个host上接几个同样类型的外部时钟(多个instance)
xntpd支持如下时钟类型:
.Netclock/2 WWVB Synchronized Clock:
127.127.4.u, u 1~4, 需要建立设备 /dev/wwvb$u
.Local Synchronization Clock (pseudo clock)本地时钟(伪时钟)
用本地时钟做为源(系统时钟).地址为127.127.1.u,u:0~15.并且要指定stratum. 可以在一个隔绝的网络内使用,不连接到stratum-1.
2,配置driftfile
xntpd会计算本地服务器的时钟频率错误或者偏差(frequency error),并且可以存储到一个文件中,该文件称为driftfile,建议放到/etc/ntp.drift.在xntpd运行一日或多日后,该frequency error数值会偏于精确.当xntpd重启后,可以直接使用该drift数值以减少再次重新估算的时间消耗.--当然我们不建议xntpd重新启动了.
3,配置授权(authentication)
略
4,限制入口包(incoming package)
可以在ntp.conf中配置网络限制规则:
restrict address [mask mask] [ntpport] [flag] [flag2]...
其中flag可以为
ignore:忽略所有包
noquery:忽略ntpq请求
nomodify:忽略试图修改服务器状态的ntpq包
noserve:忽略时间请求,但是可以ntpq请求
nopeer:提供时间服务,但不组成peer关联关系
notrust:不使用指定的机器做为源
默认没有restric是指没有任何限制.
例子:
#default entry - matches *all* source addresses
restrict default notrust nomodify
#trust for time, but do not allow ntpq requests
restrict 193.100.0.0 mask 255.255.0.0 nomodify noquery
#ignore time requests, but allow ntpq requests
restrict 193.8.10.1 noserve
#local host address is unrestricted
restrict 193.100.100.7
启动和停止xntpd
/sbin/init.d/xntpd start|stop
说过多次,略
ntpq查询xntpd的运行情况
标准的查询协议,可以用于查询ntp server的运行状况. 查询的message称为mode-6 control messages.
ntpq的时候,单位注意是毫秒ms(millisecond),不同于其他ntp的单位(常为s). ntpq也会列出peer的server情况.
ntpq常用于校验xntpd是否和其他time server连接成功,还有同步是否正常.
ntpq -p的output解释
remote refid st t when poll reach delay offset disp
==================================================================
*GPS_HP(1) GPS 0 l 48 64 377 0.00 0.516 4.19
hpps.cup.hp cupertino 3 u 467 1024 377 7.20 -12.430 15.67
+server2 WWVB 1 u 173 256 377 279.95 20.56 16.40
+node1 node3 2 u 131 256 373 9.89 16.28 23.25
remote:time server name,本地配置文件中指定的,再加上其他服务器上配置了peer角色的.名字前面有标识符:
*当前正在使用的源 只有一个,没有的话,说明xntpd连接有问题 或者 time server服务品质有问题.
#选择了使用,但距离太远了,超过了最大值限制.-用不了
o选择了使用,而且PPS信号正在使用(不懂)
+选择了使用,在最终候选列表中
x indicates that the host is the designated false ticker by the intersection algorithm.(不懂)
. 该主机位于候选者的尾端
- 该主机被拒绝因为cluster算法
blank(空白) 该主机被拒绝了因为stratum高或者状态不好(failed sanity checks)
refid:指出当前的服务器的源. WWVB是美国广播电台.
st(stratum):层次级别
t(type):类型
l:local比如gps
u:unicast(通用的类型)
m:multicast
b:broadcast
-:netaddr(通常为0)
when:最后一次得到远程服务器响应后,过去的时间
poll:轮询的时间间隔.可以定义minpoll,以秒为单位.通常网络上512和1024(大约8和17分钟).外部时钟的必须<=64
reach:(reachability)表明多少次成功的到服务器尝试. 用bit值表示.比如001最近一次成功,357,中间的5表明有断开的一次,377都成功.(最大是777然后从头开始轮回?-->不是,最大就是377)
dealy:(round trip time)收到响应包的时间.-单位ms.
offset:(time difference) server时钟和client时钟的偏差.单位ms.如果超过128,则synchronization lost会出线在日志文件中.
disp:(dispersion)指明在两次offset取样中的差异. 这是对于错误边界(error-bound)的估算.该指标是time server的质量的最基本的度量指标.
试验:
1, server2
server server1
2,server3
server server2
server3刚启动xntpd后,
server3>ntpq -p
remote refid st t when poll reach delay offset disp
==================================================================
server2 server1 5 u 58 64 1 0.00 -48.123 15875
过了64秒再次查询
server2 server1 5 u 56 64 3 0.00 0.402 7899.6(上面的一半)
过了很长时间
*server2 server1 5 u 56 64 377 0.00 1.402 0.47
然后修改server2的设置
server 127.127.1.1
fudge 127.127.1.1 stratum 5
然后重新启动server2的xntpd
查询server2
server2>ntpq -p
LOCAL(1) LOCAL(1) 5 l 3 64 1 0.00 0.000 15885.0
...
LOCAL(1) LOCAL(1) 5 l 31 64 17 0.00 0.000 1885
...
*LOCAL(1) LOCAL(1) 5 l 31 64 377 0.00 0.000 10
server1>ntpq -p
*server2 server1 5 u 56 64 376 0.00 1.402 0.47
...
*server2 server1 5 u 56 64 374 0.00 1.402 0.47
...
server2 server1 5 u 56 64 360 0.00 1.402 16000
...
*server2 LOCAL(1) 5 u 56 64 377 0.00 1.101 0.18