如何在成百上千台服务器上轻松部署时间同步服务?只需这份 Playbook!

数据库2025-11-05 02:07:011544

在大规模的何成生产环境中,时间同步一直是百上部署一个看似简单却至关重要的任务。想象一下,千台器上轻松当你的服务服务份服务器群中有上百台机器,每台机器的时间时间可能因不同的原因略微偏离,最终影响到日志记录、同步数据库同步、只需甚至自动化任务的何成执行,结果可能导致数据丢失或严重的百上部署业务中断。

问题来了?千台器上轻松

你是否曾遇到过,某个服务因为时间不一致而出现无法预料的服务服务份错误?或许你的日志文件日期混乱,数据库同步时出现时间戳不一致的时间问题?这些都可能是因为服务器时间没有得到精确同步,或者同步配置出现了问题。同步

那么,只需如何确保所有服务器的何成时间精确一致?

如何在一个庞大的集群中,快速、可靠地部署时间同步服务?

继续往下看吧,你将会发现如何通过Ansible来轻松实现Chrony时间同步服务器的自动化部署哦!高防服务器

时间同步的重要性

在企业级IT环境中,时间同步看似是个不起眼的问题,但其实它对整个系统的稳定性、数据一致性和故障排除至关重要。无论是应用程序、日志文件,还是数据库事务,都依赖于时间的准确性。

常见的时间同步工具包括NTP和Chrony,而在现代虚拟化环境中,Chrony通常是更优的选择,因为它能提供更快的同步速度和更低的资源占用,尤其在网络不稳定或虚拟化环境中表现尤为出色。

面临的挑战

假设你是IT运维主管,负责管理公司数百台服务器,这些服务器可能分布在不同的数据中心。随着业务的不断扩大,b2b供应网管理每台机器的时间同步变得越来越复杂。此时,手动去逐台设置时间同步源,显然不现实,且容易出错。

如何让所有服务器的时间同步变得简单、自动且高效?

为什么选择 Chrony?

Chrony在一些场景下优于传统的 NTP:

更精确的同步:Chrony可以在服务器启动时迅速同步时间,而NTP可能需要更长时间。适应不稳定的网络:Chrony在不稳定的网络环境下表现更好,能够处理丢包和延迟。高效的资源占用:Chrony的资源消耗相对较低,更适合大规模集群。

Ansible自动化部署Chrony时间同步

通过Ansible,你可以轻松解决这个问题,快速部署并配置Chrony时间同步服务。Ansible是一个强大的自动化运维工具,可以让你在几分钟内完成跨大规模集群的配置和管理任务。通过一个简单的Playbook,你就能完成以下任务:

批量安装 Chrony 软件包;配置时间同步源,确保每台服务器的时间与标准时间同步;自动启动并启用 Chrony 服务,服务器租用确保服务在服务器启动时自动启动;通过一个命令查看同步状态,确保系统时间精准。

首先,让我们在Ansible的主机清单里添加我们的目标服务器。假如我们现在专注于设置Chrony客户端,并且决定使用国内的互联网时间服务器来进行时间同步的话,那么接下来就是具体的步骤了。

1. 配置主机清单文件

hosts.ini 文件如下:

复制[chrony_clients] ansible ansible_host=192.168.31.100 ansible ansible_host=192.168.31.101 ansible ansible_host=192.168.31.1021.2.3.4. 2. 配置客户端同步服务器时间

对于Chrony客户端,我们配置它们从指定的时间同步服务器同步时间:

复制--- -name:部署Chrony时间同步服务 hosts:chrony_servers become:yes vars: ntp_server1:"ntp1.aliyun.com" ntp_server2:"ntp2.aliyun.com" ntp_server3:"ntp3.aliyun.com" ntp_server4:"ntp4.aliyun.com" network_range:"192.168.31.0/24" tasks: -name:安装Chrony软件包 apt: name:chrony state:present -name:配置Chrony配置文件内容 template: src:chrony.conf.j2 dest:/etc/chrony.conf mode:0644 -name:启动chrony服务并配置开机启动 systemd: name:chronyd state:started enabled:yes -name:验证Chrony是否同步成功 command: cmd:chronyctracking register:chrony_tracking changed_when:false -name:打印时间同步结果 ansible.builtin.debug: msg:"{{ chrony_tracking.stdout}}"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.

chrony.conf.j2文件详解:

