zookeeper超时参数
Ticks
该参数作用:
- 其它时间参数的基础单位,单位为ms,如syncLimit*ticks = 同步时间;
- leader的PING报文发送间隔,leader每个ticks/2时间,给follower/observer发送PING报文进行集群广播,follower收到ping消息会及时提交本地session状态信息。
Ticks越小,leader广播频率越高,则分区容错性越高,但非性能损耗越大,可用性越低。直观的感觉就是业务读写QPS降低。
反之,可用性越高,但分区容错性越低。即故障恢复时间变长,数据一致性延迟越大。
考虑应用于存储高性能场景,目前ticks是2000ms,则ping的周期是1000ms,能满足普通集群(1-10节点)性能场景需求,甚至在小集群环境可以更低,如500ms一次。
由于维持ping报文,会造成leader端服务压力,建议该值根据集群规模做适当档位调整。
initLimit
该参数作用如下:
- follower和leader第一次连接时socket超时时间(选主完成后),若超时则重新开始选主。耗时:
T1 = N*(leader处理accept并创建线程的时间)
- 数据恢复传输整个快照,主要因素是快照大小和网速。耗时:
T2 = 快照最大容量/网速
- follower和leader连接成功,leader等待follower的确认epoch和newleader的ACK报文超时,影响该时间主要因素是快照数据同步下盘:
T3= 快照下盘时间(磁盘写速率)
实际场景耗时,以千兆网卡为例,若快照最大1G,则T2= 1024M*8/1000Mb/s = 8 s, T3 = 1G/500MB/s = 2s。T3是CPU处理级别时间,毫秒级,可以忽略不计。所以:
T1 << T3 < T2 ,且initLimit *ticks = MAX(T1, T2, T3&#