9

深入了解分布式键值存储etcd

 1 year ago
source link: https://www.jdon.com/66906.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

深入了解分布式键值存储etcd

分布式系统领域,确保跨多个节点的数据的一致性和协调性至关重要。etcd 由 CoreOS 团队开发,受到 Raft 共识算法的启发,是一个开源的分布式键值存储,为应用程序提供可靠的分布式协调。它广泛应用于云原生环境,在 Kubernetes 等容器编排系统中发挥着基础性作用。在这篇博文中,我们将探索 etcd 及其功能,并通过各种示例和命令演示如何有效地使用它。

什么是etcd?
etcd 是一种分布式、高可用且一致的键值存储,可用于存储配置数据、协调分布式系统并促进服务发现。它采用 Raft 共识算法来确保跨机器集群的容错、复制和强一致性。

etcd 的主要特点:

  1. 分布式共识:etcd通过跨多个节点复制数据并使用Raft共识算法进行领导者选举和日志复制来确保一致性。
  2. 强数据一致性: etcd 提供可线性化的读写,确保始终返回最新提交的值。
  3. Watch API:借助 watch 功能,应用程序可以订阅特定键的更改,从而实时对更新做出反应。
  4. 基于 TTL 的密钥过期: etcd 中的密钥可以与生存时间 (TTL) 相关联,在特定持续时间后自动过期。
  5. 基于角色的访问控制: etcd 支持细粒度的访问控制,允许您为不同的用户或客户端定义角色和权限。
  6. 轻量级且易于部署: etcd 是用 Go 语言编写的,使其轻量级且易于安装和配置。

开始使用 etcd
要开始使用 etcd,您需要将它安装在您的系统或集群中。etcd 官方文档提供了各种操作系统和容器平台的详细说明。安装后,您可以通过其命令行客户端etcdctl或通过可用于多种编程语言的客户端库与 etcd 进行交互。
下面通过一些实际的例子和命令来说明etcd的用法:

1. 设置键值对:
要在 etcd 中存储键值对,请使用以下put命令:

$ etcdctl put /mykey “你好,etcd!”

2.检索值:要检索键的值,请使用以下get命令:

$ etcdctl 获取/我的密钥

这将返回与键关联的值/mykey。

3. Watching for Changes:
监视功能允许您监视对特定键或目录的更改。例如,要监视密钥的更改/mykey,请运行以下命令:

$ etcdctl watch /mykey

该命令将继续运行并显示对密钥的任何更新。

4.列出目录中的键:您可以使用以下ls命令列出目录中存在的所有键:

$ etcdctl ls /

这将显示根目录下的密钥列表。

5.删除一个键:要删除一个特定的键,使用del命令:

$ etcdctl del /mykey

这将从 etcd 中删除/mykey密钥。

这些示例提供了对 etcd 功能的一瞥​​。但是,etcd 提供了更多的功能和命令,您可以在官方文档中进一步探索这些功能和命令。

领导者-追随者模型
在 etcd 集群中,采用 leader-follower 模型来保证容错性和一致性。leader-follower 模型基于 Raft 共识算法,etcd 利用该算法进行分布式协调和复制。让我们探讨领导者-追随者模型在 etcd 中是如何工作的:

1、领导者Leader 选举Election:当一个etcd集群形成时,所有节点开始时都是follower状态。其中一个追随者最终通过领导者选举过程被选为领导者。领导者负责协调和处理客户端请求,例如读写操作。

2、领导者职责:作为领导者,当选节点有几个关键职责:

  • 接受客户端请求:领导者处理来自客户端的传入请求并协调集群的响应。
  • 提议更改:当客户端提交写入请求时,领导者通过将更改附加到自己的日志来向集群提议更改。
  • 复制:领导者将其日志条目复制给追随者,确保整个集群的数据一致性。

