————linux ntp服务相关说明
1、linux中有bios时间和操作系统时间
    #宿主机系统时间查看:
        date     
    #宿主机时间校准方法:
        yum install -y ntpdate
        ntpdate -u ntp.api.bz
        ntpdate -u 192.168.1.1
    #centos查看设置系统时区:(可能没有)
        cat /etc/sysconfig/clock
    #hwclock 查看系统bios时间, 查看硬件时钟用命令:
        hwclock --show
       ☆hwclock -w    //将系统时钟写入硬件时钟
        hwclock --hctosys //硬件时钟与系统时钟同步
    # 提醒: date命令只操作系统时间,hwclock操作硬件时钟,因此在date 修改时间后 最好用hwclock 同步一下,以免系统非正常关机造成时间不同步

————场景分析:
    现场ntp顶层服务器目前指向*.*.110.166,存在开机ntp服务不一定启动的情况,所以需要保证存储节点自身bios时间正确。

2、linux NTP服务设置
(1)ntp时间相关配置文件与目录
    /etc/ntp.conf              :NTP服务的主要配置文件;
    /usr/share/zoneinfo     :这是一个目录,规定了各主要时区的时间设置文件。例如,中国大陆地区的时区设定文件是/usr/share/zoneinfo/Asia/Shanghai
    /etc/sysconfig/clock    :Linux的主要时区设置文件。每次启动Linux后会自动读取这个文件来预设系统要显示的时间。比如这个文件的内容为 "Zone=Asia/Shanghai",则表示Linux操作系统的时间设置使用/usr/share/zoneinfo/Asia/Shanghai文件
    /etc/localtime          :本地系统的时间设置文件。如果clock(↑)文件中规定了使用的设置文件为/usr/share/zoneinfo/Asia/Shanghai, Linux操作系统就会将shanghai这个文件复制一份为/etc/localtime, 所以系统的时间显示就会以Shanhai这个时间设置文件为准
(2)ntp相关命令
    /bin/date                  :linux系统中的修改及输出日期与时间命令
    /sbin/hwclock             :主机的BIOS时间与Linux系统时间分开的,所以使用date命令调整时间之后,只是调整了Linux的系统时间,还需使用hwclock命令,才能将修改的时间写入BIOS, 这个命令必须由root用户执行。
    ☆/usr/sbin/ntpd          :NTP服务的守护进程文件,需要启动它才能提供NTP服务。需要注意的是,这个命令默认会引用/etc/ntp.conf里的设置
    ☆/usr/sbin/ntpdate      :NTP客户端用来连接NTP服务器的命令文件
    /usr/sbin/ntpq           :标准的NTP(网络时间协议) 查询程序
    /usr/sbin/ntptrace         :跟踪NTP主机链接到他们的控制时间源
    /usr/sbin/ntpstat          :标准的NTP查询程序
    /sbin/clock             :调整计算机内建的硬件时钟(RTC),执行这个命令可以显示现在时刻。调整硬件时钟的时间将系统时间设为与硬件时钟的时间一致,或者把系统时间回存到硬件时钟·
