非云环境中Kubernetes的配置和运行:etcd

2020 年 8 月 24 日

非云环境中Kubernetes的配置和运行:etcd

这是非云环境中Kubernetes的配置和运行系列的第六篇文章,本文将详细阐释etcd的技术细节,及其在Kubernetes集群中的作用。


etcd 是一种为集群内各机器提供可靠数据存储的分布式键值存储。etcd 开源提供在 GitHub 上,它很好地解决了网络分区期间领导者的选举问题,可容忍包括领导者节点在内的节点故障。


引用自: https://coreos.com/etcd/docs/latest/


etcd 以驻留内存进程形式运行在集群中的每台机器上,提供动态配置的记录,支持以简单方式在集群成员间共享多种配置数据。


etcd 以键值方式存储数据,它是分布式的,支持自动复制和领导者自动选举产生。对存储数据的所有更改,会自动反映到整个集群。


etcd 还提供发现服务,支持“已部署的”应用向集群所有成员广播其所提供的服务。


etcd 使用基于 HTTP 的 JSON 方式通过 API 调用实现通信。API 可直接通过 curl 或 wget 等方式使用,也可以通过 etcdctl 间接使用。


参考资料: https://etcd.io/


容错能力


推荐奇数个集群成员,即维持奇数规模的集群成员。无需更改获得多数所需的成员,但额外添加成员可增加对失败的容忍。对于集群成员应选奇数还是偶数时,实践出真知。


参考资料: https://coreos.com/etcd/docs/latest/v2/admin_guide.html



复制能力


在计算机科学中,状态机复制(也称为“状态机方法”)是一种通过服务器复制并协调客户与服务器间的副本交互实现容错服务的通用方法。该方法还为副本管理协议的理解和设计提供了框架。


参考文献: https://en.wikipedia.org/wiki/State_machine_replication


活动副本


  • 所有节点实现为一种有限状态机。

  • 节点在各自Quorum投票操作顺序上达成一致,并在本地执行。


非活动副本


  • 指定一个节点为领导者(如下图动画所示),接收所有写入命令。

  • 领导者节点对大多数副本有效执行Quorum投票操作。

  • 领导者节点负责将复制状态分发给其它副本。


Raft 共识


Raft共识算法在设计上易于理解,它具有和Paxos一样的容错和性能。不同之处在于,Raft将问题分解为相对独立的子问题,并很好地解决了系统运行实际所需的关键问题。我们希望Raft共识能得到更广泛的采用,进而开发出更多基于共识的高质量系统,满足当前的需求。


参考链接: https://raft.github.io/


什么是分布式共识算法?


  • 支持一组进程就某个值达成一致的算法;

  • 支持对分布式进程的协调;

  • 随着复制状态机一并提出。

  • 共识算法在构建大规模可靠分布式系统中具有重要作用。


一个用于概念理解的小比喻


从前有个王国,称为“集群之地”(Cluster Land)。王国由一位非常民主的国王统治,他受由九位非常智慧、忠诚的智者团的支持 。

一旦有王国的臣民向国王提出请求,国王都会先与他的智者团商议,然后再决定是否批准该请求。如果多数智者都投了赞成票,那么该请求将获得批准。否则,将被拒绝。


上面简单比喻了 Raft 算法将事务提交到日志的做法。所有请求均由领导者(即国王)处理,并且仅在得到多数智者(集群中的其他节点)赞成后才能提交。


一天,国王在与一条可怕的龙作战时殉国。智者团决定无需等待任何哀悼期,应立刻选举他们中的一位作为新的国王统治者。九位智者中,有两位(暂称为其为五号和七号)申请成为新国王。在经过快速选举后,有四位智者投票赞成五号,而三位投票赞成七号。这样,五号就成为了新的国王,开始继续执行与上任国王相同的政策。


这大致说明了 Raft 算法中时如何进行领导者选举的。


一段时间后,由于对新统治者治理王国的方式产生了不满,一些智者发动了叛乱,最终原王国一分为二。由五号统治的“集群北地”,和由七号统治的“集群南地”,每个王国具有自己的国王和智者。原臣民生活在其中一个王国,并向各自的国王提出请求。分裂的王国依然延用相同的统治方法,即请求直接提交国王,并由各自智囊团进行磋商达成决议。