chrony.conf.j2是一个Jinja2模板文件,用于在Playbook执行时动态生成 Chrony配置文件。Jinja2是一个强大的模板引擎,它可以让你在配置文件中插入变量和条件逻辑,在Ansible Playbook中广泛使用。

在这个文件中,我们通常会设置Chrony服务器的时间源、允许的客户端、日志文件路径等配置。

复制# This is a basic Chrony configuration file generated by Ansible. # Modify it as per your requirements. # Use public NTP servers for time synchronization server{{ntp_server1}}iburst server{{ntp_server2}}iburst server{{ntp_server3}}iburst server{{ntp_server4}}iburst # Allow clients from the local network to sync with this server allow{{network_range}} # Set the driftfile location to record the offset in time driftfile/var/lib/chrony/drift # Log synchronization details and statistics logtrackingmeasurementsstatistics # Allow clients to query for the servers time localstratum10 # Make sure that time is synchronized at boot initstepslew5{{ntp_server1}}{{ntp_server2}} # Use an external time source (if applicable) # server ntp.example.com iburst1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.

关键字段详解:

{{ network_range}}:指定允许连接到Chrony服务器进行时间同步的IP地址范围。driftfile /var/lib/chrony/drift:Chrony会在文件中记录时间漂移,以便未来同步。log tracking measurements statistics:记录详细的同步信息、测量数据和统计信息,以便后续审计与分析。initstepslew 5:这个配置能让Chrony启动时更精确地同步时间,通过参考前5个NTP服务器来校准系统时间。local stratum 10:设置本地Chrony服务器的层级,使其在没有更高优先级时间源时作为本地时间源。

执行Playbook

只需要执行以下命令,Playbook会自动完成所有操作:

复制ansible-playbook chrony_playbook.yml1.

成功执行上述命令后,如下图输出结果:

快速验证

Playbook执行完成,你可以通过以下命令快速验证Chrony服务是否正常运行并同步时间:

复制chronyc tracking1.

如果配置正确,应该看到类似以下的输出,表示 Chrony 正在同步时间:

复制root@node1:~# chronyc tracking Reference ID : 74CB974A (a.chl.la) Stratum : 3 Ref time (UTC) : Wed Feb 19 14:52:49 2025 System time : 0.001176818 seconds fast of NTP time Last offset : -0.000331252 seconds RMS offset : 0.007539239 seconds Frequency : 1.403 ppm fast Residual freq : +0.184 ppm Skew : 8.313 ppm Root delay : 0.173159912 seconds Root dispersion : 0.004186447 seconds Update interval : 65.3 seconds Leap status : Normal1.2.3.4.5.6.7.8.9.10.11.12.13.14.

总结

通过这份Ansible Playbook,你可以轻松地在公司的所有生产服务器上部署和配置Chrony时间同步服务,实现跨服务器的准确时间同步,无需手动配置每台服务器。

本文地址:http://www.bzve.cn/html/439c3099530.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

用罗技G402玩英雄联盟——打造极致游戏体验(解密G402在英雄联盟中的优势与应用技巧)