(3)ntp服务器配置
    I、restrict(限制、约束)段落:设置权限
    restrict IP地址 mask子网掩码 参数 -例如:restrict 127.0.0.1 mask 255.0.0.0
    其中:
        IP可以是IP地址或者default, default之所有IP地址。
        参数如下:
        [ignore]:关闭所有的NTP联机服务,拒绝所有类型的NTP连接
        [nomodify]:客服端不能更改服务器端的时间参数,但是可以通过服务器端进行网络校时
        [notrust]:客户端除非通过认证,否则其来源将被视为不信任子网
        [noqurey]:不提供客户端的时间查询。
        [nopeer]:不允许和同一层的其他服务器进行时间同步
        [notrap]:不提供远程日志功能
        注意:如果未设置参数,则表示该IP地址(或子网)没有任何限制
    II、server段落:设置上级时间服务器
    server IP地址或域名 [参数] -例如:server 127.127.1.0  #local clock
    其中:
        IP地址或域名为指定的上级时间服务器。
        如果在server参数后加上prefer, 则表示NTP服务器主要以其主机时间矫正。
    参数介绍:
        ——[perfer]参数用于设置优先使用的NTP服务器
        设定例:
        server 192.168.1.1 prefer
        server 192.168.1.2
        设定说明:默认使用192.168.1.1进行同步,192.168.1.2为备用NTP服务器
        ——[burst]参数用于当NTP服务器可用时,向其发送一些列并发包进行检测
        设定例:server 192.168.1.1 burst
        ——[iburst]参数则是当NTP服务器不可用时,向其发送一些列并发包进行检测
        设定例:server 192.168.1.1 iburst
    III、fudge(回避)段落:设置时间服务器的层级
    fudge ip [stratum int] —例如:fudge 10.225.5.1 stratum 10
    其中:
    fudge必须和server一块用, 而且是在server的下一行
    stratum(层级) [0~15]
    0:表示顶级        10:通常用于给局域网主机提供时间服务    
    IV、driftfile(趋势文件)段落:
    driftfile 文件名
        与上级时间服务器联系时所花费的时间记录在driftfile参数后面的文件中。我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确. NTP会自动来监测我们时钟的误差值并予以调整.但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile.这样即使你重新开机以后之前的计算结果也就不会丢失了
        注意:需使用完整的的路径文件名,不能是链接文件,并且文件的权限需要设置为ntpd守护进程可以写入的文件。
(4)服务器启动:
    启动NTP服务:
        # service ntpd start
    如果每次启动系统时自动启动NTP服务,则输入下面命令:
        # chkconfig -level 35 ntpd on
    SELinux设置:
        # setsebool -P ntpd_disable_trans 1
    自动bios和os时间同步:
        I、手动
        # hwclock -w
        II、写入文件
            vi /etc/sysconfig/ntpd , 添加一行:
            SYNC_HWCLOCK=yes # 允许BIOS与系统时间同步
    自动校正:
        vi /etc/ntp/step-tickers, 添加一行
            192.168.1.254 #当NTP服务启动时,会自动与该文件中记录的上层NTP服务进行时间校正,
            注意:ntpdate同步时间时用到此NTP服务器信息
    查询NTP服务器工作情况:
        # ntpstat
    查看ntp服务器:
        # ntpq -p

(5)客户端简易同步:
    终端机可使用,集群中其他节点如需通过主节点同步不推荐此方式
    结合cron服务,周期执行以下命令:
    I、执行ntpdate命令即可:
        ntpdate 192.168.1.1 #服务器地址
    II、写入BIOS:
        hwclock -w
    
(6)客户端通过ntpd服务同步:
    I、在ntp.conf中添加server语句:
    server ip(指向已设置的服务器)
    II、启动ntpd服务
    # systemctl start ntpd
    III、查看ntpd状态
    # systemctl status ntpd
    IV、查看连接情况
    # ntpq -p
    V、查看和对比os时间
    # date; ssh ipaddr(server) date
    注意:
    offset是显示时间同步效果的重要标尺,单位为毫秒,需要多多观测。
    如果客户端时间比服务器时间更快,则ntp不会更新时间。此时需要手动干预,如果场景不稳定或客户端长时间脱网工作,应考虑使用chrony,见备注。
    #systemctl stop ntpd 关闭ntpd服务
    #ntpdate -u ipaddr(server) 手动更新时间,注意此处可能发生时间跃变,需关注是否会影响在运行的程序
    #hwclock -w 写入bios时间
    #systemctl start ntpd 启动NTP服务
    
