我是靠谱客的博主 清爽吐司,最近开发中收集的这篇文章主要介绍心跳超时时间设置_OpenShift 4中etcd同步时间的调整,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文仅代表大魏的个人观点,生产环境请以红帽实施团队的官方观点为准。

OpenShift Etcd集群每隔100ms会检测心跳。如果OpenShift的环境网络条件差,Master节点之间网络延迟超过100ms,则可能导致群集中的不稳定和频繁的leader change(详见https://access.redhat.com/solutions/4885601)。Etcd Leader的选举,默认必须在1s之内完成,否则OpenShift集群为了保护etcd数据的一致性,将暂停对集群的配置更改类操作。出现如下报错:

ac09e0bcd95d64cb7062855b5522ec72.png

查看etcd的日志,可以看到如下内容(网络延迟过大,造成etcd member无法同步)

1b2effce66034b8a2a6b1d328c080261.png

此外,存储的超时也会对Etcd造成严重影响。要排除磁盘缓慢导致的Etcd警告,可以监视指标backend_commit_duration_seconds(p99持续时间应小于25ms)和wal_fsync_duration_seconds(p99持续时间应小于10ms)以确认存储速度正常(详见https://access.redhat.com/solutions/4770281)。需要注意的是,如果存储已经出现明显的性能问题,就不必再进行测试。Etcd用于保存OpenShift所有的元数据和资源对象,官方建议将Master和Etcd部署在相同的节点,也就是Etcd数据保存在Master节点的本地磁盘,默认在/var/lib/etcd/目录下,该目录最小需要20 GB大小的存储。所以最好master本地使用SSD磁盘。OCP4.8将允许为etcd设置独立的磁盘。

针对OCP上ectd集群的同步时延较小的情况,可以根据环境考虑适当调整。相关的参数主要有两个:

name:ETCD_ELECTION_TIMEOUT

name:ETCD_HEARTBEAT_INTERVAL

第一个参数的默认值:

"name":"ETCD_ELECTION_TIMEOUT","value":"1000"

第二个参数的默认值:

"name":"ETCD_HEARTBEAT_INTERVAL","value":"100"

    那么,ETCD_HEARTBEAT_INTERVAL 100ms的这个数值小不小?其实不小!Heartbeat Interval是leader给follower发送心跳的时间间隔,这个时间值应该是两个peer之间的RTT(round-trip time)值,其默认值是100ms。ElectionTimeout则是心跳超时时间,如果这个时间超时后follower还没有收到leader发来的心跳,则follower就认为leader失联,然后发起election,默认值是1000ms。

HeartbeatInterval一般取值集群中两个peer之间RTT最大值,取值范围是[0.5 xRTT, 1.5 x RTT)。如果这个值过大,则会导致很晚才会发现leader失联,影响集群稳定性。Election Timeout则依赖Heartbeat Interval和集群内所有RTT值的平均值,一般取值平均RTT的十倍,这个值的最大值是50,000ms(50s),这个值只有在全球范围内部署的时候才使用。在全美大陆,这个值应该是130ms,而美国和日本之间则应该是350-400ms,全球范围的RTT一般是5s,所以全球范围的Election Timeout取值50s作为上限为宜。

所以是,跨美国大陆的网络延迟,应该是130ms,那在数据中心内部,OCP这个数字设置为100ms,一点也不小。如果大于这个值,说明数据中心内部网络真的不好。对于数据中心,首先应该考虑的是应该如何降低网络延时,而不是调大这个参数,否则业务的性能也会受影响。但如果非要调大这个数字,比如在开发测试环境,网络就是差,短时间就是不想或者不能改善网络。有没有办法?

有。

OCP4上etcd是static pod,我们可以通过修改pod的yaml文件来修改配置。yaml文件位于三个master节点上的/etc/kubernetes/manifests/etcd-pod.yaml中,而且有四处修改的位置。并且三个master节点都需要修改(记住,是三个master节点,每个参数有4处修改的位置!!)。

我们将ETCD_ELECTION_TIMEOUT设置为5s,将ETCD_HEARTBEAT_INTERVAL设置为1s。第一个值至少是第二个值的5倍,否则会报错!(--election-timeoutshould be at least as 5 times as --heartbeat-interval)

6f9b22e14e3bdd0a016390ada1345ebe.png

配置修改后,etcd static pod会自动重启,让配置生效。

我们确认配置已经生效,首先oc rsh到etcd pod中,查看环境变量(参数以环境变量方式注入):

# oc rsh etcd-master-0.weixinyucluster.bluecat.ltd

9e8ba8b2e5c6298d36693a54b51c05fc.png

我们验证删除etcd pod看配置是否还有效。

将etcd pod删除,pod自动重建后,配置依然有效。

a10246c1fef61e295b9e1f826098194f.png

我们通过oc describe也可以验证参数:

0d01332e661b683888682445bada9a82.png

接下来,我们验证重启master节点,配置是否有效。重启master0.

57a52ad83e813c651d3ba2361258306a.png

master0重启完毕:

63ca790a930dbaf7ab34316dbc994d97.png节点重启后,etcd会有初始化的操作:

c2bc872c5e3e3b5c4c882f3ba420de16.png

很快,初始化成功,etcd pod的三个容器都启动了:

a996181960e0089e7d0d8926ef452b19.png

查看我修改的参数,依然有效:

d851c47b526fc9a9a92fe338d7a41460.png

最后,我们验证升级OCP集群,这个参数是否还有效:

升级前:

81e52caaf9e17b40fb9b6b5f5beff1ba.png

升级:

96d33faa12aa8ea7a90266856543d5ef.png

升级后,我们再查看设置的参数,发现已经被重置。

76bfbb5850382d645e6e4abc2752067b.png

结论:两个参数的设置,对于OCP重启、etcd pod删除仍然有效。但对于升级,配置会失效。如果需要对应的数值,需要重新设置。但生产上,还是先把网络优化好,再安装OCP!

最后

以上就是清爽吐司为你收集整理的心跳超时时间设置_OpenShift 4中etcd同步时间的调整的全部内容,希望文章能够帮你解决心跳超时时间设置_OpenShift 4中etcd同步时间的调整所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部