调优(Tuning)
etcd默认设置适用于网络低延迟。但网络延迟高,如网络跨域数据中心,那么心跳间隔和选举超时的设置就需要优化(tuning).
网络慢不仅仅由于延迟,还可能被Leader和follower的低速磁盘IO影响。每一次超时设置应该包含一个请求发出到响应成功的时间。
时间参数
当一个节点挂掉(stalls)变慢或者下线,分布式一致性协议(distributed consensus protocol)依赖两个时间参数保证领导力切换。
第一个参数叫心跳间隔(Heartbeat Interval)。它代表leader通知所有的followers,他还是Leader的频率。最佳实践,它应该被设置为节点之间网络往返时间(round-trip time)。etcd默认心跳间隔是100ms。
第二个参数是选举超时(Election TimeoutRTT)。它表示follower在多久后还没有收到leader的心跳,它自己就变成Leader。etcd的默认选举超时是1000ms。
调整参数需要做一些权衡。心跳间隔推荐设置为节点之前的最大RTT,一般可设置为RTT的0.5-1.5倍。如果心跳间隔太短,etcd会发送没必要心跳增加CPU和网络的使用率。另外,过长的心跳间隔会增长选举超时时间。过长的选举超时导致要更长的时间才能发现Leader故障。测量RTT最简单方法就是用PING工具。
选举超时应该基于心跳间隔和节点的平均RTT去设置。选举超时应该至少是RTT的10倍,这样才能视为网络延迟出现方差(variance)。例如,节点间的RTT是10ms,那么超时时间至少应该是100ms。
选举超时时间最大限制是50000ms(50s), 只有etcd被部署在全球范围内时,才应该使用这个值。美国大陆的RTT是130ms,美国和日本的RTT是35