从k8s集群etcd主节点数量为什么是奇数来聊聊分布式系统

前言

1.为什么集群成员数量为奇数?且3或5个居多?

etcd 集群需要大多数节点(仲裁)才能就集群状态的更新达成一致。对于具有 n 个成员的集群,仲裁为 (n/2)+1。对于任何奇数大小的群集,添加一个节点将始终增加仲裁所需的节点数。当然节点数目不是越大越好,因为一致性机制下节点数目会影响写性能。

仲裁模式
仲裁模式是在(服务器故障转移集群简称SFC) 集群级别配置的,规定仲裁投票的方法,默认情况下,故障转移集群管理器会基于集群结点的数量,自动推荐一个仲裁模式。仲裁配置影响集群的可用性,在集群中,重组的集群结点必须在线,否则集群将由于仲裁不足而必须停止服务。

仲裁(Quorum)
法定数量,预先规定具有投票权的节点或见证(Witness)的数量

容错
本是个计算机用语,指文件在存储或传输中由于故障或者干扰发生错误或丢失时,系统能够自动恢复文件的能力,即“容错能力”,简称“容错”。

什么是容错?
只要可以建立成员仲裁,etcd 集群就会运行。如果仲裁因暂时性网络故障(例如分区)而丢失,一旦网络恢复并恢复仲裁,etcd 就会自动安全地恢复;Raft 强制实施集群一致性。对于断电,etcd 将 Raft 日志保存到磁盘;etcd 将日志重放到故障点并恢复集群参与。

例如
具有3个成员的集群,仲裁为(3/2)+1 =2个,容错为1个
具有5个成员的集群,仲裁为(5/2)+1 =3个,容错为2个
具有7个成员的集群,仲裁为(7/2)+1 =4个,容错为3个

2.集群成员数量为偶数,也是可以的,为什么不推荐?

**奇数的原因是防止资源的浪费**
因为奇数个节点和偶数个节点允许宕机的节点数是一样的,比如3个节点和4个点数只允许容错一台,那么为什么要搞4个节点去浪费服务资源呢
**注意节点数并不是越多越好**
因为etcd的一致性机制(算法RAFT),每次写操作都需要同步到每个节点,节点数越多会降低写操作的吞吐。
增加节点,读性能会提升,写性能会下降,减少节点,写性能会提升。

3.比较偶数和奇数大小的聚类差异

建议在集群中具有奇数个成员。奇数大小的群集容忍的故障数与偶数大小的群集相同,但节点较少。

image
4.最大集群大小是多少?

从理论上讲,没有硬性限制。但是,一个 etcd 集群可能不应该超过七个节点。Google Chubby 锁定服务,类似于 etcd,在 Google 内部广泛部署多年,建议运行五个节点。一个 5 成员的 etcd 集群可以容忍两个成员故障,这在大多数情况下就足够了。尽管较大的群集提供更好的容错能力,但由于必须在更多计算机上复制数据,因此写入性能会受到影响。

5.为什么 etcd 会因为磁盘延迟峰值而失去它的领导者?

磁盘延迟是领导者活动的一部分。假设集群领导者需要一分钟才能将 raft 日志更新同步到磁盘,但 etcd 集群有一秒的选择超时。即使领导者可以在选举间隔内处理网络消息(例如,发送心跳),它实际上不可用,因为它无法提交任何新提案;它正在慢速磁盘上等待。如果集群由于磁盘延迟而经常失去其领导者,请尝试调整磁盘设置或 etcd 时间参数。

6.应该在删除不正常的成员之前添加成员吗?

替换 etcd 节点时,首先删除成员,然后再添加其替换非常重要。

etcd 采用基于仲裁模型的分布式共识;(n/2)+1 成员(多数)必须就提案达成一致,然后才能将其提交到该组。这些建议包括键值更新和成员资格更改。该模型完全避免了裂脑不一致的任何可能性。缺点是永久仲裁丢失是灾难性的。


posted @ 2023-05-30 14:22  梁博客  阅读(1326)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示