首页 > 其他分享 >Etcd 基本入门

Etcd 基本入门

时间:2024-03-27 16:01:37浏览次数:28  
标签:基本 入门 Kubernetes 投票 etcd Etcd 节点 2379

1:什么是 Etcd ?

Etcd 是 CoreOS 团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,Etcd基于 Go 语言实现。

名字由来,它源于两个方面,unix的“/etc”文件夹和分布式系统(“D”istribute system)的D,组合在一起表示etcd是用于存储分布式配置的信息存储服务。

2:Kubernetes 为什么用 Etcd ?

2014年6月,Google的Kubernetes项目诞生了,我们前面所讨论到Go语言编写、etcd高可用、Watch机制、CAS、TTL等特性正是Kubernetes所需要的,它早期的0.4版本,使用的正是etcd v0.2版本。

Kubernetes是如何使用etcd v2这些特性的呢?举几个简单小例子。

当你使用Kubernetes声明式API部署服务的时候,Kubernetes的控制器通过etcd Watch机制,会实时监听资源变化事件,对比实际状态与期望状态是否一致,并采取协调动作使其一致。Kubernetes更新数据的时候,通过CAS机制保证并发场景下的原子更新,并通过对key设置TTL来存储Event事件,提升Kubernetes集群的可观测性,基于TTL特性,Event事件key到期后可自动删除。

Kubernetes项目使用etcd,除了技术因素也与当时的商业竞争有关。CoreOS是Kubernetes容器生态圈的核心成员之一。

3:Etcd的主要特点和用途包括

Etcd是一个分布式键值存储系统,通常用于在分布式系统中存储配置数据、元数据和状态信息。它是由CoreOS开发的,基于Raft一致性算法实现了高可用性和一致性。Etcd最初是为了支持CoreOS的容器集群管理工具而开发的,但后来被许多其他项目广泛使用,包括Kubernetes等。

Etcd的主要特点和用途包括:

  1. 一致性保证:Etcd使用Raft一致性算法来确保数据的一致性和可靠性。在Etcd集群中,数据的读写操作都将遵循一致性和持久性要求,从而确保系统的可靠性。

  2. 高可用性:Etcd支持数据的复制和故障转移,即使某个节点发生故障,集群仍然能够继续工作并保持数据的可用性。

  3. 分布式锁:Etcd提供了分布式锁的支持,可以用于在分布式系统中协调资源的访问,避免竞争条件和数据冲突。

  4. 服务发现:在微服务架构中,Etcd可以用作服务发现的后端存储。服务实例可以注册到Etcd中,并通过查询Etcd来发现其他服务的位置和状态。

  5. 配置管理:Etcd可以用于存储系统的配置信息,例如网络配置、服务发现、权限控制等,使得系统可以动态地管理和调整配置,而不需要硬编码在应用程序中。

总的来说,Etcd提供了一个可靠、高性能的分布式存储解决方案,用于解决分布式系统中的配置管理、服务发现、一致性保证和分布式锁等问题

4:raft共识算法的选举机制

在 etcd 中,领导者节点的选举是通过 Raft 共识算法来完成的。Raft 算法定义了一套机制,确保在集群中只有一个领导者,其他节点都是跟随者或候选人。

Raft 算法的选举过程包括以下几个步骤:

  1. 选举超时(Election Timeout):每个节点在随机的时间间隔内设置一个选举超时计时器。一旦计时器超时,节点就会认为当前没有领导者,于是开始新一轮的选举。

  2. 成为候选人(Becoming a Candidate):当节点的选举超时计时器触发时,节点会变成候选人,并向其他节点发送请求投票的消息。

  3. 请求投票(Request Votes):候选人节点向其他节点发送请求投票的消息,包括候选人的任期号等信息。其他节点收到请求后,会判断是否投票给该候选人。

  4. 投票过程(Voting Process):节点在收到请求投票消息后,会进行投票。如果节点尚未投票给其他候选人,并且候选人的任期号大于自己的任期号,则会投票给候选人,并重置自己的选举超时计时器。

  5. 获得多数投票(Winning the Election):如果候选人收到了超过半数节点的投票,那么它就会成为新的领导者。在成为领导者后,它会发送心跳消息来维持自己的领导地位,并开始接收客户端请求并将其复制到其他节点。

  6. 维持领导地位(Maintaining Leadership):一旦成为领导者,节点会周期性地发送心跳消息给其他节点,以维持自己的领导地位。如果其他节点在一定时间内未收到领导者的心跳消息,它们会认为当前领导者已失效,从而开始新一轮的选举过程。

总的来说,Raft 算法通过定时的选举过程来确保集群中只有一个领导者,从而保证系统的一致性和可靠性。选举过程中节点的状态转换和投票过程都是根据 Raft 算法的规则来执行的,以确保选举的正确性和可靠性。

5:基本入门

5.1:github地址

GitHub:https://github.com/etcd-io/etcd

5.2:下载

etcd支持 linux,mac和docker环境的安装下载,windows稍微麻烦点,需要二进制文件

