当前位置: 首页 > news >正文

Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现

Etcd 是一个分布式的键值存储系统,用于共享配置和服务发现。它最初由 CoreOS 开发,并已成为许多分布式系统中的关键组件之一,特别是在 Kubernetes 中扮演着核心角色。Etcd 的设计目标是简单、可靠、安全,并且易于使用。

Etcd 的特点

  1. 一致性:Etcd 使用 Raft 一致性算法来保证数据的一致性和可靠性。这意味着所有节点上的数据都是相同的,并且即使在网络分区的情况下也能够保证数据的一致性。
  2. 安全性:Etcd 支持客户端认证和加密通信,可以通过 TLS 加密客户端与服务器之间的通信,并通过证书进行身份验证。
  3. 简洁性:Etcd 提供了一个简单的 API,可以轻松地通过 RESTful API 访问存储的数据。
  4. 易用性:Etcd 可以轻松地部署和管理,支持集群模式,允许水平扩展。

Etcd 的用途

Etcd 主要用于以下场景:

  1. 共享配置:存储分布式系统的配置信息,如数据库连接字符串、API 密钥等。
  2. 服务发现:存储服务的位置信息,帮助服务间相互发现和通信。
  3. 分布式锁:提供分布式锁机制,允许多个进程或服务在竞争同一资源时进行协调。
  4. 状态存储:存储分布式系统的状态信息,如心跳信息、元数据等。

Etcd 的架构

Etcd 通常以集群的形式部署,集群中的每个节点都保存了一份数据副本。集群中的节点通过 Raft 一致性算法来达成一致,并对外提供一致的数据视图。

节点角色
  • Leader:负责处理客户端请求,协调数据的一致性。
  • Follower:跟随 Leader,参与投票过程。
  • Candidate:在 Leader 故障时参与选举成为新的 Leader。

Etcd 的工作流程

  1. 选举过程:如果集群中的 Leader 故障,其他节点会通过 Raft 算法进行选举产生新的 Leader。
  2. 写入操作:客户端的写入请求首先发送到 Leader,Leader 将请求广播到所有 Follower,如果大多数节点确认请求,则请求被认为已提交。
  3. 读取操作:客户端可以从任意节点读取数据,因为所有节点上的数据都是一致的。

Etcd 的数据模型

Etcd 的数据模型基于键值对(key-value pairs),其中键是字符串形式的路径(类似 Unix 文件系统的路径),值可以是任意的字节数组。键可以有层次结构,通过斜杠(/)分隔。

Etcd 的客户端 API

Etcd 提供了多种客户端库,支持多种编程语言,如 Go、Python、Java 等。此外,还提供了命令行工具 etcdctl,用于与 Etcd 交互。

示例命令
  • 列出所有键

     Shell 

    深色版本

    etcdctl --endpoints=<etcd-endpoint> get /
  • 设置键值对

     Shell 

    深色版本

    etcdctl --endpoints=<etcd-endpoint> put /foo/bar "hello world"
  • 获取键值对

     Shell 

    深色版本

    etcdctl --endpoints=<etcd-endpoint> get /foo/bar
  • 删除键值对

     Shell 

    深色版本

    etcdctl --endpoints=<etcd-endpoint> del /foo/bar

Etcd 在 Kubernetes 中的角色

在 Kubernetes 中,Etcd 扮演着至关重要的角色。Kubernetes 使用 Etcd 来存储集群的状态信息,包括节点信息、命名空间、Pod、服务、配置等所有资源对象的状态。

Kubernetes 中的 Etcd 集群
  • 持久存储:存储 Kubernetes API Server 的持久状态。
  • 一致性保证:确保所有节点上的数据一致性。
  • 高可用性:通常以多节点集群的形式部署,以提高可用性。

Etcd 的部署和管理

Etcd 可以单独部署,也可以作为 Kubernetes 组件的一部分部署。在生产环境中,通常建议部署多节点的 Etcd 集群以提高可用性。

部署示例

以下是一个简单的单节点 Etcd 部署示例:

 

Yaml

深色版本

apiVersion: apps/v1
kind: Deployment
metadata:name: etcd-deploymentlabels:app: etcd
spec:replicas: 1selector:matchLabels:app: etcdtemplate:metadata:labels:app: etcdspec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.4.13command:- "/bin/etcd"- "--listen-client-urls=http://0.0.0.0:2379"- "--advertise-client-urls=http://localhost:2379"- "--initial-advertise-peer-urls=http://localhost:2380"- "--listen-peer-urls=http://0.0.0.0:2380"- "--initial-cluster=default=http://localhost:2380"- "--data-dir=/var/lib/etcd"ports:- containerPort: 2379name: client- containerPort: 2380name: peervolumeMounts:- name: etcd-datamountPath: /var/lib/etcdvolumes:- name: etcd-dataemptyDir: {}

总结

Etcd 是一个分布式的键值存储系统,因其一致性、可靠性和安全性而被广泛应用于分布式系统中。Etcd 在 Kubernetes 中发挥着核心作用,用于存储集群的状态信息。通过 Etcd,可以实现配置共享、服务发现、分布式锁等多种功能。

http://www.lryc.cn/news/449150.html

相关文章:

  • 如何帮助我们改造升级原有架构——基于TDengine 平台
  • MySQl查询分析工具 EXPLAIN ANALYZE
  • RestClientException异常
  • poi如何实现自定义导出Excel-纵向横向合并单元格,自定义填充数据列
  • 6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)
  • 游戏怎么录制?王者荣耀游戏录制指南:iOS与电脑端全面教程
  • Vue.js组件开发指南
  • 【流计算】流计算概论
  • 20230819盘锦锦州葫芦岛自驾
  • Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析
  • UDS_4_传输存储的数据功能单元
  • 第二百五十八节 JPA教程 - JPA查询选择两个实体示例
  • 数据库三级模式结构
  • 【小程序websocket最佳实践,有心跳和断线重连】
  • 自然资源部最新Nature正刊!!!
  • git分支-创建、合并、删除
  • Python:Spoonfed - (2-10) 激励选择脚本(搬砖)
  • VS Code Python 文件导入提示 xxx Module 不存在解决方式
  • Android中的Activity与Fragment:深入解析与应用场景
  • Flux【lora模型】【真人模型】:极致逼真,小红书真实风格|旅游拍照|景点打卡
  • python基础语法--顺序结构
  • 软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法
  • (undone) 阅读 MapReduce 论文笔记
  • sql注入工具升级:自动化时间盲注、布尔盲注
  • 字节C++抖音直播一面-面经总结
  • 浅谈stm32的GPIO引脚配置模式
  • Meta Orion 原型的生产成本约为 10,000 美元
  • MATLAB GUI设计原则与实践
  • 电脑桌面显示不完整
  • Spring Boot与观察者模式实现数据同步更新机制