linux 下构建NTP时间服务器及客户端同步
NTP 概述
- 前言
在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。在这个指南中,我们会介绍如何将一个 CentOS 系统配置为 NTP 服务器。接下来我们从概念到,基础命令,再到企业案列,逐步分享NTP技术点
- 相关概念
NTP 网络时间协议用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。
- 为什么需要设置时钟同步
由于制造工艺多种多样,所有的(非原子)时钟并不按照完全一致的速度行走。有一些时钟走的比较快而有一些走的比较慢。因此经过很长一段时间以后,一个时钟的时间慢慢的和其它的发生偏移,这就是常说的 “时钟漂移” 或 “时间漂移”。为了将时钟漂移的影响最小化,使用 NTP 的主机应该周期性地和指定的 NTP 服务器交互以保持它们的时钟同步。 在不同的主机之间进行时间同步对于计划备份、入侵检测记录、分布式任务调度或者事务订单管理来说是很重要的事情。它甚至应该作为日常任务的一部分。
NTP 基础命令
- 查看时区
[root@localhost ~]# timedatectl Local time: Sun 2021-06-20 03:36:34 -02 Universal time: Sun 2021-06-20 05:36:34 UTC RTC time: Sun 2021-06-20 16:36:34 Time zone: America/Godthab (-02, -0200) NTP enabled: n/a NTP synchronized: no RTC in local TZ: no DST active: yes Last DST change: DST began at Sat 2021-03-27 21:59:59 -03 Sat 2021-03-27 23:00:00 -02 Next DST change: DST ends (the clock jumps one hour backwards) at Sat 2021-10-30 22:59:59 -02 Sat 2021-10-30 22:00:00 -03 [root@localhost ~]#
- 设置时区
[root@localhost ~]# timedatectl list-timezones #显示所有时区 Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers …… [root@localhost ~]# timedatectl list-timezones | grep Asia/Shanghai Asia/Shanghai [root@localhost ~]# [root@localhost ~]# timedatectl set-timezone Asia/Shanghai #设置时区为上海
搭建NTP服务器
- 实验环境
服务器:192.168.10.11 客户机:192.168.10.10
案例演示
- 1.服务器端配置
[root@localhost ~]# rpm -qa|grep ntp [root@localhost ~]# cat /etc/redhat-release #1.查看服务器、客户端操作系统版本 CentOS Linux release 7.4.1708 (Core) [root@localhost ~]# rpm -qa|grep ntp #2.查看服务器是否默认安装ntp服务 [root@localhost ~]# yum install ntp ntpdate -y #3.装命令 [root@localhost ~]# rpm -qa|grep ntp #4.查看ntp服务是否安装成功 ntpdate-4.2.6p5-25.el7.centos.2.x86_64 ntp-4.2.6p5-25.el7.centos.2.x86_64 [root@localhost ~]# systemctl status ntpd #5.查看ntp服务状态 ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: inactive (dead) [root@localhost ~]# [root@localhost ~]# vim /etc/ntp.conf #6.修改配置文件,去掉默认注释即可 server 127.127.1.0 iburst #7.添加此内容: 当外部时间不可用时,使用本地时间 [root@localhost ~]# systemctl start ntpd #8.重启ntpd服务 [root@localhost ~]# netstat -tulnp | grep ntp #检查 ntp 端口起来没有 udp 0 0 192.168.10.11:123 0.0.0.0:* 23208/ntd udp 0 0 127.0.0.1:123 0.0.0.0:* 23208/ntd udp 0 0 0.0.0.0:123 0.0.0.0:* 23208/ntd udp6 0 0 fe80::a30b:879b:3f1:123 :::* 23208/ntd udp6 0 0 ::1:123 :::* 23208/ntd udp6 0 0 :::123 :::* 23208/ntd [root@localhost ~]# systemctl enable ntpd #9.设置开机自启动 Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service. [root@localhost ~]# firewall-cmd --permanent --add-port=123/udp #10.设置防火墙,打开udp123端口 success [root@localhost ~]# [root@localhost ~]# firewall-cmd --reload #10.重启firewalld防火墙 success [root@localhost ~]# [root@localhost ~]# ntpq -p #11.查看是否同步 remote refid st t when poll reach delay offset jitter ============================================================================== +electrode.felix 253.10.71.116 3 u 60 64 177 250.132 583.747 9.784 *vmd46520.contab 79.133.44.136 2 u 61 64 157 278.278 607.237 6.266 +162.159.200.123 10.4.1.175 3 u 56 64 177 163.803 591.728 4.587 cronos.unad.edu .INIT. 16 u - 64 0 0.000 0.000 0.000 LOCAL(0) .LOCL. 5 l 398 64 300 0.000 0.000 0.000 [root@localhost ~]#
- 2.客户端配置
1.查看是否安装 [root@localhost ~]# rpm -qa|grep ntp 2.安装命令 [root@localhost ~]# yum install ntp ntpdate -y 3.检查ntp服务是否安装成功 [root@localhost ~]# rpm -qa|grep ntp 4.查看ntp 服务状态 [root@localhost ~]# systemctl status ntp 5.修改ntp 服务器配置文件 [root@localhost ~]# vim /etc/ntp.conf 去掉注释(:g/^#/d) 添加 server 127.127.1.0 iburst #当外部时间不可用时,使用本地时间 server 192.168.10.11 #增加ntp服务器IP restrict 192.168.10.11 nomodify notrap noquery #禁止其他ip来更新时间 7.重启客户端NTP服务器 [root@localhost ~]# systemctl start ntpd 8.验证NTP 服务器 [root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 94-172-186-238. .INIT. 16 u - 64 0 0.000 0.000 0.000 162.159.200.123 10.4.1.175 3 u 1 64 3 163.164 -313119 8.941 ntp1.flashdance 194.58.202.20 2 u 1 64 3 268.103 -313119 18.023 *LOCAL(0) .LOCL. 5 l 3 64 3 0.000 0.000 0.000 192.168.10.11 144.91.116.85 3 u 2 64 0 0.000 0.00
- 验证配置
[root@localhost ~]# date -s '2022-06-18' #修改同步时间 Sat Jun 18 00:00:00 CST 2022 [root@localhost ~]# [root@localhost ~]# date Sat Jun 18 00:00:04 CST 2022 [root@localhost ~]# ntpdate 192.168.10.11 18 Jun 00:00:25 ntpdate[2244]: the NTP socket is in use, exiting 关闭客户端服务,如果还不行杀掉进程。 [root@localhost ~]# ntpdate 192.168.10.11 20 Jun 14:33:25 ntpdate[2361]: step time server 192.168.10.11 offset -31311901.342790 sec [root@localhost ~]# date Sun Jun 20 14:33:34 CST 2021 [root@localhost ~]#
- 加入计划任务
[root@localhost ~]# which ntpdate /usr/sbin/ntpdate [root@localhost ~]# crontab -e #编写计划任务 [root@localhost ~]# crontab -l */60 * * * * /usr/sbin/ntpdate 192.168.10.11 >>/tmp/ntp.log #每60分钟同步一次 [root@localhost ~]#
- 报错解决办法
1.问题: the NTP socket is in use, exiting 2.处理思路: [root@localhost ~]# ps -ef|grep xntpd root 124185 6192 0 15:49 pts/1 00:00:00 grep xntpd 可惜没有找到pid。 使用lsof –i:123 没有lsof命令的话:yum install -y lsof [root@localhost ~]# yum install -y lsof [root@localhost ~]# oot@localhost ~]# lsof -i:123 ▽OMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ntpd 2347 ntp 16u IPv4 28603 0t0 UDP *:ntp ntpd 2347 ntp 17u IPv6 28604 0t0 UDP *:ntp ntpd 2347 ntp 18u IPv4 28609 0t0 UDP localhost:ntp ntpd 2347 ntp 19u IPv4 28610 0t0 UDP localhost.localdomain:ntp ntpd 2347 ntp 20u IPv6 28611 0t0 UDP localhost:ntp ntpd 2347 ntp 21u IPv6 28612 0t0 UDP localhost.localdomain:ntp [root@localhost ~]# kill -9 2347 [root@localhost ~]# ntpdate 192.168.10.11 20 Jun 14:33:25 ntpdate[2361]: step time server 192.168.10.11 offset -31311901.342790 sec ok。问题完美解决
总结
- 感谢大家阅读到最后。本文主要介绍了ntp 服务在本地配置。在不同的主机之间进行时间同步对于计划备份、入侵检测记录、分布式任务调度或者事务订单管理来说是很重要的事情。它甚至应该作为日常任务的一部分。