Releases · etcd-io/etcd (github.com)

5.2:以windows按照为例

下载二进制文件

本地解压

为了方便使用 etcd,你可以将 etcd 的二进制文件所在目录添加到系统的 PATH 环境变量中。这样,你就可以在命令行中直接使用 etcd 和 etcdctl 命令。

启动

点击etcd.exe文件

安装完成后,会得到 2 个脚本:

  • etcd:etcd 服务本身

  • etcdctl:客户端,用于操作 etcd,比如读写数据

执行 etcd 脚本就可以启动服务了,服务默认占用 2379 和 2380 端口,作用分别如下:

  • 2379:提供 HTTP API 服务,和 etcdctl 交互

  • 2380:集群中节点间通讯

启动日志显示2379标识启动成功

验证启动结果

执行

etcdctl.exe --endpoints=localhost:2379 endpoint health

返回标识启动成功
localhost:2379 is healthy: successfully committed proposal: took = 27.4106ms

插入和查询数据

插入

etcdctl.exe --endpoints=localhost:2379 put wkn 1

查询

etcdctl.exe --endpoints=localhost:2379 get wkn

5.3:etcd可视化工具

Etcd 的可视化工具推荐 etcdkeeper 

地址:https://github.com/evildecay/etcdkeeper

启动成功在浏览器输入

http://127.0.0.1:8080/etcdkeeper/

标签:基本,入门,Kubernetes,投票,etcd,Etcd,节点,2379
From: https://blog.csdn.net/weixin_41404773/article/details/137069025

相关文章

  • 鸿蒙TypeScript入门学习第一天【简单介绍】
    1.TypeScript教程TypeScript是JavaScript的一个超集,支持ECMAScript6标准()。TypeScript由微软开发的自由和开源的编程语言。TypeScript设计目标是开发大型应用,它可以编译成纯JavaScript,编译出来的JavaScript可以运行在任何浏览器上。2、语言特性TypeScript是......
  • 洛谷题单指南-图的基本应用-P3916 图的遍历
    原题链接:https://www.luogu.com.cn/problem/P3916题意解读:寻找每个点所能到达的最大的点。解题思路:直观上,可以依次从每个点开始DFS搜索,记录经过的最大点,复杂度是O(n^2)级别,会超时。可以换一种角度,既然要找每个点可以达到的最大值,那么可以反向建图,从最大值出发,所经过的点能达到......
  • 从入门到精通:GPS北斗卫星校时服务器 操作指南
    从入门到精通:GPS北斗卫星校时服务器操作指南从入门到精通:GPS北斗卫星校时服务器操作指南京准电子科技官微——ahjzsz一、产品功能卫星时钟服务器是一款采用GPS或北斗卫星提供高精度网络时间服务的产品。卫星天线安装简便(根据天线所放位置提示实时卫星颗数),接口可支持以太网1......
  • python 列表基本操作
    python列表基本操作一、列表基本操作1.列表2.访问列表中的值3.更新列表4.删除列表元素5.Python列表脚本操作符6.Python列表截取与拼接7.嵌套列表8.列表比较9.Python列表函数&方法二、代码概述一、列表基本操作1.列表序列是Python中最基本的数据结构......
  • 零基础Web3入门到精通
    Web3是互联网的下一代,它将使人们能够拥有自己的数据并控制自己的在线体验。Web3基于区块链技术,该技术为安全、透明和可信的交易提供支持。现在的web已被成为传统互联网了,那么如何抓住下一代互联网的红利呢,有没有想一起学习Web3的同学,大家可以一起探讨学习,请加QQ群:782128964......
  • 一本通差分约束入门题
    最关键的就是找好所有的要满足的不等式条件,注意隐含的条件还有一点就是注意没有源点建立源点#2436. 「SCOI2011」糖果#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;#defineintlonglongconstintN=5e5+10,M......
  • Es 7+ 基本操作
    查询GET_search{"query":{"match_all":{}}}创建索引PUT/abc/创建更新指定ID的数据,ID存在即更新,原理是先删除行再插入POST/abc/_doc/1{"name":"qqq","age":28.1}创建生成自动ID的数据POST/abc/_doc{"na......
  • ComplateFeature基本使用
    combine合并featureimportcn.hutool.http.HttpUtil;importentity.EssBptPrice;importentity.Student;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.CompletableFuture;importjava.util.concurrent.ExecutionException;publi......
  • MongoTemplate基本使用
    分页/***mongo分页*/@TestpublicvoidtestPage(){intpageSize=10;intcurrentNo=0;Queryquery=newQuery();query.addCriteria(Criteria.where("username").is("小明"));longcount=mongoTemplate.count(query,User.class);longtot......
  • Mongo Db基本查询
    gt:大于gte:大于等于lt:小于lte:小于等于SQL查询语句MongoDBfind()语句SELECT*FROMusersdb.users.find()SELECTid,user_id,statusFROMusersdb.users.find({},{user_id:1,status:1})SELECTuser_id,statusFROMusersdb.users.find({},{......