写点什么

Kubernetes 集群的 ETCD 分布式数据库高可用原理解析

  • 2024-07-30
    山东
  • 本文字数:1681 字

    阅读完需:约 6 分钟

在当今云计算和容器化技术飞速发展的背景下,Kubernetes(K8s)已经成为了企业 IT 架构的核心组件。而作为 K8s 集群的大脑,etcd 分布式数据库的高可用性配置显得尤为重要。本文将深入探讨 etcd 分布式数据库高可用实现原理,帮助读者了解 etcd 运行机制

一、背景介绍

ETCD 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。它基于 Raft 一致性算法,保证了在分布式系统中数据的强一致性,即使在节点故障或网络分区等情况下,也能确保数据的正确性和一致性。此外,ETCD 支持高并发读写,并能有效抵御网络延迟和节点故障的影响,从而保证了系统的持续稳定运行。

 

ETCD 被广泛应用于存储和管理关键配置数据和元数据。它是 Kubernetes 的首要数据存储,也是容器编排的实际标准系统。ETCD 还支持服务发现、分布式锁、领导者选举等分布式协调功能,使得微服务架构能够轻松应对复杂的分布式环境,实现节点间的高效协同。该数据库以其高性能、广泛用途和卓越的技术指标,成为分布式系统中的重要组成部分。无论是 Kubernetes 容器编排还是微服务架构,ETCD 都能提供稳定可靠的数据存储和分布式协调功能,为系统的稳定运行提供有力保障。

二、工作原理

 

ETCD 使用 Raft 协议来维护集群内各个节点状态的一致性。简单说,ETCD 集群是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过 Raft 协议保证每个节点维护的数据是一致的。

 


如图所示,每个 ETCD 节点都维护了一个状态机,并且,任意时刻至多存在一个有效的主节点。主节点处理所有来自客户端写操作,通过 Raft 协议保证写操作对状态机的改动会可靠的同步到其他节点。

Raft 协议起源于 2013 年 斯坦福 Diego Ongaro 和 John Ousterhout 的论文《In Search of an Understandable Consensus Algorithm》,是用于维护一组服务节点数据一致性的协议。在 Raft 集群里,服务器可能会是这三种身份其中一个:

l  Leader(领袖者):所有请求的处理者,Leader 接受 client 的更新请求,本地处理后再同步至多个其他节点;

l  Follower(追随者) :请求的被动更新者,从 Leader 接受更新请求,然后写入本地日志文件

l  Candidate(候选人) :节点处于候选状态,正在竞选 Leader。

这一组服务节点构成一个集群,并且有一个主节点来对外提供服务。当集群初始化,或者主节点挂掉后,面临一个选主问题:

l  当集群初始化时候,每个节点都是 Follower 角色;

l  集群中存在至多 1 个有效的主节点,通过心跳与其他节点同步数据;

l  当 Follower 在一定时间内没有收到来自主节点的心跳,会将自己角色改变为 Candidate,并发起一次选主投票;当收到包括自己在内超过半数节点赞成后,选举成功;当收到票数不足半数选举失败,或者选举超时。若本轮未选出主节点,将进行下一轮选举(出现这种情况,是由于多个节点同时选举,所有节点均为获得过半选票)。

l  Candidate 节点收到来自主节点的信息后,会立即终止选举过程,进入 Follower 角色。为了避免陷入选主失败循环,每个节点未收到心跳发起选举的时间是一定范围内的随机值,这样能够避免 2 个节点同时发起选主。

三、ETCD 部署常见注意事项

(一)   环境基本要求

 

ETCD 运行过程中数据需要写入磁盘中,因此部署前要检查环境磁盘读写速度,例如可使用 fio 工具进行检测。另外 ETCD 部署时存储空间需要强制设置一个默认大小(工具默认 2GB),具体大小按照实际使用场景判断。 

(二)   部署原则

1、 ETCD 集群的数量必须为奇数,因为 ETCD 主机出现宕机时,需要从其他节点中选取 leaer。若集群节点数量为偶数,则可能会出现某个节点所得票数相等,无法选举出 leader。

 

2、 ETCD 集群最大数量 ≤ 7。虽然增加集群的数量,可以增加 ETCD 的容错性,但是集群数量越大数据的写入性能就会下降,因为需要将数据复制至更多的节点中。推荐集群数量 = 5,可容忍 2 个节点故障

 

3、 ETCD 可用于跨区域、跨数据中心部署,但是由于集群中的节点分布在不同的网段中,会增加数据请求的延时。并且,节点之间的数据复制,将会占用带宽。


写在最后,欢迎大家下载我们的inBuilder低代码平台开源社区版,可免费下载使用,加入我们,开启开发体验之旅!


用户头像

还未添加个人签名 2023-03-07 加入

塑造企业一体化研发新范式

评论

发布
暂无评论
Kubernetes集群的ETCD分布式数据库高可用原理解析_开源_inBuilder低代码平台_InfoQ写作社区