您现在的位置是:首页 >其他 >linux——搭建NTP服务器网站首页其他
linux——搭建NTP服务器
NTP是网络时间协议(Network Time Protocol)的缩写,是一种用于同步计算机时钟的协议。它可以通过互联网或局域网等网络传输时间信息,使得多台计算机的时钟保持同步。NTP是一种分布式的协议,它通过多个时间服务器之间的协作来提供高精度的时间同步服务。NTP协议广泛应用于计算机网络、通信系统、金融交易等领域。
1、设置服务器时区
(使用外部NTP时间源可不设置)
在Linux系统中设置时区可以使用以下命令:
- 查看当前时区:
timedatectl
- 列出所有可用时区:
timedatectl list-timezones
- 设置时区:
sudo timedatectl set-timezone <时区>
例如,将时区设置为北京时间:
sudo timedatectl set-timezone Asia/Shanghai
设置完成后,可以再次运行 timedatectl
命令来验证时区是否已经修改成功。
2、安装NTP服务
1、查看是否安装NTP服务:rpm -qa|grep ntp
已安装会出现相应版本信息:
2、通过yum、apt、docker等方式安装:
yum install ntp ntpdate -y
在Ubuntu上可以使用 apt命令安装:
sudo apt-get install ntp
3、安装完成后检查NTP状态:
systemctl status ntpd
虚拟机是早已装好NTP,所以是running状态,如果是dead状态也正常,配置完成后启动即可。
3、NTP配置文件
1、root账号,编辑ntp.conf:
vi /etc/ntp.conf
在restrict
添加授时服务网址、网段,即可接入NTP的地址。
在server
添加NTP时钟源,此处添加的阿里云的NTP服务地址。若使用本地时钟作为时间源,只须保证本地时钟源IP正确即可。
如果server中存在操作系统默认的NTP时钟源(0.centos.pool.ntp.org、0.ubuntu.pool.n等),需将其注释掉。
server IP
后可接关键字iburst、prefer、minpoll、maxpoll等:
iburst
:表示在启动时快速同步时间。通常情况下,NTP客户端会与服务器建立连接并等待一段时间才能同步时间。但是,如果使用"iburst"关键字,客户端将在启动时发送多个NTP请求到服务器,以加快同步时间的速度。。prefer
:表示将此服务器设置为首选服务器,如果多个服务器都可用,则NTP客户端将优先选择被标记为"prefer"的服务器进行时间同步。minpoll
和maxpoll
:指定NTP客户端与服务器之间的轮询间隔,单位为2的幂次方秒,取值4-17,旨在防止客户端过于频繁地向服务器发送请求或者太少地发送请求,从而影响时间同步的准确性。例如,minpoll 6
表示轮询间隔为2^6=64秒,maxpoll 10
表示轮询间隔为2^10=1024秒。iburst minpoll 4 maxpoll 4
:表示在启动时快速同步时间,并且将轮询间隔设置为2^4 = 16秒。prefer iburst minpoll 6 maxpoll 10
:表示将此服务器设置为首选服务器,快速同步时间,并将轮询间隔设置为2^6 = 64秒到 2^10 = 1024秒之间。key
: 用于NTP身份验证和安全性。通过指定一个密钥编号,可以将NTP请求与特定身份进行关联,并用于检查数据的完整性和真实性。
注意:在配置文件中,server
关键字后面只能跟一个参数,如果需要指定多个参数,可以使用多行来配置。
本地时钟源的fudge(默认的,未做修改):
fudge 127.127.1.0 stratum 10 :
fudge
表示对该服务器进行一些特殊的配置,比如调整时钟频率等。127.127.1.0
表示使用本地的时钟作为NTP服务器,这是一种常见的配置方式。127.127.0.1是一个特殊的IP地址,它是本地回环地址,也称为环回地址。它是一个保留的IP地址,用于在本地计算机上测试网络连接和通信。当计算机尝试连接127.127.0.1时,它实际上是在尝试与自己通信。stratum 10
表示该服务器的时钟层级为10,即该服务器是一个较低层级的时钟,其时间参考可能来自于其他更高层级的时钟。NTP协议中,时钟层级越低,其时间参考越不可靠。
NTP服务器时间源配置:
使用本地时钟作为时间源:这种方式适用于没有可靠的外部时间源的情况。
使用外部NTP服务器作为时间源:这种方式适用于有可靠的外部时间源的情况。在这种情况下,NTP服务器将使用外部NTP服务器作为时间源,并尝试通过与其他NTP服务器同步来保持时间的准确性。
使用GPS或其他时间源作为时间源:这种方式适用于需要高精度时间同步的情况。
无论使用哪种方式,配置时间源的步骤大致相同:
1. 打开NTP服务器的配置文件,通常是/etc/ntp.conf。
2. 在配置文件中添加或修改server指令,指定要使用的时间源的IP地址或域名。例如:
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org3. 保存配置文件并重启NTP服务器,使其开始使用新的时间源。
systemctl restart ntpd需要注意的是,为了保证时间同步的准确性,建议使用多个时间源,并将它们配置为层级结构,以便在一个时间源不可用时自动切换到另一个时间源。
配置文件中设置NTP同步日志:
# Specify the log file
logfile /var/log/ntp.log
# Enable sync status, peer events, and system stats logging
logconfig =syncstatus +peerevents +sysstats
# Specify the directory for storing statistics files
statsdir /var/log/ntpstats/
“logfile”:指定NTP服务器的日志文件路径和名称。
“logconfig”:指定日志记录级别和类型。
以上配置意思是:服务器将记录同步状态、对等方事件和系统统计信息,并在每条日志消息前添加对应的命令前缀。
选择要记录的事件类型和命令前缀。
日志级别包括:
“sysstats”:系统统计信息,例如系统启动时间、偏差值等。
“peerstats”:与对等方之间的交互信息,例如同步状态和数据报文。
“loopstats”:内部时钟的调整信息。
“clockstats”:关于本地系统时钟的统计信息。
“syncstatus”:关于同步状态的信息。
“all”:所有日志级别。
命令前缀包括:
“+”:启用特定的日志级别或命令前缀。
“-”:禁用特定的日志级别或命令前缀。
“”:显示当前设置的日志级别和命令前缀。
“statsdir”:指定存储NTP服务器统计信息的目录路径。
2、配置完成后,启动或重启NTP服务
启动:systemctl start ntpd
重启:systemctl restart ntpd
3、设置NTP服务开机自启:
systemctl enable ntpd
4、客户端配置
1、客户端只需要先安装NTP,然后编辑 /etc/ntp.conf 文件,将搭建的NTP服务端加入server 时钟源即可。
2、设置NTP自动同步(如果在配置文件中添加了轮询间隔控制,不需要设置——参考3.1服务端配置
文件,客户端不需配置restrict
地址即可)
打开NTP服务启动脚本/etc/init.d/ntp
,找到以下一行:
NTPDATE_BIN=/usr/sbin/ntpdate
将其改为:
NTPDATE_BIN=/usr/sbin/ntpdate -u -s
3、重启NTP服务
使用以下命令重启NTP服务:
systemctl restart ntpd
2、使用crontab 命令设置客户端自动同步:
(crontab -l; echo "*/60 * * * * /usr/sbin/ntpdate 1.1.1.1 >>/tmp/ntp.log")| crontab
60 (分钟)为同步时间间隔
1.1.1.1 为NTP服务器地址
/tmp/ntp.log 为同步日志
使用sudo crontab -e
即可看到设置的定时同步任务命令。
注意:定时同步的时间间隔不应该设置得太短,否则可能会对NTP服务器造成过大的负担。建议时间间隔至少1分钟以上。
5、常用的NTP命令
一些常用的ntp命令:
1、ntpdate:用于手动同步系统时钟和远程时间服务器的时间。例:ntpdate time.nist.gov。
2、ntpq:用于查询NTP服务器的状态和性能。例:ntpq -p。
ntpq -p
查询网络中的NTP服务器,同时显示客户端和每个服务器的关系。
参数 | 含义 | 备注 |
---|---|---|
remote | 远程NTP服务器的IP地址或域名,带 “*” 的表示本地NTP服务器与该服务器同步 | “*” – 当前作为优先主同步对象的远程节点或服务器 “+” – 良好的且优先使用的远程节点或服务器(包含在组合算法中) “x” – 已不再使用 |
refid | NTP服务器使用的更高一级服务器的名称 | |
st | 正在响应请求的NTP服务器的级别 | |
when | 上一次成功请求之后到现在的秒数 | |
poll | 地和远程服务器多少时间进行一次同步,单位秒,在一开始运行NTP的时候这个poll值会比较小,服务器同步的频率大,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小 | |
reach | 是一种衡量前8次查询是否成功的位掩码值,用来测试能否和服务器连接,是一个八进制值,每成功连接一次它的值就会增加 | [1,3,7,17,37,77,177,377]一个0值表示服务器不能访问,377表示所有最近的查询都是成功 |
delay | 从本地机发送同步要求到ntp服务器的往返时间 | 单位:微秒 |
offset | 主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒,offset越接近于0,主机和ntp服务器的时间越接近 | 单位:毫秒 |
jitter | 查询偏差的分布值,用于表示远程NTP服务器的网络延时是否稳定。简单地说这个数值的绝对值越小,主机的时间就越精确 | 单位:微秒 |
- ntpstat:用于显示系统时钟和NTP服务器之间的时间差。例:ntpstat。
- ntpdc:用于与NTP服务器进行交互和调试。例:ntpdc -c loopinfo。
- ntptrace:用于跟踪NTP服务器之间的路径。例:ntptrace time.nist.gov。
- ntp-wait:用于等待NTP服务器同步。例:ntp-wait -v。