【讲清楚,说明白!】NTP时间同步服务详解
(一)NTP服务器的概念
(二)NTP服务器的设置
(一)NTP服务器的概念
(1.1)NTP(Network Time Protocol)服务器是用来是计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准时间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议attack。时间按NTP服务器的等级传播,按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中。
(1.2)NTP提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构互相连接,而Stratum-1的时间服务器是整个系统的基础。计算机主机一般同多个时间服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。为防止对事件服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。
(1.3)例如在我们系统中有一台NTP服务器,然后会有多台待同步时间的成员服务器。在每台主机的主板上都会有一个晶体震荡芯片始终在跳动着,由于每个晶体震荡芯片的震动频率不完全一致,所以各个主机也很难保持时间的同步。此时我们就需要由NTP服务器来保证各个主机时间的一致性,例如现在NTP服务器标准时间是7:00:00点整,而此时在A主机上的时间是6:59:00分,C主机是7:01:00分,那么此时A主机便会加快自己晶体震荡芯片的跳动频率尽快赶上NTP服务器的步伐,而C主机便会减慢自己晶体震荡芯片的跳动频率降速也尽快和NTP服务器的时间保持一致。
(二)NTP服务器的设置
(2.1)在我们系统中有多种同步时间的服务,其中RHEL 7系统中默认的时间同步服务是chrony,不过这个服务并不好用,我们使用的是NTP服务。我们先将vms002主机的chrony服务删除掉,然后安装NTP软件包。
# yum list chr*---查询chrony服务
# yum remove chrony.x86_64 -y---将chrony服务卸载掉
# systemctl stop ntpd---停止ntpd服务
# yum remove ntp -y---将之前的NTP服务卸载掉
# rm -rf /etc/ntp.conf.rpmsave---将ntp服务剩余的文件删除掉
# yum install ntp -y---安装NTP服务的软件包
(2.2)接着我们编辑ntp服务的配置文件,其中vms002主机的/var/lib/ntp/drift文件表示的是晶体震荡芯片的配置文件,而restrict表示“限制”,default表示“默认”,nomodify表示“不允许修改”,notrap表示“不允许陷阱操作”,nopeer表示不允许建立对等的连接,noquery表示不允许查询。然后我们指定192.168.26.0网段的主机可以向vms002主机发送NTP查询,并指定本机NTP服务器的时间参考标准为本机主板上晶体震荡芯片的IP地址127.127.1.0
# vim /etc/ntp.conf---编辑ntp服务的配置文件
(2.3)然后我们将vms002主机的ntp服务重启一下,并设置开机自动启动,因为ntp服务监听的端口是123,此时我们通过netstat命令查询发现ntp服务也已经处于监听的状态了。
# systemctl restart ntpd---将ntp服务重启一下
# systemctl enable ntpd---设置开机自动启动
# netstat -tunlp | grep ‘:123‘---查看ntp服务是否有监听
(2.4)接着我们在vms002主机上设置将当前的时间调整为慢了1个小时左右的状态,然后我们在vms002主机上使用ntpdate命令以此来设置按照vms001主机的时间进行同步,此时我们发现vms002主机的时间已经更新为正确的状态了。
# date -s "2019-11-12 20:00:00"---设置当前系统的时间
# ntpdate 192.168.26.101---设置时间和vms001主机的时间的进行同步时间同步
(2.5)由于以上的方式我们是通过ntpdate手动的方式进行时间同步的,随着时间的推移可能会经常产生时间不同步的情况。所以我们需要在系统中设置一个守护进程daemon,让它自己自动和服务器保持时间同步。此时我们便可以在vms002主机上安装ntp客户端软件(图2-6),接着打开ntp客户端软件后,我们输入时间同步的服务器的地址192.168.26.101,并勾选加速初始同步(图2-7),其中如果勾选了使用本地时钟源就是表示以本机晶体震荡芯片的IP地址127.127.1.0为时间同步。如果我们希望在客户端使用命令行的方式进行配置,则可以在/etc/chrony.conf配置文件中进行设置(图2-7-1)。
# yum install system-config-date -y---在vms002主机安装ntp客户端软件
# system-config-date &---打开图形化界面
# vim /etc/chrony.conf---客户端中ntp服务的配置文件
(2.6)如果我们希望查看系统是否真的已经保持了时间同步,我们可以使用chronyc命令,当我们看到此处表示的为“*”的时候,就表示当前系统的时间已经同步了。
# chronyc sources -v---查询当前系统是否已经保持时间同步
(2.7)
(2.7.1)我们除了使用date命令可以来设置系统时间,我们还可以使用timedatectl命令来设置我们的系统时间。我们可以使用status来查看当前系统的状态,可以使用list-timezones来查看当前系统所有的时区信息,使用set-timezone参数来设定当前系统的时区。
# timedatectl---默认和timedatectl status意义一致
# timedatectl status---查看当前系统时间的状态
# timedatectl list-timezones---查看当前系统所有时区的信息
# timedatectl set-timezone Africa/Dakar---修改当前的时区为Africa/Dakar
# timedatectl set-timezone Asia/Shanghai---修改当前的时区为亚洲上海
(2.7.2)如果我们想对时间进行设置,则可以使用set-time命令进行时间的设置。
# timedatectl set-time "2012-12-21 10:00:00"---使用set-time设置当前系统时间
(2.7.3)如果我们系统是RHEL 6的系统,没有timedatectl命令,那么我们应该怎样修改时区的信息呢?我们可以将/usr/share/zoneinfo/Asia/目录中的模板文件拷贝到当前系统的/etc/localtime时区的目录中,此时我们/etc/localtime其实是一个链接文件(图2-13)。
# ls /usr/share/zoneinfo/Asia/
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime---将上海的时区拷贝到/etc/localtime的目录
# ls -l /etc/localtime
—————— 本文至此结束,感谢阅读 ——————