3、ntpd命令与ntpdate命令
    区别:
    ntpd 是一个时间服务。采用柔性时间调整策略,让时间的变化和调整尽量减少对业务的影响。
    ntpd 不盲目相信远端时钟,服务器时间和远端时钟超过恐慌阀值(默认1000秒),ntpd 甚至会停止时间同步。
    ntpd 自己会思考。它相信本地时间可能不对,但是不会忽快忽慢甚至停滞。ntpd通过多次收发包选择权威稳定的时间源,算出双方间的网络延迟,然后才会采信新的远端时钟进行时间同步。
    ntpd 在和时间服务器的同步过程中,会把BIOS 计时器的振荡频率偏差——或者说Local Clock的自然漂移(drift)——记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。

    ntpdate 是一个时间同步命令,通常采用crond+ntpdate 方式同步时间。
    ntpdate 盲目信任远端时钟,如果远端时钟错误,ntpdate永远相信远端时钟是正确的,可能造成服务器时钟停滞,甚至回逆。
    ntpdate 简单粗暴,无脑不会思考。采用野蛮式(brute force)、跃进式调整服务器时间。
    
    ——ntpd语法:
    ntpd [ -aAbdgLmNPqx ] [ -c conffile ] [ -f driftfile ] [ -g ] [ -k keyfile ] [ -l logfile ] [ -N high ] [ -p pidfile ] [ -r broadcastdelay ] [ -s statsdir ] [ -t key ] [ -v variable ] [ -V variable ] [ -x ]
    -a    对广播客户端、多播客户端和对称被动关联进行加密认证
    -A    广播客户端、多播客户端和对称被动关联不需要加密认证
    -b    启用客户端同步到广播服务器
    -c conffile    指定配置文件的名称和路径,默认为/etc/ntp/ntp.conf
    -L    不要监听虚拟IP,默认是监听
    -d    使用调试模式
    
    ——ntpdate语法:
    -a  Keyid 使用 Keyid 来认证全部数据包。
    -b  通过调用 settimeofday 子例程来增加时钟的时间。
    -d  指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结 果再现在屏幕上。这个标志使用无特权的端口。
    -e  AuthenticationDelay 指定延迟认证处理的时间秒数。
    -k  KeyFile 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。
    -o  Version 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。
    -p  Samples 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
    -s  指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。
    -t  TimeOut 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
    -u  指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
    -v  记录 ntpdate 的版本标识字符串
    -q  仅查询 - 不设置时钟。
    -B  使用 adjtime() 系统调用强制始终对时间进行压摆,即使测得的偏移大于 +-128 ms。默认值是,如果偏移量大于 +-128 毫秒,则使用 settimeofday() 步进时间。请注意,如果在这种情况下偏移量远大于 +-128 毫秒,则可能需要很长时间(小时)才能将时钟转换为正确的值。在此期间,不应使用主机来同步客户端。
    ——例子:
    # ntpdate ip 直接同步
    # ntpdate -u ip 越过防火墙,应对“no server suitable for synchronization found”
    cron用法:
    # echo "*/20 * * * * /usr/sbin/ntpdate -u ipaddr(server) >/dev/null &" >> /var/spool/cron/root
    
4、ntpq -p命令
    ntpq -p可以列出目前我们的ntp与相关的上层ntp的状态,表格的几个字段的意义为:
    ——remote:远程时间服务器的IP地址或主机名~注意最左边的符号
        [*]代表目前正在作用当中的上层ntp
        [+]代表也有连上线,而且可作为下一个提供时间更新的候选者。
        [-]代表远程服务器被认为是不合格的NTP Server
        [x]代表远程服务器不可用
    ——refid:远程时间服务器的上一层服务器IP地址
    ——st:stratum 阶层,表示与顶层参考时钟(原子时钟、GPS或者其他无线电时钟)的距离,顶层为第0层。距离顶层越近,时间越准确。
    ——t:类型,本地ntp服务与远程时间服务的通信方式
        u:单播或者多播
        b:广播
        l:本地
    ——when:最后一次时间同步到现在的时间,没有单位表示秒
    ☆——poll:同步的频率 (s)
    ——reach:和远程时间服务的连接成功次数,每成功一次就增加,以8进程显示
    ——delay:从本地到远程时间服务器通信往返时间,单位毫秒
    ☆——offset:本机与远程时间服务器的时间偏移量,该值越接近0越好,单位毫秒
    ——jitter:本机与远程时间服务器的时间平均偏差,该值越小越好,单位毫秒
    

