欢迎j进入我的个人知识库,这里大多是我从网络搜集的对我有用的资料,有些是我个人的备忘记录,希望对你也有用! 我关注的:1. 测试技术 ;2. 编码技术 ;3. 数据库技术 ;4. 计算机网络技术 ;5. 计算机原理;

Linux系统自动化管理:服务器时间同步

上一篇 / 下一篇  2011-04-02 13:45:09 / 个人分类:OS-Linux

【转自】http://rdc.taobao.com/blog/qa/?p=3452

  前一阵子,在处理日志文件时,由于几台服务器上的时间不一致,在这些日志文件关联在一起解读时,使得处理变得很繁琐,必须花费相当大量的时间进行人工事件跟踪。在更严格的服务上,因为服务器时间不准确或是不一致,很有可能会带来安全或是功能的隐患。因而,有必要采取措施保证网络中的服务器上的时间同步。这里,我们先看看使用NTP服务如何实现同步时间。

    Network Time Protocol(NTP),即网络时间协议,它的目的是在国际互联网上传递统一、标准的时间。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户端能同步时钟。

    NTP服务的安装、配置、使用这里就不再细说了(不了解的可以google下)。我们知道在NTP服务器启动后,NTP客户端可以通过手动执行“ntpdate 服务器IP”来同步时间,或是通过配置NTP客户端定时进行时间同步。(当然,需要保证NTP服务器和客户端的之间没有防火墙Block它们的通信。)

    下面我们接着来看,如何在我们的环境中拥有上百台机器,为了同步时间,不想手动的在每台机器上去运行ntpdate同步命令或是配置,你要知道几百台机器,你登陆再运行一次命令,也是需要耗费你很多的时间。当然,你要是部署每个服务器的时候就已经建好了NTP服务器,那还是可以那时候就进行NTP客户端的配置。但我们以前没这么做,那只有现在从头开始了。手工活太累太麻烦了,我们做个脚本,在NTP服务器上运行一次,就让所有服务器都同步一次时间。

    我们就来看看如何来使用最简单的方式来达到这个功能。Linux的ssh提供了一个远程执行命令的方式,现在就来用它来让每个服务器向NTP服务器来同步一次时间。ssh访问有两种方式:密码方式、公钥方式。使用秘钥方式,我们需要保存所有服务器的ip地址、用户、密码。你如果觉得不安全,那可以建立密钥方式访问,这时需要一些手工配置,当配置好使用公钥方式后,就可以不输入密码访问对方。

    那就来看看脚本吧,脚本1是使用公钥方式进行访问的,脚本2是使用密码访问的,其中服务器信息都保存在/tmp/servers.txt文件中。

脚本1:

#!/bin/sh

#in the servers.txt

#username1  server1

SERVERS=”/tmp/servers.txt”

CMD=”ntpdate  ntp_server” 

while read line; do

         set — $line

         username=$1

         server=$2

        ssh $username@$server $CMD

done < $SERVERS

 

脚本2:

#!/usr/bin/expect

set SERVERS “/tmp/servers.txt”

set CMD “ntpdate ntp_server”

set fp [open $SERVERS]

while {-1 != [gets $fp line]} {

        set ln [split $line " "]

        set username [lindex $ln 0]

        set passwd [lindex $ln 1]

        set server [lindex $ln 2]

        spawn ssh $username@$server $CMD;

        expect “*password: “;

        send “$passwd\r”;

        interact;

}


TAG: Linux linux 时间同步

 

评分:0

我来说两句

Open Toolbar