3. 跟随者Follower职责: etcd集群中的follower起辅助作用,职责如下:

  • 接受和复制日志条目:跟随者从领导者那里接收日志条目并将它们附加到自己的日志中。此复制过程可确保所有节点具有一致的数据。
  • 响应客户端请求:Followers 可以处理来自客户端的读取请求并响应请求的数据。但是,它们不能直接处理写请求。

4.一致性和复制:
为了保持一致性,领导者必须确保其日志条目在提交之前被复制给大多数追随者。此复制过程对于容错至关重要,因为它确保如果领导者失败,则可以选择具有最新数据的追随者作为新领导者。

5. Leader失效和Follower提升:
如果leader失效或无响应,followers发起leader选举,选出新的leader。选举过程依赖于大多数追随者就新领导者达成一致。一旦选出新的领导者,它将接管前任领导者的职责,确保集群内的连续性和一致性。

6.高可用和容错: 
etcd中的leader-follower模型提供了高可用和容错。即使 leader 挂了,剩下的 follower 也会继续服务读请求,参与 leader 选举。这种设计确保即使在出现故障的情况下,集群也能保持运行并保持数据一致性。

通过采用 leader-follower 模型,etcd 实现了跨集群节点的分布式协调、容错和数据一致性。

该模型构成了 etcd 可靠和一致操作的基础,使其成为 Kubernetes 等系统中的关键组件。

结论
etcd 作为一个强大的分布式键值存储,支持分布式系统中的协调、配置管理和服务发现。凭借其容错和一致的设计,etcd 在许多现代云原生架构中发挥着至关重要的作用。通过了解它的特性和命令,您可以利用 etcd 构建健壮可靠的分布式应用程序。


Recommend

  • 201

    这篇文章会分析 Amazon 开发的分布式数据库 Dynamo 的实现,同时还会介绍 Dynamo 的设计理念以及架构等问题,还会就其中的部分问题与 Bigtable 中相对应的概念进行对比,这样能够让我们更加清楚地了解不同的数据库对不同问题,因设计理念的差异做出的权衡。

  • 43

    在上一篇文章 详解分布式协调服务 ZooKeeper 中,我们介绍过分布式协调服务 Zookeeper 的实现原理以及应用,今天想要介绍的 etcd 其实也是在生产环境中经常被使用的协调服务,它与...

  • 217
    • www.apexyun.com 5 years ago
    • Cache

    Redis中存储亿级键值对

    迁移系统时,有时你必须建立一个小脚手架。我们最近不得不这样做:在Instagram上,于遗留原因,我们需要将大约3亿张照片映射到创建它们的用户的ID,以便了解要查询的分片(请参阅有关

  • 5
    • www.codedump.info 3 years ago
    • Cache

    Etcd Raft库的日志存储

    之前看etcd raft实现的时候,由于wal以及日志的落盘存储部分,没有放在raft模块中,对这部分没有扣的特别细致。而且,以前我的观点认为etcd raft把WAL这部分留给了上层的应用去实现,自身通过Ready结构体来通知应用层落盘的数据,这个观点也有失偏...

  • 6

    【面试黑洞】Android 的键值对存储有没有最优解? ...

  • 4

    常见分布式基础设施系统设计图解(八):分布式键值存储系统 Key-value 存储系统大概是分布式存储系统中最常见的一种类型了。从功能需求的角度说,最核心的包括:

  • 7

    Golang:go-cache基于内存的键值存储缓存库 精选 原创 An in-memory key:value store/cache (similar to Memcached) library for...

  • 3

    在分布式文件存储中,我们通常会面临集群选主,配置共享和节点状态监控的问题。通过 etcd(基于 Raft 协议))可以实现超大规模集群的管理,以及多节点的服务可靠性。今天,我们就聊聊 etcd 在分布式存储中的具体应用。什么是 etcd ?

  • 3

    云原生K8S精选的分布式可靠的键值存储etcd原理和实践 ...

  • 3

    FireflyD:基于 JVM 的键值存储引擎 FireflyDB 是一种快速、线程安全、基于 JVM 的键值存储引擎,具有微秒级延迟。Firefly...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK