linux服务器时间同步的那点事

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

目前就想到这些了。。。。。

时间:2013-12-03 03:12:27      作者:beebol      标签: ntpdate      分类: Linux服务
  • 分享到:
  • 微博
  • QQ空间
  • 腾讯微博
  • 微信

Copyright © 2015 Gitblog | Proudly powered by Gitblog.