在分布式集群中,时间的同步是非常重要的。而我们的机器与机器之间往往会因为各种因素导致时间的不同步,继而影响我们集群的运行。
NTP(Network Time Protocol)是一种使计算机时间同步化的一种协议,它可以使计算机对其服务器或者时钟源做时间同步,来提高机器时间的精准度。
本篇文章将从集群网络的有无两种情况来使用ntp对集群进行时间同步
集群能够连接外网
如果集群能够连接外网的话,我们可以通过网络中的ntp服务器对集群做时间同步。
首先查看需要时间同步的机器上有没有
ntpdate
,先来执行一下ntpdate
命令如果出现下面的界面,恭喜恭喜,可以进行第3步
如果没有的话,则会出现下面的情况
如果没有
ntpdate
可以通过下面的命令在yum上安装一个yum -y install ntpdate
安装完毕就可以通过下面的命令进行时间校准
# 以下两个命令二选一 ntpdate cn.pool.ntp.org ntpdate 120.25.108.11
ntpdate后面的参数可以是一个域名,也可以是一个IP地址,这里使用的是中国的ntp服务器。这里提供一个全球可用的NTP服务器列表给大家
执行完命令出现下面这一行就说明本机和外网时间同步成功
接下来就可以在其他机器上使用同样的方法对机器时间同步。这样一来我们的机器时间都和ntp服务器上的时间一致了。
集群不能连接外网
之前的方法是使用所有的机器以外网的某一台机器(ntp服务器)时间为准进行校准,我们可以推理一下:
当我们的机器都不能连接外网,我们还要做时间同步的时候该怎么办呢?是不是可以通过内网中的一个机器当作ntp服务器来进行以上操作呢?答案是肯定的!
有些公司不允许服务器连接外网,这个时候我们可以选择一台机器当作ntp服务器,其他机器以这台机器上的时间为准做时间同步。
如果你们的集群可以使用本地或者公司里的yum源,那么恭喜你,可以继续往下看
我的集群IP分部如下:
hostname | IP地址 |
---|---|
hadoop01 | 10.211.55.101 |
hadoop02 | 10.211.55.102 |
hadoop03 | 10.211.55.103 |
在要做ntp服务器的机器上安装
ntp
(注意不是ntpdate)yum -y install ntp
修改配置文件
vi /etc/ntp.conf
- 第18行放开注释,修改网段,一般情况子网掩码不用改,看自己集群网段情况修改
- 注释掉22-25行的服务地址,一般会从
server 0
一直往下试,直到连接上,由于我们是本地的,他这里写的都是外网的域名,所以我们不需要,干掉它!! - 在下面加上
server 127.127.1.0
修改完的配置文件长这个样子(在图片上加了些说明)
然后给这个ntp服务器做一个开机自启
chkconfig ntpd on
启动
ntp
服务service ntpd start
到这一步我们的本地ntp服务器就已经搭建好了。其他需要同步时间的机器,跟有网络时一样,需要用
ntpdate
命令进行同步,只不过后面的参数变成了我们刚刚配置那台机器的IP地址我这里集群内当作ntp服务器的机器IP是10.211.55.101,所以同步命令就是
ntpdate 10.211.55.101 # 如果配置了host文件,下面的命令也可以 ntpdate hadoop01
跟之前一样会出现下面的界面,至此集群内的时间就又一致啦
设置定时同步
上面介绍了时间同步的流程,我们只同步了一次。但是如果再往后随着时间的推移,机器又受各种影响时间不同步了咋办呢?再执行一次ntpdate
呗~
可是我们每次都要去手动同步太蛋疼了,作为程序员,要学会偷懒嘛
撸一个cron定时任务脚本
新建定时任务
crontabl -e
按
i
键进入编辑模式,写入下面内容*/15 * * * * ntpdate 10.211.0.101
写完按
esc
再:wq
保存退出就行了,美滋滋
到此ntp的使用就介绍完毕了,如有错误欢迎指正哦~