本帖最后由 maoxingwei 于 2022-9-17 12:06 编辑
一,背景需求
各位工程师在交付项目的时候经常会遇到时间不一致的问题,尤其是超融合、分布式存储,时间一致性显得尤为重要。客户如有NTP服务器,交付过程中填写客户的NTP 服务器IP即可,但是,很多客户并无自己的ntp服务器,且我们交付的一些设备无法联外网,不能和公网的ntp 服务器同步时间,这对于设备后续的安全运行带来了隐患。此时,我们可以在客户内网环境搭建一套ntp时间服务器,来解决这个问题。
二,技术介绍
通常情况下,Windows,Linux等常用系统都可以对外提供NTP服务,像Windows域环境,如果客户端加域,则客户端自动同步域控制器的时间,达到时间同步的效果。普通的Windows server版本,通过修改注册表方法,也可以变成NTP服务器,但是通过我多次测试发现,这种方法并不稳定,有时候并不能正常同步时间。Linux自带ntp程序,而当前流行的Linux版本实现NTP的主流程序主要有两种,ntpd和chrony。在我多次搜索资料比较下,最后我选择了chrony程序,chrony相对于ntp的优势:
1,chrony可以在访问时间参考是断断续续的环境中有效地执行。ntp需要定期对引用进行轮询才能正常工作。 2,chrony通常可以更快地同步时钟,并具有更好的时间精度。 3,chrony快速适应时钟速率的突然变化(例如,由于晶体振荡器的温度变化)。ntp可能需要很长时间才能重新安定下来。 4,chrony即使在网络拥塞时间较长的情况下也能表现良好。默认配置中的chrony从不占用时间来不打乱其他正在运行的程序。 5,chrony可以在更大的范围内调整时钟的速率,这使得它甚至可以在时钟中断或不稳定的机器上运行(例如在某些虚拟机中)。 6,chrony更小,占用的内存更少,只有在需要时才会唤醒CPU,这样更省电。
注意:此教程只适用于Centos7-8 / RedHat7-8
三,准备工作
准备虚拟机或者利旧终端、服务器等设备,Centos 7/8 或者RedHat 7/8 系统镜像,选择自己喜欢的镜像版本之一即可
1,虚拟机或者硬件设备安装Linux系统,安装过程这里不赘述,如果只做NTP使用,则选择迷你安装即可,如果安装桌面版,则无需配置YUM。
3,配置固定IP,如果客户同意NTP服务器可联网,则配置DNS,让NTP服务器同步阿里云等公网NTP
红色框内容需注意
3,配置YUM,上传安装镜像ISO到虚拟机内部,并挂载到 /yumdata 文件夹
#此处 /path 为镜像所在目录,xxxx.iso 为上传的Linux镜像名称
- mount /path/xxxxx.iso /yumdata
- cd /etc/yum.repos.d
- mkdir bak
复制代码
#备份系统自带yum配置文件 #生成yum配置文件 复制下面的命令时,复制虚线内的所有内容执行 ----------------------------------------------------------- - cat > /etc/yum.repos.d/local.repo << "EOF"
- [local]
- name=local
- baseurl=file:///yumdata
- enabled=1
- gpgcheck=0
- EOF
复制代码
---------------------------------------------------------- #查看yum配置结果
如输出上图内容,则表示本地YUM配置成功
四,配置过程
1,先停用ntpd,如果有的话
- systemctl stop ntpd
- systemctl disable ntpd
复制代码
2,安装chrony程序
3,启动chrony程序
- systemctl start chronyd
- systemctl enable chronyd
复制代码
4,放开NTP服务端口
- firewall-cmd --permanent --add-service=ntp
- firewall-cmd --reload
复制代码
5,配置chrony程序
vi ntp.sh 按a进入编辑模式,复制下面虚线内的所有内容,粘贴进去,按esc,压住shift,输入冒号,按wq保存。
---------------------------------------------------------------------------------------------------- - #/bin/bash
- # Write NTP configuration
- # Backup chrony.conf
- currentTimestamp=`date +%y-%m-%d-%H:%M:%S`
- chrony_conf="/etc/chrony.conf"
- chrony_conf_backup=$chrony_conf.chronyconfig.$currentTimestamp
- if [ -f "$chrony_conf" ]; then
- echo backup $chrony_conf to $chrony_conf_backup
- cp $chrony_conf $chrony_conf_backup
- fi
- # Write chrony.conf
- echo "
- # Welcome to the chrony configuration file. See chrony.conf(5) for more
- # Use public servers from the pool.ntp.org project.
- # Please consider joining the pool (http://www.pool.ntp.org/join.html).
- server ntp1.aliyun.com iburst
- server ntp2.aliyun.com iburst
- server ntp3.aliyun.com iburst
- server ntp4.aliyun.com iburst
- # Record the rate at which the system clock gains/losses time.
- driftfile /var/lib/chrony/drift
- # Allow the system clock to be stepped in the first three updates
- # if its offset is larger than 1 second.
- makestep 1.0 3
- # Enable kernel synchronization of the real-time clock (RTC).
- rtcsync
- # Enable hardware timestamping on all interfaces that support it.
- #hwtimestamp *
- # Increase the minimum number of selectable sources required to adjust
- # the system clock.
- #minsources 2
- # Allow NTP client access from local network.
- #allow 192.168.0.0/16
- allow
- # Serve time even if not synchronized to a time source.
- local stratum 10
- # Specify file containing keys for NTP authentication.
- keyfile /etc/chrony.keys
- # Get TAI-UTC offset and leap seconds from the system tz database.
- leapsectz right/UTC
- # Specify directory for log files.
- logdir /var/log/chrony
- # Select which information is logged.
- log measurements statistics tracking
- " > $chrony_conf
复制代码
---------------------------------------------------------------------------------------------------
6,设置时区并同步系统时钟
- timedatectl set-timezone Asia/Shanghai
- chronyc -a makestep
复制代码
7,重启服务并设置启用NTP时间同步
- systemctl restart chronyd
- timedatectl set-ntp yes
复制代码
此时,内网不能联网的设备则可配置搭建好的NTP服务器的IP地址作为时间源进行时间同步,从而保持时间一致性。
五,总结
1,如内网中有防火墙等安全设备,则需放通UDP 123端口。
2,上述第5步的脚本是配置时间服务器的关键内容,脚本已经默认同时支持同步本地时钟和同步互联网阿里云时间服务器时钟作为时间源向内网客户端提供时间同步服务。
3,如果搭建的内网NTP服务器可以联网,则可保证使用内网时间服务器作为同步源的设备和互联网时间一致,
4,如果搭建的内网NTP服务器不能联外网,且时间与当前时间有差值的情况下,则手动校准时间,也可保证内网设备和外网时间一致
- timedatectl set-time '12:10:40 2022-09-20'
复制代码
|