linux服务器时间同步的那点事
时间:2013-12-03 03:12:27 作者:beebol 标签: ntpdate 分类: Linux服务
到今天为止,关于时间同步的问题我知道的已经发生了三次了,防止自己掉下这个坑,先学习学习,然后总结如下:
1、时间同步服务器没有统一,导致部分服务器同步的时间存在误差。
2、时间同步服务器故障,重启后,时间错误,导致大部分服务器时间同步了错误时间。
3、windows服务器时间同步跨度太大,导致时间同步失败。
对于上面三个问题,我把自己负责的服务器做了如下部署:
1、统一crontab,部署crontab变更及不统一报警(时间同步都是计划执行的,这项监控不止解决时间问题)
2、每同步一次时间,保证都进行了clock -w,主要防止服务器异常重启后,服务器时间异常。
3、时间同步服务器先自己正常同步时间后,再提供时间同步服务。(这样也可以防止在这台服务器同步的服务器同步到错误的时间)
4、服务器时间同步时,先校验时间差,如果时间偏移在正常的范围内,再进行同步;如果超过偏移范围,应该通知应用评估影响后再进行同步,不要马上同步。
如下是一个简单的脚本,实现时间同步。实现原理是通过ntpdate -q 命令先校验时间差(此时不同步),时间差在允许的范围之类再同步,然后再clock -w。
ntpdate 的-q参数是只查询,不同步时间。
-q Query only - don’t set the clock.
脚本:
#/bin/bash # #Author: beebol #Desciption: Time synchronization #CreateDate: 2013-12-02 # Timer="120.119.28.1" Interval=60 #如果时间大于Interval秒就不同步,根据应用来确定 User=$(whoami); #先查询与时间服务器时间相差多少,如果超过Interval时间,不同步,记录并报警;否则自动同步 FLAG=$(/usr/sbin/ntpdate -q ${Timer} |grep ntpdate|awk '{if($(NF-1)>'${Interval}'||$(NF-1)<-'${Interval}') print "error";else print "o k";}') if [ "${FLAG}" = "error" ];then MSG="Time synchronization failed, offset ${Interval} more than seconds" #将报警信息记录到message日志 logger $(date "+%Y-%m-%d %H:%M:%S"):$User:"$MSG":ntpdate #当然这里可以调用短信报警接口。 elif [ "${FLAG}" = "ok" ];then /usr/sbin/ntpdate -s ${Timer} ;clock -w else MSG="Time synchronization failed, unable to access the time server" logger $(date "+%Y-%m-%d %H:%M:%S"):$User:"$MSG":ntpdate #当然这里可以调用短信报警接口。 fiexit 0 exit 0
5、监控cron日志,监控是否存在时间同步日志和时间同步正常日志。如果用上面的脚本还需要监控下message日志,脚本是吧错误信息写入了message日志当中。
6、做好防火墙的统一、变动监控。//有大部分时间同步失败都是防火墙的问题
#请允许时间同步服务器的123端口的udp协议出去${IPTABLES} -A OUTPUT -p udp -m udp --dport 123 -j ACCEPT ${IPTABLES} -A OUTPUT -p udp -m udp --dport 123 -j ACCEPT
目前就想到这些了。。。。。