在RHEL 8+中,你可以使用Chrony来在集群中进行时间同步。
集群时间同步配置步骤
已知集群的ip和主机映射配置文件/etc/hosts
的内容如下所示:
1 2 3 |
192.168.10.102 niit01 192.168.10.103 niit02 192.168.10.104 niit03 |
以下是步骤:
安装chrony
到集群中
确保所有服务器上都已经安装了chrony
。如果没有安装,可以使用以下命令进行安装(三台机器都需要):
1 |
sudo yum install -y chrony |
在niit01服务器上
编辑Chrony配置文件。使用文本编辑器打开/etc/chrony.conf
文件:
1 |
sudo vi /etc/chrony.conf |
在配置文件中找到pool
部分,并注释掉原有的服务器地址(如果有的话)。因为我们将使用niit01
作为时间同步服务器,所以不需要从外部服务器获取时间同步。
1 |
pool niit01 iburst |
在配置文件中添加以下行,以允许其他服务器从niit01
同步时间:
1 |
allow 192.168.0.0/16 |
这将允许子网中的所有服务器从niit01
同步时间。根据你的网络设置,可能需要修改子网地址。
保存并关闭配置文件/etc/chrony.conf
。
启动chronyd
服务,并确保其在系统启动时自动启动:
1 |
sudo systemctl enable --now chronyd |
在niit02
和niit03
服务器上
编辑chrony
配置文件/etc/chrony.conf
:
1 |
sudo vi /etc/chrony.conf |
在配置文件中找到pool
部分,并注释掉原有的服务器地址(如果有的话)。这是因为我们将使用niit01
作为时间同步服务器。
在配置文件中添加以下行,以指定从niit01同步时间:
1 |
pool niit01 iburst |
这将指定niit01作为时间同步服务器,并使用iburst
选项以更快地同步时间。
保存并关闭配置文件。
启动chronyd
服务,并确保其在系统启动时自动启动:
1 |
sudo systemctl enable --now chronyd |
现在,niit02和niit03服务器将开始从niit01服务器同步时间。你可以使用以下命令来检查时间同步状态:
这将显示时间同步状态,包括偏差、延迟等信息。如果一切正常,你应该看到niit02
和niit03
服务器的时间与niit01
服务器同步。
如果要查看不同的授时服务器的详情, 也可以使用这个命令
集群时间同步测试步骤
首先,在niit01服务器上修改时间。你可以使用以下命令来更改时间:
1 |
sudo timedatectl set-time 'YYYY-MM-DD HH:MM:SS' |
将 'YYYY-MM-DD HH:MM:SS'
替换为你想要设置的时间。例如,要将时间设置为2023年7月19日下午3点30分,你可以使用以下命令:
1 |
sudo timedatectl set-time '2023-07-19 15:30:00' |
确保niit01服务器上的Chrony服务正在运行。如果服务未运行,请使用以下命令启动它:
1 |
sudo systemctl start chronyd |
在niit02和niit03服务器上执行以下命令,以检查它们是否能够与niit01服务器同步时间:
1 |
chronyc tracking |
这将显示时间同步状态。你应该能够看到niit02和niit03服务器的时间与niit01服务器同步。
如果时间同步状态正常,你可以使用以下命令检查服务器上的当前时间:
1 |
date |
确保niit02和niit03服务器上的时间与niit01服务器上的时间相同。
这样,你就可以测试niit02和niit03服务器是否能够与niit01服务器同步时间了。
集群时间同步脚本编写
由于我们接下来的项目中需要生成从指定日期开始, 例如2023年6月30日开始的连续7日数据. 需要使用一个集群时间同步脚本来更改并同步时间, 文件名为:
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 38 39 40 |
#!/bin/bash # 检查参数是否为空 if [ -z "$1" ]; then echo "Usage: <code>basename $0</code> yyyy-MM-dd HH:mm:ss" exit 1 fi # 使用date命令将时间字符串转换为日期和时间 # 如果转换失败,则说明时间字符串不合法 if ! date -d "$*" >/dev/null 2>&1; then echo "Wrong argument for $*" echo "Usage: <code>basename $0</code> \"yyyy-MM-dd HH:mm:ss\"" exit 1 fi echo ">>>>>>>>>>>> SYNC TIME START >>>>>>>>>>>>" sum=-1 while [ $sum -ne 0 ]; do echo set time for niit01 to $1 '>>>' ssh niit01 "sudo date -s \"$*\"" ok1=$? echo sync time from niie02 to niit01 '>>>' ssh niit02 "(sudo timedatectl set-ntp false && sudo timedatectl set-ntp true)" ok2=$? echo sync time from niit03 to niit01 '>>>' ssh niit03 "(sudo timedatectl set-ntp false && sudo timedatectl set-ntp true)" ok3=$? sum=<code>expr $ok1 + $ok2 + $ok3 if [ $sum -eq 0 ]; then echo "<<<<<<<<<<<<< SYNC TIME END <<<<<<<<<<<<<" sleep 5 xRun.sh date else echo "sync time failed, will try 10 senconds later" sleep 10 fi done |
由于ntp同步只能用于微小的时间调整, 大幅度的时间调整前需要先关闭ntp时间同步, 调整后再开启. 开启后大约需要1秒的时间完成同步过程.
用法: 比如需要将集群的时间同步至2023-06-30 06:00:00
, 可以这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[niit@niit01 bin]$ xSyncTime.sh 2023-06-30 06:00:00 >>>>>>>>>>>> SYNC TIME START >>>>>>>>>>>> set time for niit01 to 2023-06-30 >>> Fri Jun 30 06:00:00 CST 2023 sync time from niie02 to niit01 >>> sync time from niit03 to niit01 >>> <<<<<<<<<<<<< SYNC TIME END <<<<<<<<<<<<< ===========niit01 =========== ssh niit01 date Fri Jun 30 06:00:06 CST 2023 ===========niit02 =========== ssh niit02 date Fri Jun 30 06:00:06 CST 2023 ===========niit03 =========== ssh niit03 date Fri Jun 30 06:00:06 CST 2023 |
Views: 181