1. 问题引出
时钟指的是服务器时间,当集群中的各个服务器之间的时钟不一致的时候必然会导致一些问题。
我们以电商为例,当有三个并发同时请求服务求来下单,请求通过Ngnix转发分别分发到不同的服务上,而此时服务器的时间是不一致的,时间如下图分别为五点,八点和十点,请求处理过程中我们会把服务器的当前时间当做订单的创建时间保存到数据库中,那么当我们根据订单的创建时间进行排序的时候就会出现问题,存在订单顺序错乱的问题。
2. 时钟同步
为了解决上述问题我们需要把集群中的时间设置为一致的。
集群时钟同步总体可分为以下三种情况
- 服务器都可以联网
- 只有一台服务器可以联网
- 所有的服务器都不可联网’’
下面我们分别对这三种情况进行详细的介绍
2.1 服务器都可以联网
如果服务器都可以联网我们可以让每个节点都去同步某一个网络时间服务器的时间,如下图
同步网络时间的命令
ntpdate -u 时间服务器
如果 ntpdate 命令不存,执行以下命令安装
yum install ntpdate -y
查看修改时间
查看: date
修改: date -s '10:10:10'
同步时间
ntadate -u ntp.api.bz
分享几个常用的时间服务器
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
复旦:ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
为了避免手动修改时间我们可以把同步时间加入crontab 定时任务
每小时执行一次
echo "*/60 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/root
2.2 只有一台服务可联网或都不能联网
情况2和情况3类似这里我们一起说明下
联网的服务器去同步网络时间,如果不能联网就手动设置服务器时间,其他服务节点同步可联网服务节点的时间。
同步网络时间和 2.1 的步骤一样,手动设置服务器时间命令是 date -s ‘时间’ 这里不再赘述,这里主要讲下怎么从其他节点同步时间。
选取集群中的⼀个服务器节点server0(192.168.0.10)作为时间服务器.
-
设置好server0的时间
-
修改server0的配置
vim /etc/ntp.conf
-
如果有 restrict default ignore,注释掉它
-
添加如下命令
#放开局域⽹同步功能,192.168.0.0是你的局域⽹⽹段 restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10
-
重启⽣效并配置ntpd服务开机⾃启动
service ntpd restart chkconfig ntpd on
-
-
集群中的其他节点就可以从server0同步时间
ntpdate 192.168.0.10