环境准备:
# 查看时间
[root@hadoop01 ~]# date
Thu Nov 23 04:37:46 CST 2017
[root@hadoop01 ~]# date -R # 显示时区
Thu, 23 Nov 2017 04:37:40 +0800
[root@hadoop01 ~]# date '+%Y-%m-%d %H:%M:%S' # 按照指定格式显示日期时间
2017-11-23 04:38:15
# 查看时区
[root@hadoop01 ~]# cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
要做到服务器集群的时间同步,集群中各台机器的时区必须相同的,我们在国内就使用中国时区,如果你的机器的时区不是"Asia/Shanghai",需要修改时区
CentOS 中时区是以文件形式存在,当前正在使用的时区文件位于
/etc/localtime
,其他时区文件则位于/usr/share/zoneinfo
下,中国时区的文件全路径是/usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo/Asia/Shanghai
这个文件要更改时区,直接使用如下命令就OK
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
需要使用 tzselect
命令去生成时区文件,生成好的时区文件就在/usr/share/zoneinfo 目录下,具体步骤去下:
[root@hadoop01 ~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5 # 选亚洲
Please select a country.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9 # 选中国
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1 # 只能选择北京时间和新疆时间,但即使选择了北京时间,最后生成的也是上海时区的文件
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Thu Nov 23 04:44:37 CST 2017.
Universal Time is now: Wed Nov 22 20:44:37 UTC 2017.
Is the above information OK?
1) Yes
2) No
#? 1 # 确认
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai # 很无奈,不是北京,但问题不大
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
这个命令cat /etc/sysconfig/clock
命令验证,如果ZONE的值不是Asia/Shanghai
,手动改为这个值,注意,不执行第<1>步直接手动修改是无效果的使用date -s
命令来修改系统时间
[root@node01 ~]# date -s 12/25/2016
[root@node01 ~]# date -s 19:57:30
[root@node01 ~]# date -s "2017-11-22 20:50:30"
# 手动修改后,使用以下命令,把系统时间写入主板,这样,即使服务器关机或断电,时间也会更新
[root@node01 ~]# hwclock -w
让集群所有的服务器的时间同步,就用远程连接工具连接所有服务器,然后在所有的服务器中同时执行date -s
命令设置时间,然后在所有的服务器中执行hwclock -w
命令即可
[root@node01 ~]# ntpdate time.nist.gov
# 或者
[root@node01 ~]# ntpdate 192.43.244.18
美国标准技术院时间服务器:time.nist.gov(192.43.244.18)
上海交通大学网络中心NTP服务器地址:ntp.sjtu.edu.cn(202.120.2.101)
中国国家授时中心服务器地址:cn.pool.ntp.org(210.72.145.44)
若以上提供的网络时间服务器不可用,请自行上网寻找可用的网络时间服务器
<1> 使用命令:crontab -e
[root@node01 ~]# crontab -e
<2> 然后往里加入一行内容
*/10 * * * * ntpdate 202.120.2.101
上面的配置表示,每隔十分钟从 202.120.2.101
该时间服务器同步一次时间。
<3> 保存退出
以上两步操作可以让node01这个服务器每隔10分钟去指定的服务器同步时间,如果需要让集群中的所有服务器(hadoop01-hadoop04)时间同步,那么每台服务器都要做以上两步操作。
node01的IP为192.168.21.101,让它作为时间服务器,192.168.21.0局域网内的所有服务器都向它同步时间,而node01这台时间服务器本身,向外网时间服务器同步时间(比如中国国家授时中心服务器)
我用node01
yum install ntp -y
chkconfig ntpd on
/etc/ntp.conf
我去掉了所有的默认注释,对其中的修改写了自己的注释,没有写注释的是默认配置
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
# 允许192.168.21.0网段内所有机器从node01同步时间
restrict 192.168.21.0 mask 255.255.255.0 nomodify notrap
# node01通过外网同步时间的服务器列表,注释掉的是默认的
# 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
# 中国国家授时中心服务器地址
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
# 允许上层时间服务器主动修改本机时间
restrict 0.cn.pool.ntp.org nomodify notrap noquery
restrict 1.cn.pool.ntp.org nomodify notrap noquery
restrict 2.cn.pool.ntp.org nomodify notrap noquery
restrict 3.cn.pool.ntp.org nomodify notrap noquery
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0
fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
# 同步时间后,写到硬件中
SYNC_HWCLOCK=yes
因为ntpd服务开启之后,就不能手动同步时间了,那么为什么要先手动同步时间呢?
当server(中国国家授时中心服务器)与client(node01)之间的时间误差过大时(可能是1000秒),node01去同步时间可能对系统和应用带来不可预知的问题,node01将停止时间同步!所以如果发现node01启动之后时间并不进行同步时,应该考虑到可能是时间差过大引起的,此时需要先手动进行时间同步!
[root@node01 ~]# service ntpd start
[root@node01 ~]# netstat -unlnp | grep ntpd
看到红色框中的内容,表示连接和监听已正确
[root@node01 ~]# ntpq -p
这里的前4行就是我们配置的4个中国国家授时中心的服务器的信息
# 中国国家授时中心服务器地址
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
最后一行就是本地时间服务的信息
# 外部时间服务器不可用时,以本地时间作为时间服务
server 127.127.1.0
fudge 127.127.1.0 stratum 10
下面对每个列的意义进行说明:
*
:响应的NTP服务器和最精确的服务器
+
:响应这个查询请求的NTP服务器
blank(什么都没有)
:没有响应的NTP服务器
说明
ntp服务启动后,一般需要5-10分钟左右的时候才能与外部时间服务器开始同步时间,所以需要等待几分钟才能看到正常的现象,否则你看到的是响应的NTP服务器和最精确的服务器是LOCAL(0),最后一行前面是*
符号,其他都是空白[root@node01 ~]# ntpstat
synchronised to NTP server (203.135.184.123) at stratum 2
time correct to within 699 ms
polling server every 64 s
同样,服务启动后需要等待5-10分钟才能看到这个正常的信息
到这里,我们局域网内的时间服务器node01就已经配置完毕了
/etc/ntp.conf
配置文件文件内容如下:
同样,没有写注释的都是默认的配置
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
# 默认的服务器列表注释掉
# 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
# 从node01中同步时间
server 192.168.21.101
# 允许node01修改本地时间
restrict 192.168.21.101 nomodify notrap noquery
# 如果node01不可用,用本地的时间服务
server 127.127.1.0
fudge 127.127.1.0 stratum 10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
# 同步时间后写到硬件中
SYNC_HWCLOCK=yes
原因同(5)
[root@node02 ~]# ntpdate -u node01
[root@node03 ~]# ntpdate -u node01
[root@node04 ~]# ntpdate -u node01
[root@node02 ~]# service ntpd start
[root@node03 ~]# service ntpd start
[root@node03 ~]# service ntpd start
到这里,利用局域网内一台时间服务器来同步整个集群时间的全部配置就已经完成
[root@node01 ~]# date '+%Y-%m-%d %H:%M:%S'
2017-12-21 20:10:32
[root@node02 ~]# date '+%Y-%m-%d %H:%M:%S'
2017-12-21 20:10:32
[root@node03 ~]# date '+%Y-%m-%d %H:%M:%S'
2017-12-21 20:10:32
[root@node04 ~]# date '+%Y-%m-%d %H:%M:%S'
2017-12-21 20:10:32
说明:若以上提供的网络时间服务器不可用,请自行上网寻找可用的网络时间服务器,另外需要关闭各服务器的防火墙,才能进行时间同步
参考文章: