Linux中的网络时间服务器

本章主要介绍网络时间的服务器

  • 使用chrony配置时间服务器
  • 配置chrony客户端服务器同步时间

1.1 时间同步的重要性

一些服务对时间要求非常严格,例如如图所示的由三台服务器搭建的ceph集群

这三台服务器的时间必须保持一致,如果不一致,就会显示警告信息。那么。如何能让这三台服务器的时间保持一致呢?手动调整时间的方式肯定不行,因为手动调整时间最多只能精确到分,很难精确到秒。而且即使现在时间调整一致了,过一段时间之后,时间可能又不一样了

所以,需要通过设置让这些服务器的时间能够自动同步,如图

这里假设我们有一个时间服务器时间为7:00,设置 server1和 server2向此时间服务器进行时间同步。 假设serverl 当前时间为6;59,它与时间服务器一对 比,“我的时间比时间服务器慢了一分钟”,然后它主板上的晶体芯片就会跳动得快一些,很快 就“追”上了时间服务器的时间

假设server2当前时间是7:01,它与时间服务器一对比,“我竟然比时间服务器快了一分钟”,然后它主板上的晶体芯片就会跳动得慢一些,“等着”时间服务器

下面就开始使用chrony来配置时间服务器

1.2 配置时间服务器

实验需求

两台Linux主机(redhat8、node1)这里把redhat8配置成时间服务器,node1作为客户端向redhat8进行时间同步

在安装系统时,如果已经选择了图形化界面,则默认已经把 chrony这个软件安装上了(如果没有安装,请先看后面的软件 包管理章节,然后自行安装上去)

使用vim编辑器打开/etc/chrony.conf,只修改我们能用的几行

(1)指定所使用的上层时间服务器

把pool 2.rhel.pool.ntp.org iburst修改成pool 127.127.1.0 iburst

pool后面跟的是时间服务器,因为这里把redhat8作为chrony服务器,没有上一层的服务 器,所以上层服务器设置为本地时钟的IP:127.127.1.0

这里iburst的意思是,如果chrony服务器出问题,客户端会发送一系列的包给chrony服务器,对服务器进行检测

(2)指定允许访问的客户端

修改allow所在行,把注释符#去掉,并把后面的网段改为192.168.161.0/24

把#allow 192.168.0.0/16修改为allow 192.168.161.0/24

redhat8配置成时间服务器之后,只允许192.168.161.0/24网段的客户端进行时间同步。如果要允许所有客户端都能向此时间服务器进行时间同步,可以写成allow 0/0或allow all

(3)把local stratum 前的注释符#去掉

这行的意思是,即使服务器本身没有和时间服务器保持时间同步,也可以对外提供时间服务,这行注释要取消

保存退出,去除空白行和注释行之后,最后修改完成的代码如下

[root@redhat8 ~]# egrep -v "^#|^$" /etc/chrony.conf 
pool 127.127.1.0 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.161.0/24
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
[root@redhat8 ~]#

然后重启chronyd这个服务(注意,这里是chronyd而不是chrony),并设置开机自动启动

[root@redhat8 ~]# systemctl restart chronyd
[root@redhat8 ~]# systemctl enable chronyd
Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service → /usr/lib/systemd/system/chronyd.service.
[root@redhat8 ~]#

chrony用的是UDP的123和323

[root@redhat8 ~]# netstat -nutlp | grep chronyd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           2622/chronyd        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2622/chronyd        
udp6       0      0 ::1:323                 :::*                                2622/chronyd        
[root@redhat8 ~]#

在防火墙中把这两个端口开放

[root@redhat8 ~]# firewall-cmd --add-port=123/udp --permanent 
success
[root@redhat8 ~]# firewall-cmd --add-port=323/udp --permanent 
success
[root@redhat8 ~]# firewall-cmd --reload 
success
[root@redhat8 ~]# 

这里加上 --permanent选项的目的是让其永久生效,然后通过reload重新加载防火墙规则, 让其也立即生效

至此,用chrony搭建的时间服务器完成

1.3 配置chrony客户端

把node1配置成时间服务器的客户端,也就是chrony客户端

在node1(IP地址为192.168.161.12)上用vim编辑器修改/etc/chrony.conf,修改下面的几行

(1)修改pool那行,指定要从哪台时间服务器同步时间

 由原来的pool 2.rhel.pool.ntp.org iburst改为pool 192.168.161.16 iburst

这里指定时间服务器为192.168.161.16,即向192.168.161.16进行时间同步

(2)修改makestep那行,格式如下

 makestep 阈值 limit

客户端向服务器同步时间有两种方式:step和 slew

step:跳跃着更新时间,如时间由1点直接跳到7点

slew:平滑着移动时间,晶体芯片跳动得快一些,就好比秒针的转速“快进”了一样

如果客户端和服务器的时间相差较多,则通过step的方式更新时间;如果客户端和服务器的时间相差不多,则通过slew的方式更新时间。那么,时间相差多或不多的标准是什么呢? 就要看时间差是否超过makestep后面的住值了

