本文介绍: 本文主要探讨etcd集群的高可用容错方案和容错能力的探讨。在出现单机故障时相关的容错方案,如果故障的节点是Leader,重新选择Leader的选主逻辑,以及集群的恢复方案。由于单节点已经保存保存了所有数据,因此集群出现节点异常时,只需要重新选举出Leader即可,不需要进行数据迁移、副本备份等操作。更多关于分布式系统的架构思考请参考文档[关于常见分布式组件高可用设计原理的理解和思考](https://blog.csDN.net/weixin_43845924/article/details/135713
本文主要探讨etcd集群的高可用容错方案和容错能力的探讨。在出现单机故障时相关的容错方案,如果故障的节点是Leader,重新选择Leader的选主逻辑,以及集群的恢复方案。由于单节点已经保存保存了所有数据,因此集群出现节点异常时,只需要重新选举出Leader即可,不需要进行数据迁移、副本备份等操作。
更多关于分布式系统的架构思考请参考文档关于常见分布式组件高可用设计原理的理解和思考
1. 选主逻辑
etcd通过Raft协议通过Quorum机制进行集群的高可用和保证数据一致性,在节点故障场景下,能够通过选主逻辑,选择新的Leader,重新提供服务。集群最大能够容忍的故障节点数量为 (n -1) / 2
,n表示集群的节点数量(通常要求部署n为单数,如3,5,7)。
选主的目标,是希望选择一个Leader以继续提供服务,分为初始运行选择Leader和运行中Leader出现异常重新触发选主。
1.1 什么样的节点应该成为Leader?
在讨论选主逻辑之前,应该思考一下,什么样的节点应该成为Leader? 因为投票过程需要比较,比较的依据就是按照成为Leader的标准进行参照!
1.2 选主的4个阶段
1.2 初始运行的选主过程
1.3 运行过程中异常的选主过程
2. Raft日志复制逻辑
3. Leader故障的几种典型场景
3.1 故障恢复 – Leader选举
3.2 故障恢复 – 数据恢复
4. 疑问和思考
4.1. 如果etcd集群全挂了,怎么保持启动顺序?
4.2. 在COMMIT未完成时,Leader宕机,相关的事务数据是否可能会丢失?
4.3. 为什么要设计Leader?
5. 参考文档
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。