分布式下的时间同步

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 分布式下的时间同步

hey,你机器怎么老出问题,是不是时间同步有问题呀,有问题你就直说呀,你说了我才知道时间同步有问题嘛,你不说我怎么知道时间同步有问题呢,大家要讲道理嘛,真是时间同步有问题吗,不是真的时间同步有问题吧,难道..真是时间同步有问题?

徒儿(黑人问号):纳尼,说好的hadoop集群呢 ?

严肃脸!这是个不大起眼又比较关键的问题,一般大家对时间同步没那么敏感,但是在分布式的存储和运算当中,时间的不一致会导致获取外部节点的数据和状态错误,导致错误的相应。最典型的例子就是在分布式环境都遵循着slave-master的模式设计,从节点会定时上报自己的心跳数据到master节点,同时在master端会根据上报的消息判断是否超时,超时就是和上一次心跳的时间作为判断依据。时间不同步会被错误判断,导致回收连接 。在节点初始化之初,我们对节点的时间进行同步。

时间服务器的配置

时间服务器相对来说配置不复杂,但是倒腾下了也是蛮心塞的,只能一步一截图了:

图一:配置文件

框框部分是我们加进去的,参数解释如下:

restrict 127.0.0.1   ##授权本机可以把本机作为时间服务器进行连接

restrict -6 ::1      ##默认的授权设置

server 127.127.1.0  设置本地时钟服务器

fudge  127.127.1.0 stratum 8  设置本地时钟源的层次为8

配置完成之后,我们重启服务器,跟踪日志消息:

 

图二:重启和查看日志

查看时间服务器同步的情况:

图三:时间服务器的同步情况

 

 

*表示目前使用的ntp server,这里选择的本机;

st:即stratum阶层,值越小表示ntp server的精准度越高;

when几秒前曾做过时间同步更新的操作;

Poll表示,每隔多少毫秒与ntp server同步一次;

reach:已经向上层NTP服务器要求更新的次数;

delay:网络传输过程钟延迟的时间;

offset:时间补偿的结果;

jitter:Linux系统时间与BIOS硬件时间的差异时间

我们可以从图三中看到时间不断在更新,注意reach一直是0的话就有些问题了

在查看一下ntp状态,可以看到同步正常

 

图四:时间服务器的同状态

 

接下来,我们把其他节点配置时间同步,以第一台机器作为时间服务器

在客户端直接进行一次时间同步:

图五:客户端同步时间

验证没问题,我们把命令做成脚本

图六:同步时间的脚本

然后,在定时任务中进行配置

 

图七:配置定时同步任务

 

观察调度的日志,确认即可:

 

图八:调度的日志

接下来的事情,就是把我们的节点都配置上,这下我们的几台节点的时间都是一致的啦。

 

总结

 

 这里要还原一个事实就是,时间服务器搭建是捣鼓来捣鼓去配置了几波才完成的,现在看到的配置是最后配置的样子, 刚开始配置一个是不知道啥概念,一个是不知道出错的时候怎么往下走 ,补充几点:

  1. 出问题多一些的地方是那个/etc/hosts的配置,需要去加上127.0.0.1的配置
  2. server配置的是127.127.0.1代表本机器,127.0.0.1是一个A类地址,配置的时候是用前者
  3. 客户端同步的时候记得关闭本机的ntpd服务 service ntpd stop
  4. 其他情况就是不断调整,实在不清楚就直接找师父啦
  5. 一般生产环境会有专门的时间服务器去同步,一般需要的是检查是否会定时同步,有的话就不用自己去倒腾了。

 

偷懒养成续篇

上次我们提到自动同步的事情,这里接着聊一下这个事情。我们在多台机器上面进行一些自动化的操作往往是这么几种情况:

  1. 需要交互式的,这种就是类似远程登录的时候需要输入密码
  2. 从本机同步文件到远端
  3. 登录远程机器执行命令

下面我们一个个解决:

我们最开始碰到的其实就是远程设置免密码登录

图九:交互式窗口

类似这种情况,我们需要引入spawn工具和expect的语法,我们可以预期一个提示输入的内容,然后进行输入,我们之前的免密码登录要修改成脚本,变成了这种样子:

 

图十一:期望输入

我们把用户和密码直接输入,在脚本中去匹配交互式的文本信息进行输入 ,我们写下这份脚本的时候,我们需要去授权一台免密码登录的操作就变成了这样子:

图十二:脚本方式自动面密码登录

直接就完成了,是不是特方便。

另外对于远程同步文件一般scp或者rsync都可以,ssh的命令也可以同时登录远程机器去进行执行命令,所以我们把需要做的事情全部写到一个脚本里面:

图十三:批量执行的脚本

当我们这样去做的时候,我们后面需要同步一个新的节点的话,只需要执行脚本就好了:

图十四:最终效果

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
运维 Linux 测试技术
【运维】chrony配置服务器时间同步
集群服务中,时间的问题很重要,但凡某个节点跟其余节点时间岔开了,就会显示错误!
1205 0
【运维】chrony配置服务器时间同步
|
4月前
|
算法 安全 物联网
GTS自动补偿机制时间同步
【8月更文挑战第26天】
43 5
|
7月前
|
Linux
配置时间同步服务
在Redhat 9.2上,Chrony被用来同步系统时间与NTP服务器。默认情况下,它已在RHEL7/CentOS7中预装。要安装,首先通过`yum -y remove chrony`卸载,然后用`yum -y install chrony`进行安装。安装后,使用`systemctl restart chronyd`重启服务,并用`systemctl enable chronyd`设置开机启动。编辑`/etc/chrony.conf`添加阿里云NTP服务器如`ntp1.aliyun.com`和`ntp2.aliyun.com`以同步时间。使用`chronyc sources -n`确认时间源。
421 4
|
Kubernetes 开发者 容器
K8S 集群部署_主机准备_主机时间同步设置 | 学习笔记
快速学习 K8S 集群部署_主机准备_主机时间同步设置
1332 0
K8S 集群部署_主机准备_主机时间同步设置 | 学习笔记
|
NoSQL Linux Redis
linux虚拟机环境快速搭建redis5.x版本的主从集群总结
我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比较方便,不用再像以前版本那样还得再搞一个 Ruby,5.x版本可直接使用 redis-cli的方式来构建集群。
122 0
|
SQL 负载均衡 网络协议
关于Linux下Mysql集群同步(主从、一主多从、主从从)部署及同步策略的一些笔记
和小伙们分享一些Mysql集群主从同步部署相关的笔记 博文内容涉及: 为什么需要mysql集群主从同步 主从同步原理 部署不同主从结构的Mysql集群 一主一从 一主多从 主从从 主从同步使用的复制模式介绍配置 食用方式:了解Linux、Mysql即可 理解不足小伙伴帮忙指正
765 0
关于Linux下Mysql集群同步(主从、一主多从、主从从)部署及同步策略的一些笔记
LXJ
|
监控 关系型数据库 MySQL
同时监控多台mysql主从
能够监控多个mysql主从监控
LXJ
139 0
|
Linux 开发工具
很重要--生产环境时间同步
几个小概念 date:系统时间 clock:硬件时间 clock -w:硬件时间根据系统时间同步 ntpdate:马上同步时间 ntp:网络时间协议,起到的效果是让你的时间始终稳定持续的同步,前提是时间差别不是很大 我们在生产环境中时间是个很重要的角色 下面来说下同步时间的方法 首先我们知道一个服务器时间是准的,下面就用172.
2283 0