0.前言
    需求是这么来的,搭建了Storm集群进行协同过滤算法的计算性能测试,要求精度在毫秒(ms)级别。局域网内40个虚拟机节点,用 date 命令,精度上和效率上都不可行。所以,就搭建了 NTP 服务器。
1.简介
    简单的说就是选择几部主要主机 (Primary server) 调校时间,让这些 Primary Servers 的时间同步之后,再开放网络服务来让 Client 端联机,最后使Client 端调整自己的时间。NTP(Network Time Protocol)就是实现这个过程的一个网络时间协议。它是一个跨越广域网或局域网的复杂的同步时间协议,可使得机器获得毫秒级的精度。NTP协议是OSI参考模型的高层协议,符合UDP传输协议格式,拥有专用端口(Port)123。随着时间的推移,计算机的时钟(硬件时钟)会倾向于漂移。网络时间协议(NTP)即可为路由器、交换机、工作站和服务器之间提供一种时间同步的机制。
详情:http://www.ntp.org/ (官网链接)

2.本次实验环境

    操作系统: SUSE Linux Enterprise Server 11 (x86_64)
    NTP版本:ntpq 4.2.4p8@1.1612-o Sat May  8 09:39:49 UTC 2010 (1) (系统自带,也可自行下载安装)
    局域网时间服务器IP:172.18.65.1
    客户端同步机器IP:172.18.65.2~172.18.65.41 (40台)

3.服务器搭建步骤

    1.选择局域网内一个机器作为时间同步服务器(172.18.65.1)
    2.修改服务器端NTP的主要配置文件ntp.conf(默认路径为:/etc/ntp.conf)
    $vim /etc/ntp.conf

server 127.127.1.0              # local clock (LCL)
fudge 127.127.1.0 stratum 10 # LCL is unsynchronized
##
## Add external Servers using
## # rcntp addserver <yourserver>
##
##
## Miscellaneous stuff
##
driftfile /var/lib/ntp/drift/ntp.drift # path for drift file
logfile /var/log/ntp # alternate log file
# logconfig =syncstatus + sysevents
# logconfig =all
# statsdir /tmp/ # directory for statistics files
# filegen peerstats file peerstats type day enable
# filegen loopstats file loopstats type day enable
# filegen clockstats file clockstats type day enable
#
# Authentication stuff
#
keys /etc/ntp.keys # path for keys file
trustedkey 1 # define trusted keys
requestkey 1 # key (7) for accessing server variables
# controlkey 15 # key (6) for accessing server variables
    增加OR修改以下内容:
    restrict default ignore
    restrict 172.18.65.0 mask 255.255.255.0 nomodify notrap
    #restrict [你的IP] mask [netmask_IP] [parameter]
    #其中 parameter 的参数主要有底下这些:
  • ignore: 拒绝所有类型的 NTP 联机;
  • nomodify: 客户端不能使用 ntpc 与 ntpq 这两支程序来修改服务器的时间参数, 但客户端仍可透过这部主机来进行网络校时的;
  • noquery: 客户端不能够使用 ntpq, ntpc 等指令来查询时间服务器,等于不提供 NTP 的网络校时啰;
  • notrap: 不提供 trap 这个远程事件登录 (remote event logging) 的功能。
  • notrust: 拒绝没有认证的客户端。
     3.配置文件就ok了,启动NTP服务器
       172.18.65.1下启动NTP服务器:service ntp start   或者   /etc/init.d/ntp start
     4.手工发起同步(由于Suse Linux在11版本中摒弃了ntpdate命令,采用新的sntp命令进行操作)
       在各个客户端机器上执行:sntp -P no -r 172.18.65.1
       这样就进行了各客户端与服务器的时间同步。
     5.每隔一段时间,客户端自动同步
       $crontab -e
       添加一条如:* 2 * * * * sntp -P no -r 172.18.65.1   #每隔2个小时,客户端与服务器同步一次
4.查看NTP运行状态命令

      $ntpq -q 
      
     ntpq -p 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
  • remote:亦即是 NTP 主机的 IP 或主机名啰~注意最左边的符号

    • 如果有『 * 』代表目前正在作用当中的上层 NTP。本实验中时间服务器是自身同步,所以显示为LOCAL(0)
    • 如果是『 + 』代表也有连上线,而且可作为下一个提供时间更新的候选者。
  • refid:参考的上一层 NTP 主机的地址
  • st:就是 stratum 阶层啰!
  • when:几秒钟前曾经做过时间同步化更新的动作;
  • poll:下一次更新在几秒钟之后;
  • reach:已经向上层 NTP 服务器要求更新的次数
  • delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
  • offset:时间补偿的结果,单位与 10^(-3) 秒
  • jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。
5.实验接着做
    按理说,照着这个步骤来,完全就实现了这个41台机器的局域网时间同步。但是,我还是想知道在任意时刻,
