时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

1. 时间服务器配置

找一台服务器作为时间服务器,这里找hadoop102作为时间服务器,那么其他服务器将把hadoop102时间作为标准,以此来同步时间。

在配置时间服务器的时候必须用root用户来进行操作。

1.1. 检查ntp是否安装

[zohar@hadoop102 subdir0]$ su - root
[root@hadoop102 hadoop-2.10.0]# rpm -qa |grep ntp
ntpdate-4.2.6p5-12.el6.centos.2.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntp-4.2.6p5-12.el6.centos.2.x86_64

如果没有安装请先安装ntp

1.2. 检查ntp是否关闭

[root@hadoop102 hadoop-2.10.0]# service ntpd status
ntpd 已停

如果没有关闭,请先关闭。关闭命令service ntpd stop chkconfig ntpd off

1.3. 修改ntp配置文件

[root@hadoop102 hadoop-2.10.0]# vim /etc/ntp.conf 

1.3.1. 修改1:

授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间。

# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

去掉restict前面的#

1.3.2. 修改2:

集群在局域网中,不使用其他互联网上的时间。

设置不采用公共服务器:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

注释掉0-4的服务器

1.3.3. 添加3:

当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步。

添加一个默认的内部时钟数据,使用它为局域网用户提供服务:

server 127.127.1.0
fudge 127.127.1.0 stratum 10

1.4. 修改/etc/syscofig/ntpd文件

[root@hadoop102 hadoop-2.10.0]# vim /etc/sysconfig/ntpd

增加一行内容,让硬件时间与系统时间一起同步。

# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
SYNC_HWCLOCK=yes

1.5. 重启ntpd

[root@hadoop102 hadoop-2.10.0]# service ntpd status
ntpd 已停
[root@hadoop102 hadoop-2.10.0]# service ntpd start
正在启动 ntpd:                                            [确定]

1.6. 设置ntpd服务为开机启动

[root@hadoop102 hadoop-2.10.0]# chkconfig ntpd on

2. 其他机器配置(必须root用户)

在103和104机器上执行同样的操作:这里就以103为例了。

2.1. 在其他机器配置10分钟与时间服务器同步一次

[root@hadoop103 hadoop-2.10.0]# crontab -e

插入下面的内容:

*/10 * * * * /usr/sbin/ntpdate hadoop102

这句代码的意思就是,每隔10分钟,就运行102机器的ntpdate命令。

3. 测试一下:

修改一下103和104机器的时间,看看过一段时间是否能自动修改同步成102机器上一样的时间呢。

3.1. 修改103和104机器上的时间

这里以104机器来查看一下,这里为了测试,我把上面的10分钟改成了1分钟。

[root@hadoop104 hadoop-2.10.0]# date -s "2017-9-11 11:11:11"
2017年 09月 11日 星期一 11:11:11 CST

date命令查看一下:

[root@hadoop104 hadoop-2.10.0]# date
2017年 09月 11日 星期一 11:11:40 CST
[root@hadoop104 hadoop-2.10.0]# date
2019年 12月 13日 星期五 09:41:55 CST

可以看到过了1分钟之后,时间同步就开始起作用了。