etcd节点系统时间不一致的影响

问题现象:

the clock difference against peer xxxxxxx is too high [秒数xxx s> 1s]

原理分析

有关 Etcd TTL 的实现原理分析如下:

Etcd Server 在接受客户端的 PUT 请求时,会解析 PUT 请求参数,如果里面包含 TTL 参数,则会将 TTL 的值加上自己系统的当前时间,以此作为 key 的过期时间。由于 Etcd Server 端极有可能是 Leader,也可能是 Follower,因此系统时间即可能是 Leader 节点的,也有可能是 Follwer 节点的。假设系统当前时间是 1:00:00,TTL 是 10s,则 key 的过期时间是 1:00:00,默认情况下系统会在 1:00:10 时删掉这个 key。

执行完以上操作之后,Etcd 节点会再次将这个客户端请求通过 Raft 协议的 RPC 消息同步到其他节点上。这里有一个有趣的细节,即如果接受客户端请求的是 Leader,则直接同步;如果是 Follower,额先把请求转发给 Leader 再由 Leader 同步给其他节点,但是该 key 的 "expiration" 值以接收请求的那个 Follower 设置的值为准。Etcd 在将这个请求写盘的同时,将会设置过 TTL 的 key 加入到一个有序的 map 里面,姑且称之为 ttlKeyHeap。

在 Leader 中运行一个 tick,将会每 500ms 触发一次,这个 tick 也因此会产生一个 sync 消息,这个 sync 消息里面带有一个 Time,这个 Time 是 Leader 所在节点的系统时间,姑且称之为 syncTime。Leader 把 sync 消息通过 Raft 协议广播给其他所有节点,这个 sync 消息就是告诉所有节点把在 syncTime 之前要过期的 key 都删除掉。具体就是各个 Etcd 节点查询 ttlKeyHeap,拿 expiration 小于 syncTime 的 key 都删除掉。

影响结果

从上面的描述可以看出,如果 Etcd 节点之间系统时钟不同步,准确地说就是接受写请求的节点与 Leader 的系统时间不一致,就可能会出现定义了 TTL 的 可以被早删或者晚删的情况。因此,当 Follower 与 Leader 的系统时钟相差 1 秒以上,Etcd 就会发出警告,提示两者的时钟有较大的不同步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当k8s etcd集群中的三个节点数据不一致时,可能会导致集群的稳定性和可靠性问题。这种情况下,我们需要对数据不一致的原因进行排查,并进行相应的处理。 首先,要确保三个节点之间的网络连接是稳定的,确保数据能够正常传输。如果网络连接存在问题,可以尝试重启节点或者检查网络配置,以确保节点之间的通信正常。 其次,需要检查etcd集群中的角色和权限设置。etcd集群中有一个Leader节点,负责处理写入请求和同步数据到其他节点。如果Leader节点的角色或权限设置有问题,可能导致数据不一致。可以通过检查Leader节点的日志和配置文件,以及调整权限设置来解决这个问题。 另外,数据不一致还可能是由于节点之间的时钟差异导致的。etcd在处理数据同步时会依赖于节点之间的时钟同步,如果节点之间的时钟存在较大的差异,可能导致数据不一致。可以通过调整节点的时钟同步机制,确保节点之间的时间同步。 最后,如果以上方法都无效,可以尝试进行数据恢复操作。可以选择其中一个数据正确的节点,将其数据备份,然后将备份数据恢复到其他两个节点上。同时,也要确保停止写入请求,以防止新数据的写入进一步影响集群的一致性。 总之,当k8s etcd集群中的三个节点数据不一致时,我们需要仔细排查问题的根源,并根据具体情况采取相应的解决措施,以恢复集群的稳定性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值