etcd的调优

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

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

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

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

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

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

选举超时上限为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提供了一种通过保存系统当前状态并删除旧日志来压缩日志的方法。

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

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

#Environment variables:
$ ETCD_SNAPSHOT_COUNT=5000 etcd
磁盘
etcd群集对磁盘延迟非常敏感。由于etcd必须将建议持久保存到其日志中,因此其他进程的磁盘活动可能会导致较长的fsync延迟。结果是etcd可能会错过心跳,从而导致请求超时和临时领导者丢失。当给予较高的磁盘优先级时,etcd服务器有时可以与这些进程一起稳定运行。

在Linux上,可以使用以下命令配置etcd的磁盘优先级ionice:

#best effort, highest priority
$ sudo ionice -c2 -n0 -p pgrep 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 2379 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2379 0xffff flowid 1:1

具体可以参考以下网址:
https://etcd.io/docs/v3.4/tuning/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值