Linux-Chrony服务
1、基础
1.1、什么是时间同步
时间同步就是通过对本地时钟的某些操作,达到为分布式系统提供一个统一时间的过程。在集中式系统中,由于所有进程都可以从系统唯一的全局时钟获取时间,
因此系统内任何两个事件都有着明确的先后关系。而在分布式系统中,由于物理上的分散性,系统无法为彼此间相互独立的模块提供一个统一的全局时钟,
而由各个进程各自维护它们的本地时钟。由于这些本地时钟的计时速率、运行环境不一致性,因此所有本地时钟在某一时刻都被校准,一段时间后,这些本地时钟也会出现不一致。
为了这些本地时钟再次达到相同的时间值,所以需要进行时间同步的操作;
1.2、为什么需要时间同步
在运维工作的场景当中,存在着众多主机协同完成不同的任务﹔比如LNMP架构,也是可以分别部署在三台不同的主机上;那么这三台主机在工作时,由于分别位于不同的主机之上,
它们需要根据文件或者数据流所生成的时间,来决定我们响应给客户端的结果该如何进行展示;此时就需要同一网络中的主机时间一致;
但这个时间一致并不是说一定得是正确的,如果现在当前时间是下午2点,但是这三台主机的时间精确一致是昨天凌晨5点,这也没有什么问题;
但对于有些场景中时间不正确也不行,比如https应用;客户端与服务端通讯时,如果客户端时间是准确的,而服务端时间来自昨天,或者来自未来的响应,则会提示存在风险,而不予接受;
1.3、时间同步是如何完成
假设服务器启动起来后,发现时间慢了24小时,那么它如何将自己的时间调整正确呢?如果是手表该如何校对时间呢?(波动表针,调整时间的正常逻辑)
如果是date命令是如何校对时间呢?(直接跳跃时间,跳跃的过程中造成部分文件出现空白段)
1.3.1、NTP
逻辑:让时间校对像手表一样波动的快一点,而不是像date命令直接跳跃过去∶其他服务器一分钟6Os,而ntp一分钟30s,来实现时间的校对;
问题:为了赶上慢的24小时,可能需要花费非常长的时间来进行校对;
1.3.2、Chrony
逻辑:Chrony是NTP的替代品,能更精确的时间和更快的速度同步时钟,传统ntp需要几小时,
而 chrony仅需要数秒种或数毫秒即可完成时间同步;(调整时间的速度就像波动表针的速度一样快)
1.4、Chrony时间服务
1.4.1、Chrony介绍
chrony是一个ntp协议的实现程序,既可以当做服务端,也可以充当客户端;它专为间歇性互联网连接的系统而设计,当然也能良好应用于持久互联网连接的环境;
chrony有三个时间参考:硬件时钟、实时时钟以及手动同步;
chrony是NTP的替代品,能更精确的时间和更快的速度同步时钟;
chrony占用系统资源少,只有被唤起时才占用少部分CPU;
chrony兼容ntpdate ;ochrony允许本地网络其他主机像本地进行时间同步;
1.4.2、Chrony优势
更快的同步,最大程度减少了时间和频率误差,对于并非全天运行的虚拟计算机非常有用
能够更好地响应时钟频率的快速变化,对于不稳定的虚拟机或导致时钟频率发生变化的技术有用
在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响在应对临时非对称延迟时(
例如,在大规模下载造成链接饱和时)提供了更好的稳定性无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
1.4.3、Chrony时间同步架构图
1.4.4、所有服务器直接同步公网上的时间服务器不就可以了吗?为何需要自己搭建一台时间服务器呢?
如果每台服务器都去同步公网时间服务器,且服务器较多造成延迟、浪费带宽
解决方法∶搭建内网时间服务器,来同步公网时间,然后所有服务器来与这台服务器进行时间同步,减小误差,提升同步速度减少网络带宽损耗,统一规范管理时间
2、Chrony安装
2.1、环境准备
2.1.1、演示的主机
Chrony-server 192.168.10.24
Chrony-client 192.168.10.25
2.2、配置文件与命令名字介绍
主配置文件:/etc/chrony.conf 客户端程序:/usr/bin/chronyc 服务端程序:/usr/sbin/chronyd
2.3、服务端
2.3.1、安装
yum install chrony -y
2.3.2、配置文件介绍
[root@server ~]# cat /etc/chrony.conf # 使用同步的远程时钟源,理论上可以同步无限个 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst # 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整 driftfile /var/lib/chrony/drift # 如果系统时钟的偏移量大于1秒,则允许系统时钟在前三次更新中步进 makestep 1.0 3 # 启用实时时钟(RTC)的内核同步 rtcsync # 通过使用hwtimestamp 指令启用硬件时间戳 #hwtimestamp * #增加调整所需的可选择源的最小数量 #minsources 2 # Allow NTP client access from local network. allow 192.168.10.0/24 #默认情况下本地服务器无法同步互联网时间时,可能会出现不精确,所以会拒绝提供授时服务;#开启此选项,则表示允许接受不精确时间,继续为客户端提供授时服务; #local stratum 10 #指定包含NTP身份验证密钥的文件 #keyfile /etc/chrony.keys # 日志文件 logdir /var/log/chrony # 选择日志文件要记录的信息 #log measurements statistics tracking
2.3.3、服务端的配置
[root@server ~]# vi /etc/chrony.conf # 设定外部时间服务器 server ntp.aliyun.com iburst # 允许内网同步此服务端 allow 192.168.10.0/24 # 设置断网继续同步 local stratum 10
2.4、启动服务
systemctl restart chronyd
systemctl enable chronyd
3、客户端
3.1、安装
yum install ntpdate chrony -y
3.2、配置文件
3.2.1、修改
[root@client ~]# vi /etc/chrony.conf server 192.168.10.24 iburst
3.2.2、启动服务
systemctl restart chronyd
systemctl enable chronyd
3.3、测试是否通
3.3.1、ntpdate
[root@client ~]# ntpdate 192.168.10.24 11 Mar 01:29:49 ntpdate[3518]: adjust time server 192.168.10.24 offset 0.000701 sec
3.3.2、chronyc
[root@client ~]# chronyc -a makestep 200 OK
3.4、查看时间同步是否正常
[root@nginx02 ~]# chronyc sources -v 210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 192.168.10.24 3 6 75 49 -141ns[ -350us] +/- 19ms
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器