前言
-
NTP(Network Time Protocol,网络时间协议)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务
-
一般情况下ntp时间同步,主要可以分为两种方式,一种主要是基于ntpdate工具,直接向某个ntp服务器发起请求,直接对齐时钟;另一种方式,则是使用ntp构建ntp服务器,向另一个ntp服务器以平滑地方式同步时间
-
本文主要讲解如何通过ntp+crontab+ntpdate实现各个主机间的离线时间同步。其中,
ntpdate
是CentOS中自带的时钟同步工具,用于将远程节点的时间同步到本地;ntp
则是同步当前节点时钟,和能够对集群其他节点提供时钟同步服务的工具,对应的服务守护进程为ntpd;crontab
则是对当前节点上各用户,提供定时调度服务的工具,对应的服务的守护进程为crond
需求
- 实现集群内主机时间同步
具体步骤:
1. 配置集群时间服务器
(1)检查 ntp 是否安装
[tomandersen@hadoop101 ~]$ yum list installed | grep ntp
fontpackages-filesystem.noarch 1.44-8.el7 @anaconda
ntp.x86_64 4.2.6p5-29.el7.centos @base
ntpdate.x86_64 4.2.6p5-29.el7.centos @base
python-ntplib.noarch 0.3.2-1.el7 @anaconda
- 若未安装则进行安装
[tomandersen@hadoop101 ~]$ sudo yum install ntp
(2)修改 ntp 配置文件 /etc/ntp.conf
- 必须使用root用户执行命令
[root@hadoop101 ~]# vim /etc/ntp.conf
restrict 192.168.126.0 mask 255.255.255.0 nomodify
- b)设置无网络连接时使用当前主机的硬件时钟为准提供时间同步
server 127.127.1.0
- 具体如下图所示
- 注意:若要关闭ntp网络时间同步,将默认的公共服务器server 0~server 3全都注释即可
(3)修改 ntp 配置文件 /etc/sysconfig/ntpd
- 使用root用户编辑文件/etc/sysconfig/ntpd,插入以下内容实现硬件时间和系统时间一起同步
SYNC_HWCLOCK=yes
(4)重启 ntp 服务
[root@hadoop101 /]# systemctl restart ntpd.service
(5)设置 ntp 服务开机自启
[root@hadoop101 /]# systemctl enable ntpd.service
2. 配置所有其他客户端主机
(1)创建时间同步计划任务
- 在其他主机上使用 crontab工具 创建计划任务,设置每1分钟同步一次时间
[root@hadoop102 ~]# crontab -e
- 插入以下内容,不能有多余空格
*/1 * * * * /usr/sbin/ntpdate hadoop101
- 其他 crontab 使用可以查看:Linux中使用crond工具创建定时任务
(2)确保 crond.service 已启动和开机启动
systemctl start crond
sudo systemctl enable crond.service
(3)确保客户端节点ntpd服务已关闭,不自动同步其他ntp服务器时间
systemctl stop ntpd.service
3. 测试同步结果
- 使用 date 命令修改任意客户端主机时间
[root@hadoop103 TomAndersen]# date -s "2017-9-11 11:11:11"
- 1分钟之后检查时间是否自动同步成功
[root@hadoop103 TomAndersen]# date
2020年 02月 09日 星期日 21:51:11 CST