1.场景介绍
比如说我现在项目部署在若干的服务器上面,然后构成整个集群,如果我们每台服务器的时间不一致,我们在业务代码里面拿到的时间也就不一致,这时候不管我们往数据库插入数据的create_time 还是修改数据update_time 还是我们使用时间计算,定时任务等等都会发生错乱,造成数据错乱,所以我们需要对集群下的服务器时间进行同步。
我们对时间同步分为两种情况,一是所有的服务都能连接外网,二就是有一台服务器能够连接外网,其余服务器能够与这台机器内网通信
2. 服务器均能连接外网
所有机器都能够访问外网的话,我们可以使用ntpdate 来进行时间同步
前提是我们服务器上面有ntp ,如果没有的话可以使用yum 安装
yum install ntp -y
如果安装了可以执行ntpdate命令查看
执行命令进行同步
ntpdate -u ntp.api.bz
其中ntp一种网络时间协议,ntpdate 是时间同步软件的命令, ntp.api.bz 是个稳定的ntp时间同步服务器集群。
当然你可以使用linux系统的定时任务来设置每隔多长时间同步一次,使用linux系统下使用crontab -e 可以编辑任务。
这里我是用crontab -e 添加了一个定时每分钟同步时间的任务 ,然后将执行日志写到了/data/c1.log下面
*/1 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/data/c1.log
格式: cron表达式 command
我们可以看一下/data/c1.log 里面的执行日志
3.一台机器能连接外网
我们把这台能连接外网的服务器当作时间服务器,整个集群服务器向该时间服务器同步时间,然后咱们内网的这台时间服务器向公网时间服务器同步时间,然后内网时间服务器不能联网,则自己设置时间,所有的集群服务器以它的时间为准。
3.1 内网时间服务器配置
如果服务器有ntpdate 建议使用yum install ntp -y 安装下
这里需要修改/etc/ntp.conf文件
# 这里192.168.3.0 是内网网段,然后这个只能被内网这个网段访问,我这边内网网段是192.168.3.0 的
restrict 192.168.3.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10
然后重启ntpd服务,将ntpd服务设置开机自启
systemctl restart ntpd
systemctl enable ntpd
3.2 其他服务器同步
我们内网的集群服务器可以使用ntpdate命令来进行时间同步。
ntpdate 内网时间服务地址
我这边内网的时间服务器是192.168.3.39
所以就是ntpdate 192.168.3.39