各个客户端与服务器的时间误差到底是多少(实验要求,必须精确到毫秒级别,但是没有证据表明时间同步到毫秒级别了)。
考虑在使用ntpq -p命令查看状态时,有时间补偿的offset项,该项表明本时间服务器与上一级时间服务器的同步时间误差。
所以,将剩下的40个客户端均设置为服务器,且将172.18.65.1作为上级服务器。这样就能通过ntpq -p命令查看时间同步误差了。
   修改客户端的主要配置文件ntp.conf部分内容如下:
   restrict default ignore
   server 172.18.65.1 prefer  #perfer表示优先将该Server IP 作为时间源
   restrict 172.18.65.0 mask 255.255.255.0 nomodify notrap
   fudge  127.127.1.0 stratum 10   # LCL is unsynchronized
 
   #利用server设定上层NTP服务器,上层NTP服务器的设定方式为:  
   #server    [IP OR HOSTNAME]    [PREFER]    
   #参数说明:  
   #ip or hostname :上层ntp服务器的ip地址或者域名  
   #prefer : 表示优先使用的主机  
   同步以及查看步骤如下:
   172.18.65.1下启动NTP服务器:service ntp start   或者   /etc/init.d/ntp start

各客户端下启动服务器:service ntp start 

   

   可以看到时间同步误差为-0.479ms,在毫秒级别,完全符合实验要求。
 

SUSE Linux实现局域网时间同步的更多相关文章

  1. suse 12 部署chrony时间同步服务器

    文章目录 1.ntp和chrony的区别 1.1.关于chrony 1.2.chronyd的优势 2.环境介绍 3.部署chrony 4.配置chrony 4.1.配置文件解析 4.2.查看chron ...

  2. 为 suse linux 设置程序自动启动

    1.suse linux 程序自动启动 在部署面安装的的时候,重启之后需要去tomcat/bin/startup.sh 下面去执行启动脚本. 设置开机自动启动该服务    在 vim   /etc/i ...

  3. 第一种SUSE Linux IP设置方法

    第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168. ...

  4. suse linux 10 下配置vpn服务器(pptp)

     一.安装所需的软件包:      pptpd-*.rpm      ppp-*.rpm      pptp-*.rpm     一般情况下系统已经将pptp和ppp包安装好了,所以只需安装pptpd ...

  5. SuSE Linux 开启VNC服务

    一.启动VNC服务输入命令 vncserver  二.编辑启动脚步vi /root/.vnc/xstartup 把twm &注释改为#twm & 然后再最下面增加2行startgnom ...

  6. SUSE Linux下新建Weblogic 10.3非admin服务

    Linux内核版本信息查询命令 cat /proc/version 显示内容为: Linux version 2.6.16.60-0.85.1-smp(geeko@buildhost) (gcc ve ...

  7. SUSE Linux 13服务器版

    SUSE Linux 下面打开图形界面下的终端 桌面右键,选择运行 konsole命令打一桌面终端插件 配置静态ip /etc/sysconfig/network/ 虚拟机下面的网卡 vi /etc/ ...

  8. 用于 ‘Suse‘ Linux 包管理的 Zypper 命令大全

    SUSE( Software and System Entwicklung,即软件和系统开发.其中‘entwicklung‘是德语,意为开发)Linux 是由 Novell 公司在 Linux 内核基 ...

  9. SUSE Linux Enterprise Server 设置IP地址、网关、DNS

    说明: ip:192.168.21.172 子网掩码:255.255.255.0 网关:192.168.21.2 dns:8.8.8.8 8.8.4.4 1.设置ip地址 vi /etc/syscon ...

随机推荐

  1. html5有什么布局标签

    header h1 nav ul li a section(id) div h3 article figure img article h4 header time datetime='' body ...

  2. UM_第三方登录

    参考官方文档(http://dev.umeng.com/social/ios/detail-share#7), 做出以下总结. 第三方登录主要用于简化用户登录流程,通过用户拥有的微博.QQ.微信等第三 ...

  3. Docker的安装及简单使用

    1.  Docker的安装 (这里的“安装docker”其实就是安装Docker Engine) $ sudo apt-get intasll docker.io note: apt-get是ubun ...

  4. 第 2 章 代理模式【Proxy Pattern】

    第 2 章 代理模式[Proxy Pattern] 以下内容出自:24种设计模式介绍与6大设计原则.pdf 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代 ...

  5. hdu 4442

    一道超级easy的贪心 一眼看出了他的本质: 代码: #define mod 31536000 #include<cstdio> #include<algorithm> #in ...

  6. android系统如何自适应屏幕大小

    1.屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别 ...

  7. JavaScript clearInterval定时器失效原因

    检查下是不是setInterval重复执行(两次以上<!-- 文件上传板块 --> <div id="adUploadWindow" class="ea ...

  8. ANDROID_MARS学习笔记_S04_005_用sing-post向腾讯微博发一条信息

    一.代码流程 1.组织好sign-post需要的token,secrect 2.组织好发微博需要的信息 3.用sign-post进行签名 4.把签名结果从header中拿出来,转成entity,用ht ...

  9. QWidget与HWND的互相转换

    QWidget与HWND的互相转换 在编写Windows的应用程序时,我们有时不可避免地要与Windows平台固有的Win32 API打交道,但是Win32 API里面常常用到的HWND等诸多句柄QT ...

  10. 微信JSSDK录音的一些bug

    UPDATE: 这篇博文已经过期, 新的BUG总结请看微信JSSDK与录音相关的坑 微信JSSDK有不少坑, 最近做一个webapp, 用到了其中的录音功能, 发现不少问题, 总结一下: 当你调用st ...