“一个软件只做一件事情”的哲学思想已经被这个新来者彻底颠覆。除了取代了 sysvinit 成为新的系统初始化工具外,systemd 还是一个系统管理工具。目前为止,由于 systemd-sysv 这个软件包提供的兼容性,那些我们使用惯了的工具还能继续工作。但是当 Debian 将 systemd 升级到214版本后,这种兼容性就不复存在了。升级措施预计会在 Debian 8 Jessie 的稳定分支上进行。从此以后用户必须使用新的命令来管理系统、执行任务、变换运行级别、查询系统日志等等。不过这里有一个应对方案,那就是在 .bashrc 文件里面添加一些别名。现在就让我们来看看 systemd 是怎么改变你管理系统的习惯的。在使用 systemd 之前,你得先把 sysvinit 保存起来,以便在 systemd 出错的时候还能用 sysvinit 启动系统。这种方法只有在没安装 systemd-sysv 的情况下才能生效,具体操作方法如下:复制代码代码如下:# cp -av /sbin/init /sbin/init.sysvinit 在紧急情况下,可以把下面的文本:复制代码代码如下:init=/sbin/init.sysvinit添加到内核启动参数项那里。systemctl 的基本用法systemctl 的功能是替代“/etc/init.d/foo start/stop”这类命令,另外,其实它还能做其他的事情,这点你可以参考 man 文档。一些基本用法: systemctl - 列出所有单元(UNIT)以及它们的状态(这里的 UNIT 指的就是系统上的 job 和 service) systemctl list-units - 列出所有 UNIT systemctl start [NAME...] - 启动一项或多项 UNIT systemctl stop [NAME...] - 停止一项或多项 UNIT systemctl disable [NAME...] - 将 UNIT 设置为开机不启动 systemctl list-unit-files - 列出所有已安装的 UNIT,以及它们的状态 systemctl --failed - 列出开机启动失败的 UNIT systemctl --type=mount - 列出某种类型的 UNIT,类型包含:service, mount, device, socket, target systemctl enable debug-shell.service - 将一个 shell 脚本设置为开机启动,用于调试为了更方便处理这些 UNIT,你可以使用 systemd-ui 软件包,你只要输入 systemadm 命令就可以使用这个软件。你同样可以使用 systemctl 实现转换运行级别、重启系统和关闭系统的功能: systemctl isolate graphical.target - 切换到运行级别5,就是有桌面的运行级别 systemctl isolate multi-user.target - 切换到运行级别3,没有桌面的运行级别 systemctl reboot - 重启系统 systemctl poweroff - 关机所有命令,包括切换到其他运行级别的命令,都可以在普通用户的权限下执行。journalctl 的基本用法systemd 不仅提供了比 sysvinit 更快的启动速度,还让日志系统在更早的时候启动起来,可以记录内核初始化阶段、内存初始化阶段、前期启动步骤以及主要的系统执行过程的日志。所以,以前那种需要通过对显示屏拍照或者暂停系统来调试程序的日子已经一去不复返啦。systemd 的日志文件都被放在 /var/log 目录。假如你想使用它的日志功能,需要执行一些命令,因为 Debian 没有打开日志功能。命令如下:复制代码代码如下:# addgroup --system systemd-journal # mkdir -p /var/log/journal # chown root:systemd-journal /var/log/journal # gpasswd -a $user systemd-journal 通过上面的设置,你就可以以普通用户权限使用 journal 软件查看日志。使用 journalctl 查询日志可以获得一些比 syslog 软件更方便的玩法: journalctl --all - 显示系统上所有日志,以及它的用户 journalctl -f - 监视系统日志的变化(类似 tail -f /var/log/messages 的效果) journalctl -b - 显示系统启动以后的日志 journalctl -k -b -1 - 显示上一次(-b -1)系统启动前产生的内核日志 journalctl -b -p err - 显示系统启动后产生的“ERROR”日志 journalctl --since=yesterday - 当系统不会经常重启的时候,这条命令能提供比 -b 更短的日志记录 journalctl -u cron.service --since=2014-07-06 07:00 --until=2014-07-06 08:23 - 显示 cron 服务在某个时间段内打印出来的日志 journalctl -p 2 --since=today - 显示优先级别为2以内的日志,包含 emerg、alert、crit三个级别。所有日志级别有: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7) journalctl >yourlog.log - 将二进制日志文件复制成文本文件并保存到当前目录Journal 和 syslog 可以很好的共存。而另一方面,一旦你习惯了操作 journal,你也可以卸载掉所有 syslog 的软件,比如 rsyslog 或 syslog-ng。假如想要得到更详细的日志信息,你可以在内核启动参数上添加“systemd.log_level=debug”,然后运行下面的命令:复制代码代码如下:# journalctl -alb 你也可以编辑 /etc/systemd/system.conf 文件来修改日志级别。利用 systemd 分析系统启动过程systemd 可以让你能更有效地分析和优化你的系统启动过程: systemd-analyze - 显示本次启动系统过程中用户态和内核态所花的时间 systemd-analyze blame - 显示每个启动项所花费的时间明细 systemd-analyze critical-chain - 按时间顺序打印 UNIT 树 systemd-analyze dot | dot -Tsvg >systemd.svg - 为开机启动过程生成向量图(需要安装 graphviz 软件包) systemd-analyze plot >bootplot.svg - 产生开机启动过程的时间图表systemd 虽然是个年轻的项目,但已有大量文档。首先要介绍给你的是Lennart Poettering 的 0pointer 系列。这个系列非常详细,非常有技术含量。另外一个是免费桌面信息文档,它包含了最详细的关于 systemd 的链接:发行版特性文件、bug 跟踪系统和说明文档。你可以使用下面的命令来查询 systemd 都提供了哪些文档:复制代码代码如下:# man systemd.index 不同发行版之间的 systemd 提供的命令基本一样,最大的不同之处就是打包方式。

