Network Time Protocol(NTP)

本文介绍如何利用NTP服务和SSH命令自动同步网络中多台服务器的时间,避免手动操作的繁琐,提高效率。

       前一阵子,在处理Web系统数据时,由于几台服务器上的时间不一致,导致数据时间的不准确,出现了错乱。在更严格的服务上,因为服务器时间不准确或是不一致,很有可能会带来安全或是功能的隐患。因而,有必要采取措施保证网络中的服务器上的时间同步。这里,我们先看看使用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 ”;

        interact;

}

### 关于网络时间协议 (NTP) 的概述 Network Time Protocol (NTP) 是一种用于同步计算机系统时钟的时间协议。该协议旨在通过互联网或局域网提供高精度的时间源,确保分布式系统的时钟保持一致。NTP 使用 Coordinated Universal Time (UTC) 来同步不同设备上的时间戳。 #### NTP 工作原理 NTP 客户端定期向服务器发送请求并接收响应来调整本地时钟。此过程涉及计算往返延迟以及偏移量以校正客户端的时钟误差。为了提高准确性,通常会配置多个上游时间源作为冗余措施[^1]。 #### 配置 NTP 对于 Linux 系统而言,安装 `ntp` 或者更现代的选择 `chrony` 可以为用户提供稳定可靠的服务。以下是基于 Debian/Ubuntu 发行版的一个简单例子: ```bash sudo apt-get update && sudo apt-get install ntp ``` 编辑 `/etc/ntp.conf` 文件添加首选的时间服务器地址,并重启服务使更改生效: ```bash server 0.pool.ntp.org iburst server 1.pool.ntp.org iburst server 2.pool.ntp.org iburst server 3.pool.ntp.org iburst # Restart the service to apply changes. sudo systemctl restart ntp.service ``` 对于 Windows 用户来说,在控制面板中的日期和时间设置里可以找到 Internet 时间选项卡来进行相应设定。 #### 最佳实践建议 - **选择可靠的公共 NTP 服务器**:优先考虑官方推荐或者知名机构提供的免费开放访问权限下的时间源。 - **内部部署专用 NTP 服务器**:大型企业环境应建立自己的根级 Stratum 1 设备连接 GPS 接收器等硬件设施获取精准授时信号;再由这些源头向下分层传播给其他依赖节点形成层次结构体系。 - **启用身份验证机制**:防止恶意篡改报文内容影响到整个网络内所有成员之间的协调运作状况。 - **监控性能指标**:持续跟踪记录偏差范围内的变化趋势以便及时发现问题所在之处加以改进优化方案设计思路方向性指导原则等方面的内容[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值