多年后,两位国王达成协议,王国得到统一。“集群之地”再次成为一个王国,由五号重新统治。不幸的是,在分裂期间,每个王国都制定了一些相互抵触的法律。为解决这个问题,智囊们同意通过遵循最新颁布的相应法律,解决所有的法律冲突。


这部分故事比喻了发生网络分区的情况。这时集群被拆分,每个新集群都有其自己的领导者和节点。冲突的请求可由各个的集群在不同的时间处理。当集群再次合并时,需要给出解决冲突值的方法。在 Raft 中,引入了 Term 概念解决分区一致性问题。


算法使用场合


  • 进程需要共享一个满足一致、原子且有序的操作/事件集视图,考虑:

  • 高可用性(容错);

  • 性能(将负载分发给数千客户)。



etcd 如何适用于 Kubernetes 集群?


etcd 存储 kubernetes 的设置、状态和元数据。考虑到 Kubernetes 是一种分布式系统,使用分布式数据库是非常必要的。正如前文所阐释的,etcd 是一个具有高可用性和可扩展性的分布式数据库。


“在集群之地王国中,Raft和etcd是天作之合。”


原文链接:


Kubernetes Journey — Up and running out of the cloud — etcd


2020 年 8 月 24 日 17:23883

评论 1 条评论

发布
用户头像
这故事,还算比较贴合 Raft
2020 年 08 月 26 日 21:17
回复
没有更多评论了
发现更多内容

极客时间架构师训练营week7作业

好名字

极客大学架构师训练营 作业

性能压力测试

dongge

架构师训练营 - 命题作业 第 7 周

叶鹏

后疫情生产力时代智能自动化打造以人为中心的企业

人称T客

数据产品经理必备技能大纲

Jackchang234987

产品 产品经理 数据

一文读懂数据库中的乐观锁和悲观锁和MVCC

X先生

数据库 乐观锁 悲观锁 并发控制

官宣了,英特尔并非断供浪潮而是属于内部供应链调整

Geek_116789

面试:围绕一个SpringBoot问我了30个问题!

Java小咖秀

spring 面试 面试题 springboot SpringBoot 2

金沙江创投主管合伙人朱啸虎:RPA+AI构建企业智能生产力,驱动商业智能变革

人称T客

Spring Cloud微服务技术栈:搭建高可用Eureka Server、服务注册与发现

独钓寒江雪

Spring Cloud

Phobos新变种藏身系统激活工具再掀勒索风暴,360安全大脑强力“截杀”

360安全卫士

Combine中@Published浅析

kingnight_pig

swift Combine Publisher

明势资本创始合伙人黄明明:人机协作,重塑未来工作方式

人称T客

如何挑选编程笔记本 | 数码产品

chaozh

Presto性能调优的五大技巧

华为云开发者社区

大数据 数据 内存 存储 华为云

架构师课程第七周总结

dongge

百度大脑领先活体检测+合成图鉴别,1步调用让人脸“照片活化”无从遁形

百度大脑

人工智能 AI 人脸识别 百度大脑

腾讯的背水一战还是奋力一搏? | 互联网

chaozh

创建有效DevOps测试策略的5大技巧

DevOps 测试 云安全

架构师训练第七周

邵帅

每个现代人都应该知道的包豪斯| 艺术

chaozh

放下纠结,你就远离了拖延症

泰稳@极客邦科技

创业 个人成长 企业管理

数据结构

彭阿三

MongoDB 事务,复制和分片的关系

华为云开发者社区

数据库 mongodb 事务 快照 华为云

第7周总结

叶鹏

专治数仓疑难杂症!美团点评 Flink 实时数仓应用经验分享

Apache Flink

flink

人民自己创造的节日 | 经济

chaozh

深入理解 JS 参数传递

Verlime

Java 前端

第7周性能优化

读梁宁产品30讲随笔(1)

Jackchang234987

产品 产品思维

深入浅出开源监控系统Prometheus(上)

vivo互联网技术

监控 Prometheus

非云环境中Kubernetes的配置和运行:etcd-InfoQ