电脑字体海报排版教程(打造独特的字体海报,让排版更有创意)

在本子上升级到了12.10。但是在update的时候遇到如下错误:正在读取软件包列表... 有错误!复制代码代码如下:原因是12.04和12.10的deb源list发生冲突,解决办法是删除该目录下的所有文件:复制代码代码如下:然后执行update命令来重新生成:复制代码代码如下:apt-get update

轻松学会以戴尔电脑分区桌面教程(简明易懂,快速操作)

安装环境: ubuntu 8.04.1 LTS 安装步骤:1.安装lm-sensors # apt-get install lm-sensors 2.设定监控选项 # sensors-detect 通常都是回答yes即可,注意最后一项,例如下面的资讯 To load everything that is needed, add this to /etc/modules: #----cut here---- # I2C adapter drivers # modprobe unknown adapter NVIDIA i2c adapter # modprobe unknown adapter NVIDIA i2c adapter # modprobe unknown adapter NVIDIA i2c adapter i2c-i801 # Chip drivers # no driver for Winbond W83L785R/G yet lm85 #----cut here---- 3.出现如上讯息后,载入模组例如我的是i2c-i801与lm85# modprobe i2c-i801 # modprobe lm85 4.之后再输入: # sensors 5.就会出现cpu温度之类的监控讯息。 adm1027-i2c-3-2e Adapter: SMBus I801 adapter at e000 V1.5: +1.31 V (min = +0.00 V, max = +3.32 V) VCore: +1.49 V (min = +0.00 V, max = +2.99 V) V3.3: +3.30 V (min = +0.00 V, max = +4.38 V) V5: +5.08 V (min = +0.00 V, max = +6.64 V) V12: +11.97 V (min = +0.00 V, max = +15.94 V) ALARM CPU_Fan: 3941 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) fan3: 0 RPM (min = 0 RPM) fan4: 1882 RPM (min = 0 RPM) CPU Temp: +48.8°C (low = -127.0°C, high = +127.0°C) Board Temp: +46.0°C (low = -127.0°C, high = +127.0°C) Remote Temp: +45.5°C (low = -127.0°C, high = +127.0°C) cpu0_vid: +1.525 V

Ubuntu 8.04 ( Hardy Heron ) 是完全支持 Compiz Fusion所有特性的一个版本.但是主要的问题是没办法来配置这些特性.为了配置这些不同的选项,我们需要使用一个叫 Compiz Config的工具软件.打开新立得管理器,搜索 Compiz Config 然后安装就可以了.一旦安装好了 Compiz Config ,运行他,你会看到一个类似于如下图所示的界面:这个界面非常的简单,选中了的选项表示这个效果是启用的,没有选中的选项表示这个效果是没有启用的.为了配置单个的效果例如键绑定点击图片的效果.现在我就来演示一下一些我最喜欢的特效和实际的效果图.1)屏幕上火焰效果:你可以使用这个特效在你的屏幕上画火字,为了使用这个效果,你需要使用组合键shift+win键,并点击鼠标左键,火焰就会被喷在屏幕上.当火焰文字在你的屏幕上,在你的正常的桌面上工作区的时候,你依然可以做所有的事情,例如浏览网页,假如想清除火焰文字,请按组合键shift+win+c键,这个时候火焰文字就会被清除.2)展览特效:这个效果能让你预览的桌面.使用这个特效只需要按组合键win+e 3)摆动窗口:一个非常受众多Compiz Fusion玩家喜爱的特效,他主要是使你的窗口像水一样摆动.4)水滴效果:使你的桌面像下雨一样的非常好,非常迷人的一个效果.通过使用ctrl+win键来激活这个效果.  5)窗口切换:使用一种类似ITunes的cover flow的方式来切换窗口。通过使用win+tab键来使用这个种效果 6)窗口圆环切换:使你的窗口形成一个圆环,并使用简单的alt+tab来切换窗口.因为这个插件禁止了alt+tab的默认的浏览的功能 现在,让我们开始随心所欲的定制自己喜欢的 Compiz fusion 特效吧!

Mac电脑数据迁移教程(轻松迁移你的数据到新的Mac电脑)

热门文章

友情链接

滇ICP备2023006006号-39