C/C++教程

ETCD调优

本文主要是介绍ETCD调优,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

调优

 

etcd中的默认设置对于在平均网络等待时间很短的本地网络上的安装应该可以很好地工作。但是,当在多个数据中心或具有高延迟的网络上使用etcd时,心跳间隔和选举超时设置可能需要调整。

网络不是延迟的唯一来源。引导者和跟随者上的慢速磁盘可能会影响每个请求和响应。这些超时中的每一个代表从另一台机器请求到成功响应的总时间。

 

时间参数

 

基本的分布式共识协议依赖于两个单独的时间参数,以确保节点在一个停滞或脱机时可以移交领导权。
第一个参数称为心跳间隔。
领导者将以此频率通知关注者它仍然是领导者。
为了获得最佳实践,应围绕成员之间的往返时间设置参数。
默认情况下,etcd使用100ms心跳间隔。

第二个参数是Election Timeout。
此超时时间是指跟随者节点在尝试成为领导者之前要等待多长时间而不会听到心跳信号。
默认情况下,etcd使用1000ms选举超时。

调整这些值是一个权衡。
建议心跳间隔的值应介于成员之间的平均平均往返时间(RTT)的最大值附近,通常约为往返时间的0.5-1.5倍。
如果心跳间隔太短,etcd将发送不必要的消息,从而增加CPU和网络资源的使用。
另一方面,过高的心跳间隔会导致较高的选举超时时间。较高的选举超时时间需要更长的时间才能检测到领导者失败。
测量往返时间(RTT)的最简单方法是使用PING实用程序。

应该根据心跳间隔和成员之间的平均往返时间来设置选举超时。
选举超时时间必须至少是往返时间的10倍,这样才能解决网络中的差异。
例如,如果成员之间的往返时间为10毫秒,则选举超时应至少为100毫秒。

选举超时应设置为心跳间隔的至少5到10倍,以解决领导者复制中的差异。
对于50ms的心跳间隔,将选举超时设置为至少250ms-500ms。

选举超时上限为50000ms(50s),仅在部署全局分布的etcd集群时才应使用。
美国大陆的合理往返时间为130毫秒,美日之间的时间约为350-400毫秒。
如果网络性能不均匀或规则的数据包延迟/丢失,则可能需要重试几次才能成功发送数据包。因此5s是全球往返时间的安全上限。
由于选举超时应该比广播时间大一个数量级,因此对于一个全球分布的集群,大约为5秒,则50秒成为合理的最大值。

一个群集中所有成员的心跳间隔和选举超时值应相同。为etcd成员设置不同的值可能会破坏群集的稳定性。

可以在命令行上覆盖默认值:

 

 

# Command line arguments:
$ etcd --heartbeat-interval=100 --election-timeout=500
# Environment variables:
$ ETCD_HEARTBEAT_INTERVAL=100 ETCD_ELECTION_TIMEOUT=500 etcd

 

 

 

这些值以毫秒为单位指定。

 

 

快照

 

 

etcd将所有关键更改附加到日志文件。
此日志将永远增长,并且是对键所做的每次更改的完整线性历史记录。
完整的历史记录适用于轻度使用的群集,但是频繁使用的群集将携带大量日志。

 

为了避免有大量日志,etcd会进行定期快照。
这些快照为etcd提供了一种通过保存系统当前状态并删除旧日志来压缩日志的方法。

 

 

快照调整

 

 

创建快照可能会很昂贵,因此仅在对etcd进行一定数量的更改后才能创建快照。
默认情况下,每10,000次更改后将创建快照。
如果etcd的内存使用量和磁盘使用量过高,请尝试通过在命令行上设置以下内容来降低快照阈值:

 

 

# Command line arguments:
$ etcd --snapshot-count=5000
# Environment variables:
$ ETCD_SNAPSHOT_COUNT=5000 etcd

 

 

网络

 

如果etcd领导者处理大量并发的客户端请求,由于网络拥塞,可能会延迟处理跟随者对等体请求。这表现为在跟随者节点上的发送缓冲区错误消息:

 

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full

 

通过将etcd的对等流量优先于其客户端流量,可以解决这些错误。在Linux上,可以使用流量控制机制来确定对等流量的优先级:

 

tc qdisc add dev eth0 root handle 1: prio bands 3
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1

 

这篇关于ETCD调优的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!