集群时间同步
我这里列举了两种方法。第一种是网上常见的,但是我总是配置失败,报各种错。第二种是我结合思考根据第一种改编了,目前没有出现问题。您自行选择使用哪种。
这些操作必须使用root权限(命令前加sudo)
如果没有特别说明,全部机器都要该操作。
前置准备
安装ntp服务和ntpdate服务
1
2sudo apt-get install ntp
sudo apt-get install ntpdate查看所有节点 ntpd 服务状态和开机自启动状态
1
2
3sudo systemctl status ntp # 查看服务状态
sudo systemctl start ntp # 开启服务
sudo systemctl is-enabled ntp # 开机自启动状态如果第二步报错:
Failed to start ntp.service: Unit ntp.service is masked.
就先输入:
1
sudo systemctl unmask ntp.service
先解除mask,然后在执行开启服务命令。
修改时区:d
1
date # 查看时间
发现时间和系统时间不同,修改时区。
先查看一下当前时区:
1
timedatectl
我查了之后是:Etc/UTC (UTC, +0000)
罗列一下可用时区:
1
timedatectl list-timezones
浏览一下选择一个最近的,然后:
1
sudo timedatectl set-timezone Asia/Chongqing
我选的是重庆,一般可以选Asia/Shanghai。
设置时间为24小时(默认是12小时的,我不喜欢)
1
sudo vim /etc/default/locale
添加:
1
LC_TIME=en_DK.UTF-8
修改后重启服务器即可(
reboot
)。如果有如下情况:
即:
System clock synchronized: no
。表示同步服务没有启动:需要:
1
sudo apt install systemd-timesyncd
完了之后它会说重启服务(如下图),不用选,按下Tab就到了OK,回车即可。
再输入
timedatectl
查看,如果是yes就OK了。
第一种方法
修改hadoop103的ntp.conf配置文件
1
s
修改内容为:
修改授权 192.168.64.0-192.168.64.255 网段上的所有机器可以从这台机器上查询和同步时间
1
restrict 192.168.64.0 mask 255.255.255.0 nomodify notrap
注释掉使用外部网络
1
2
3
4pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中 的其他节点提供时间同步
在
pool ntp.ubuntu.com
下添加(这一行也要注释掉):1
2server 127.127.1.0
fudge 127.127.1.0 stratum 10修改后如图:
关闭其他机器上的ntp服务和自启动
1
2sudo systemctl stop ntp
sudo systemctl disable ntp其他机器每十分钟来向主机(hadoop103)同步一次时间
注意,hadoop103不写,只有其他机器才写。
1
sudo crontab -e
如果出现如下情况:
则选择2(/usr/bin/vim.basic).
编写定时任务:
1
*/10 * * * * /usr/sbin/ntpdate hadoop103
第二种方法
这个根据第一种方法得到的灵感。第一种方法是关闭其他两台服务器的ntp服务,然后编写定时任务,每十分钟向主节点hadoop103申请时间同步。我就在想,干脆三台节点都编写定时任务,每十分钟向Windows或Mac主机请求同步时间,不也是准确的吗。
如果你执行了第一种方法请先还原相关配置(按第一种方法逆向操作、关闭的东西该开就打开)。因为我是逆向操作了的,如果不还原我也不知道会不会出其他错。
只要时间都是可主机大差不差,就直接编写定时任务即可:
1 | sudo crontab -e |
编写:
1 | */10 * * * * /usr/sbin/ntpdate cn.pool.ntp.org |