举一个例子,makestep 10 3的意思是,如果客户端和服务器的时间相差10秒以上,就认为客户端和服务器的时间相差较多,则前三次通过step 的方式更新时间。客户端通过这种方式会更新得很快,有些应用程序因为时间的突然跳动会带来问题

如果客户端和服务器的时间相差10秒以内,就认为二者时间相差不多,则通过slew的方式更新时间。这种方式更新的速度会比较慢,但比较平稳

 把原来的makestep 1.0 3改成makestep 200 3

如果客户端和服务器的时间相差200秒以上,就认为二者时间相差较多,则通过step的方式更新时间

保存退出并重启 chronyd服务

[root@node1 ~]# systemctl restart chronyd.service 
[root@node1 ~]# systemctl enable chronyd.service 
[root@node1 ~]#

为了更细致地看到两台机器的时间差,先配置ssh使得node1可以无密码登录到redhat8。 先生成密钥对

[root@node1 ~]# ssh-keygen -N "" -f /root/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.

配置到redhat8的密钥登录

[root@node1 ~]# ssh-copy-id 192.168.161.16

给node1上通过date命令设置时间,使得node1和redhat8的时间相差200秒

[root@node1 ~]# date -s "2023-12-07 12:30:00" ; hwclock -w
2023年 12月 07日 星期四 12:30:00 CST
[root@node1 ~]# 

然后同时显示两台机器的时间

[root@node1 ~]# date ; ssh 192.168.161.16 date
2023年 12月 07日 星期四 12:30:03 CST
2023年 12月 07日 星期四 12:16:39 CST
[root@node1 ~]#

可以看到,时间相差了约13分钟,即780秒

然后重启node1的chronyd服务,等待几秒之后再次查看

[root@node1 ~]# systemctl restart chronyd.service 
[root@node1 ~]# date ; ssh 192.168.161.16 date
2023年 12月 07日 星期四 12:18:59 CST
2023年 12月 07日 星期四 12:18:59 CST
[root@node1 ~]#

可以看到,时间很快就同步了,因为这是通过step的方式同步的

再次修改时间

[root@node1 ~]# date -s "2023-12-07 12:22:00" ; hwclock -w
2023年 12月 07日 星期四 12:22:00 CST
[root@node1 ~]# date ; ssh 192.168.161.16 date
2023年 12月 07日 星期四 12:22:06 CST
2023年 12月 07日 星期四 12:20:26 CST
[root@node1 ~]# 

两台机器的时间相差1分40秒,即100秒,这个值低于200秒,即在makestep的阙值范围 之内,此时客户端向服务器进行时间同步时只能通过slew的方式同步

此时重启 chronyd服务,也不会保持时间同步

[root@node1 ~]# systemctl restart chronyd.service 
[root@node1 ~]# date ; ssh 192.168.161.16 date
2023年 12月 07日 星期四 12:23:14 CST
2023年 12月 07日 星期四 12:21:34 CST
[root@node1 ~]#

可以看到,并没有同步,因为slew同步的速度比较慢

此时如果通过执行chronyc makestep命令手动step同步,则会立即同步时间

[root@node1 ~]# chronyc makestep
200 OK
[root@node1 ~]# date ; ssh 192.168.161.16 date
2023年 12月 07日 星期四 12:22:20 CST
2023年 12月 07日 星期四 12:22:20 CST
[root@node1 ~]#

这样就可以看到立即同步成功了

通过chronye -n sources -v查看现在的同步状况,如图

可以看到,node1是向192.168.161.16进行时间同步的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django讲课笔记01:初探Django框架

文章目录 一、学习目标二、课程导入(一)课程简介(二)课程目标(三)适用人群(四)教学方式(五)评估方式(六)参考教材 三、新课讲授&#…

android项目实战之编辑器集成

引言 项目需要用到编辑器&#xff0c;采用RichEditor&#xff0c;如下效果 实现 1. 引入库2 implementation jp.wasabeef:richeditor-android:2.0.0 2. XML <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width&q…

如何使用 Wordpress?托管, 网站, 插件, 缓存

这是该系列教程的第一个教程&#xff0c;最终将在运行高性能 LEMP 堆栈的阿里云 ECS 实例上运行一个新的 WordPress 站点。 在本教程中&#xff0c;我们将创建一个运行 Ubuntu 16.04 的实例&#xff0c;然后通过创建超级用户并禁用 root 登录来保护服务器&#xff0c;最后配置…

持续集成交付CICD:使用Maven命令下载Nexus制品

目录 一、实验 1.Maven安装 2.Nexus搭建公共组仓库及Maven全局配置文件 3.使用Maven命令下载Nexus制品 一、实验 1.Maven安装 &#xff08;1&#xff09;CentOS环境安装步骤 tar -xf apache-maven-3.8.6-bin.tar.gz #解压 mv apache-maven-3.8.6 /usr/local/maven #移动…

如何进行更好的面试回复之缓存函数在项目中的性能优化?

