前言
下面针对调试环境和生产环境两个方面来解决集群同步问题
生产环境集群时间同步
生产环境要保证服务器时间与外网时间服务器时间保持同步,但是一旦出现断网,需要集群内部按照一个机器的时间进行同步,下面简单的说下思路。
- 确定服务器上是否有ntp服务。检查及安装方法!
- 配置ntp服务,选择一个能连外网的机器作为时间同步主服务器!将ntp服务设置为开机自动启动服务!
- 配置允许网段及集群不从internet上同步时间并重启服务
- 在主服务器上编写定时任务同步外网时间
- 在从服务器上编写定时任务同步主服务器时间
配置ntp服务
对ntp服务配置文件修改
vim /etc/ntp.conf
改完如下(主体内容)
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
restrict 192.168.58.0 mask 255.255.255.0 nomodify notrap
# 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
server 127.127.1.0
fudge 127.127.1.0 stratum 10
开启硬件时间同步
vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
开启定时任务crontab详解
主服务器编写任务(每1小时同步一次)
sudo crontab -e
* */1 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com & > /home/zhengkw/ntp.log
在从服务器上编写同步任务(每10min同步一次)
*/10 * * * * /usr/sbin/ntpdate -u hadoop107 &> &>/var/log/ntpdate.log
调试环境集群时间同步
调试时可能需要随时修改日期,显然需要一个具有时效性的同步手段!那么我们就利用shell脚本来进行同步解决上述问题!
思路
写一个脚本可以传递参数,参数为一个日期格式,如果不传入参数,默认同步阿里时间服务器!附上一些常用的脚本!
时间同步脚本编写dt.sh
#!/bin/bash
#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
#如果用户没有传入要同步的日期,同步日期到当前的最新时间
if(($#==0))
then
xcall sudo ntpdate -u ntp1.aliyun.com
exit;
fi
#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
for((i=102;i<=104;i++))
do
echo "--------------同步hadoop$i--------------"
ssh hadoop$i "sudo date -s '$@'"
done