在分布式系统中,尤其是业务数据量大、业务请求复杂的情况下,使用分布式数据库通常是最佳选择,以提高可扩展性和高可用性。而 Kubernetes 作为一套分布式系统,采用 etcd 来存储集群的配置和状态数据,确保一致性和可靠性。
etcd可以理解为就是kubernetes的主干,它既是作为后端服务发现的工具,又作为键值数据库。它是一种开源的,并且采用raft算法保持强一致性的分布式键值数据库。
我们具体理解下:
etcd 使用 Raft 共识算法实现强一致性和可用性。该算法使etcd以leader-member方式运行,从而确保节点发生故障依旧可以保证可用性。
那么在k8s中,你什么情况下会用到etcd呢?其实你的一次简单查询,比如执行一次kubectl命令,它就是一次与etcd的交互,同样当你部署一个pod时,它会往etcd中添加一条记录。
在k8s中我们需要了解关于k8s的信息:
etcd 是 Kubernetes 控制平面中唯一的 StatefulSet 组件。
在高可用性 (HA) 架构中部署 etcd 时,有两种主要模式:
Quorum 是分布式系统中的一个概念,指的是群集正常运行必须能够运行并能够通信的最小节点数。
在 etcd 中,使用 quorum 来确保在节点故障时保持一致性和可用性。
仲裁的计算公式为:
quorum = (n / 2) + 1
其中 n 是集群中的节点总数。
例如,要容忍一个节点的故障,至少需要三个 etcd 节点。要承受两个节点故障,你至少需要 5 个节点,依此类推。
etcd 集群中的节点数直接影响其容错能力。以下是它的分解方式:
集群可以容忍的节点故障数的一般公式为:
fault tolerance = (n - 1) / 2
其中 n 是节点总数。
在分布式系统中,当一组节点失去彼此之间的通信时,通常会发生裂脑情况,这通常是由于网络分区造成的。
这可能会导致系统状态不一致或冲突,这在 Kubernetes 等关键系统中尤其成问题。
但是,etcd 是专门为防止脑裂情况而设计的。
它采用强大的领导者选举机制,确保在任何给定时间只有一个节点主动控制集群。根据官方文档,在 etcd 中有效避免了裂脑场景。方法如下:
这种设计可确保 etcd 保持强一致性并防止出现裂脑场景,即使面对网络问题也是如此。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。