作者回复: 赞,有收获就好,总结到位,地址我给下: https://github.com/etcd-io/etcd/issues/11651 https://github.com/etcd-io/etcd/pull/11613 https://github.com/etcd-io/etcd/issues/11689
作者回复: 赞,优秀,总结得挺好,watch这个案例我觉得可以给社区提个PR,在Watch API增加下说明,lease的实现的确会导致删除key存在延迟,甚至在高负载、磁盘IO异常等情况下会导致old leader也会触发撤销lease操作。
作者回复: 如果出现网络分区故障,旧的leader和集群其他节点出现了网络隔离,其他节点选出了新leader,旧的leader也没有感知到新leader, 这时会出现短暂双leader。如果使用的串行读,那么旧的leader也能提供读取数据,线性读因需要获取集群共识数据,因此是无法读取的,旧的leader也是无法写入的。 严格意义上来说,这种情况不能称之为脑裂,就目前来说,如果不存在任何未知的bug, 基于Raft共识算法实现的etcd, 是可以防止脑裂发生的。
作者回复: 是的,会丢失数据,备份可缩短到3-10分钟一次,etcd 3.5已经支持在learner节点上进行备份,对读写性能不会有任何影响,如果想恢复损害的数据要看具体情况了(比如什么bug触发的、是否某个节点有完整数据、业务client是否有打印写请求日志等),操作起来有不少复杂度,自从我文中所列的几个可能导致不一致bug被修复后,最近一年多社区已经没有报任何不一致的问题啦,如果担心不一致,可升级到3.4较新版本。
作者回复: 好的,等我忙完专栏目录计划的内容,答疑篇预计会增加一篇etcd启动后发生了什么,可以在这篇里面,增加相关内容,稍等哈