缓存函数是一种提高函数性能的技术&#xff0c;在函数被调用时&#xff0c;会将计算结果缓存起来&#xff0c;以便在后续的调用中直接返回缓存的结果&#xff0c;从而减少了重复计算的时间。 缓存函数的实现通常包括两个步骤&#xff1a; 判断缓存是否存在&#xff1a;在函数被…

理解传统模式与互联网时代 消费行为模型 AIDMA , AISAS , SICAS

1 AIDMA与AISAS 消费行为模型&#xff0c;以及所诞生的IT岗位 1.1 传统市场营销消费行为模型 AIDMA模型&#xff1a;Attention&#xff08;吸引&#xff09;&#xff0c;Interest &#xff08;兴趣&#xff09;&#xff0c;Desire&#xff08;欲望&#xff09; &#xff0c;Me…

❤ Mac IDEA使用并运行项目

❤ IDEA导入项目并运行 Mac IDEA使用 (1) 仓库导入 通过获取giett仓库包的url&#xff0c;在idea中导入项目 在gitee里获取项目的ur打开idea&#xff0c;点击 File->new->Project from Version Control (2) 创建数据库ry并导入数据脚本 &#xff08;3&#xff09;修改配…

华为配置Smart Link主备备份示例

定义 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个接口作为另一个的备份。Smart Link常用于双上行组网&#xff0c;提供可靠高效的备份和快速的切换机制。 Monitor Link是一种接口联动方案&#xff0c;它通过监控设备的上行接口…

npm私有源构建项目下载依赖报错

Jenkins构建项目报错&#xff0c;依赖找不到 Error: Couldnt find any versions for "babel/helper-module-imports" that matches "^7.22.15"at MessageError.ExtendableBuiltin (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/…

log4j(日志的配置)

日志一般配置在resources的config下面的&#xff0c;并且Util当中的initLogRecord中的initLog&#xff08;&#xff09;方法就是加载这个log4j.properties的. 首先先看log4j.properties的配置文件 log4j.rootLoggerdebug, stdout, Rlog4j.appender.stdoutorg.apache.log4j.Co…

高性能和多级高可用,云原生数据库 GaiaDB 架构设计解析

1 云原生数据库和 GaiaDB 目前&#xff0c;云原生数据库已经被各行各业大规模投入到实际生产中&#xff0c;最终的目标都是「单机 分布式一体化」。但在演进路线上&#xff0c;当前主要有两个略有不同的路径。 一种是各大公有云厂商选择的优先保证上云兼容性的路线。它基于存…

考研真题数据结构

【2021年山西大学真题】将二叉树中所有非终端结点的左右子树交换位置&#xff0c;可以得到原二叉树的 镜像二叉树&#xff0c;如图。假设二叉树的存储形式为&#xff08;lchild&#xff0c;data&#xff0c;rchild&#xff09;&#xff0c;给出求镜像二叉树的算法: &#xff0…

Sql Server Management Studio连接Mysql

目标 已知mysql连接参数&#xff08;地址和用户&#xff09;&#xff0c;期望通过Microsoft Sql Server Management Studio &#xff08;以下简称MSSSMS&#xff09;连接Mysql&#xff0c;在MSSSMS中直接查询或修改Mysql中的数据。 下载MySql Connector/ODBC并安装&#xff0c…

maven环境搭建

maven历史版本下载&#xff1a;https://archive.apache.org/dist/maven/ 新建系统变量编辑Path&#xff0c;添加bin目录mvn -v测试查看版本号conf目录下新建repository文件夹&#xff0c;作为本地仓库 settings.xml <?xml version"1.0" encoding"UTF-8&…

gitee配置

注册配置gitee Gitee官网 进入官网之后&#xff0c;有账号直接登录&#xff0c;没有账号注册一个新的账号 下载安装git客户端 官网地址 下载完成&#xff0c;一路直接点击安装直接安装成功 检查是否安装成功 鼠标留在桌面–>右击–>出现Git GUI Here/Git Bash Her…

windows系统nodeJs报错node-sass npm ERR! command failed

报错信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…

国科大通信原理复习

CH4-信源的数字化 26. 信源编码的基本方法和分类 27. 无失真编码和有失真编码的区别 无失真编码能够完全一模一样的恢复到原信号。 有失真编码则不行。 28. 信息量和熵的定义 29. 离散信源的最大熵定理 n表示所有符号的种类&#xff0c;比如对于二进制码字&#xff0c;Rbit对…

SpringBoot+线程池实现高频调用http接口并多线程解析json数据

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)&#xff1a; SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…

MindOpt APL:一款适合优化问题数学建模的编程语言

什么是建模语言 建模语言是一种描述信息或模型的编程语言&#xff0c;在运筹优化领域&#xff0c;一般是指代数建模语言。 比如要写一个线性规划问题的建模和求解&#xff0c;可以采用C、Python、Java等通用编程语言来实现计算机编程&#xff08;码代码&#xff09;&#xff0…

nodejs微信小程序+python+PHP的黄山旅游景点购票系统设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…