备注:
1、ntp特性:
    I、C/S合一
    ntpd 对下层client 来说是service server,对于上层 server来说它是client,也就是说新版的NTP服务程序已经不对服务端和客户端进行区分了,统一叫做ntpd。ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。
    所有的配置都在/etc/ntp.conf文件中。.restirct 部分为server 端配置·server 部分为clinet 端配置

    II、NTP客户端同步间隔
    ntp服务会间隔多长时间想时钟服务器请求一次时钟同步呢?默认最小时间间隔为64s,默认最大时间间隔是1024s(17分钟左右D天山若雁0默认间隔可以通过minpoll 和maxpol配置。

    III、容忍误差范围
    ntpd 服务并不是在任何情况下都会进行同步的。当时钟服务器时间和本地时间相差大于1000s时,ntp 服务就会认为是人为调整了时钟或出现了硬件故障,例如CMOS电池损坏等。此时,NTP服务就会退出,需要人工使用ntpdate <server IP>进行时钟同步。
    采用-g选项可以让ntpd忽略1000s或更大误差
    
    IV、层次(strata)
    stratum根据上层server的层次而设定(+1)。
    对于提供 network time service provider的主机来说,stratum的设定要尽可能准确。
    而作为局域网的time service provider,通常将stratum设置为10

2、ntp相较chrony:
    根据红帽文档,Chronyd与Ntpd的区别在于:
    1. chronyd使用更好的算法,同步精度、速度与对系统的影响都比ntpd更好。
    2. chronyd可以在更大的范围内调整系统时间速率,且能在时钟损坏或不稳定的计算机上正常工作。
    3. 当网络故障时,chronyd仍能很好地工作,而ntpd必须定时轮询时间参考才能正常工作。
    4. chronyd可以快速适应时钟速率的突然变化,ntpd则需要一段时间才能稳定。
    5. chronyd提供对孤立网络的支持,手动输入校准时间,并通过算法计算实时时间,估计计算机增减时间的速率,从而调整时间。

    I、ntp能做,chrony做不到的:
    ntp支持RFC 5905的所有操作模式,包括广播、多播和manycast服务器/客户端。然而,广播和多播模式本质上不如普通的服务器/客户机模式准确和安全(即使有身份验证),通常应该避免。
    ntp支持自动密钥协议(RFC 5906)来使用公钥加密对服务器进行身份验证。请注意,该协议已被证明是不安全的,并且已被NTS(RFC 8915)淘汰。
    ntp已经被移植到更多的操作系统中。
    ntp包含大量用于各种硬件参考时钟的驱动程序。chrony需要其他程序(如gpsd或ntp refclock)通过SHM或SOCK接口提供参考时间。

    II、chrony可以比ntp做得更好:
    chrony可以在访问时间参考是断断续续的环境中有效地执行。ntp需要定期对引用进行轮询才能正常工作。
    chrony通常可以更快地同步时钟,并具有更好的时间精度。
    chrony快速适应时钟速率的突然变化(例如,由于晶体振荡器的温度变化)。ntp可能需要很长时间才能重新安定下来。
    chrony即使在网络拥塞时间较长的情况下也能表现良好。
    默认配置中的chrony从不占用时间来不打乱其他正在运行的程序。ntp也可以配置为从不步进时间,但是在这种情况下,它必须使用不同的方法来调整时钟(daemon循环而不是内核规程),这可能会对时钟的准确性产生负面影响。
    chrony可以在更大的范围内调整时钟的速率,这使得它甚至可以在时钟中断或不稳定的机器上运行(例如在某些虚拟机中)。
    chrony更小,占用的内存更少,只有在需要时才会唤醒CPU,这样更省电。

    III、chrony可以做ntp做不到的事情:
    chrony支持网络时间安全(NTS)认证机制。
    chrony在Linux上支持硬件时间戳,这允许在本地网络中进行非常稳定和准确的同步。
    chrony为独立网络提供支持,无论时间校正的唯一方法是手动输入(例如,由管理员查看时钟)。
    chrony可以查看在不同更新时更正的错误,计算出计算机获得或丢失时间的速率,并使用此估计值来随后调整计算机时钟。
    chrony支持计算实时时钟的增益或丢失率,即在计算机关闭时保持时间的时钟。当系统引导时,它可以使用这些数据从实时时钟的修正版本设置系统时间。到目前为止,这些实时时钟工具仅在Linux上可用。

Logo

更多推荐