etcd入门指南

目录

一.etcd的介绍和发展

1.什么是etcd

2.ecsd的发展历史

3.etcd特点

 4.使用场景

5.关键字

6.工作原理

 7.下载地址

二.将etcd部署到linux

1.etcd安装前介绍

 2.安装etcd

1. 创建并切换到下载目录

​编辑 2.下载或者解压

3切换至etcd根目录,运行查看命令ls

4.将etcd和etcdctl二进制文件复制到/usr/local/bin目录

5.查看版本

 ​编辑

6.启动

3.安装设置etcdctl版本(v2/v3)

4. 常用操作


前言

在数字化时代的浪潮中,随着大数据、云计算和微服务的飞速发展,分布式系统已成为现代软件架构的基石。在构建分布式系统的过程中,如何确保数据的一致性、可靠性和安全性成为了至关重要的问题。etcd,作为一个开源的分布式键值存储系统,凭借其强大的特性和广泛的应用场景,成为了解决这些问题的关键组件之一。

etcd不仅为开发者提供了一个简单、安全、快速和可靠的键值存储解决方案,更成为了服务发现、配置共享和领导者选举等分布式系统核心功能的基石。通过深入了解etcd的工作原理和核心特性,开发者可以更加高效地构建稳定、可扩展的分布式系统,从而推动业务的发展和技术的创新。

在本篇博客中,我们将从etcd的基本概念入手,逐步探讨其核心特性、基本使用方法以及在实际场景中的应用。无论你是初入分布式系统的新手,还是希望深入了解etcd的资深开发者,相信这篇博客都将为你提供有价值的信息和启示。让我们一同踏上etcd的学习之旅,探索分布式系统的奥秘与魅力!

一.etcd的介绍和发展

1.什么是etcd

etcd是一个高可用的分布式键值(key-value)存储系统,用于共享配置和服务发现。它基于Go语言实现,采用Raft一致性算法来确保数据在多个节点之间的强一致性。etcd最初由CoreOS公司开发,现在已经成为许多分布式系统的核心组件,如Kubernetes。

2.ecsd的发展历史

etcd的历史与发展

etcd,这个现今在分布式系统中扮演重要角色的键值存储系统,其诞生和成长的故事充满了技术和协作的魅力。从最初的设想,到如今的广泛应用,etcd的发展历程不仅见证了技术的突破,也反映了开源社区的力量和影响力。

etcd最初是由CoreOS公司开发的。在2013年6月,CoreOS向GitHub提交了etcd的第一个版本的初始代码,这一时间点标志着etcd项目的正式诞生。这个项目的设计初衷,是为了解决集群管理系统中OS升级的分布式并发控制问题,以及配置文件的存储与分发等核心挑战。etcd被设计为一个小型但功能强大的键值(key-value)数据存储服务,强调高可用性和强一致性。

etcd的出现并非偶然,它的诞生和发展与当时的技术环境紧密相连。随着云计算和大数据的兴起,分布式系统成为了处理海量数据和提供高可用服务的关键。在这样的背景下,一个能够确保数据一致性和可靠性的分布式存储系统显得尤为重要。etcd就是在这样的背景下应运而生,并迅速获得了业界的关注。

2014年6月,Kubernetes v0.4版本发布,这是一个由Google开发的容器管理平台。在这个版本中,etcd 0.2版本被用作实验核心元数据的存储服务。这一选择不仅证明了etcd在分布式存储方面的技术实力,也为etcd社区带来了飞速的发展。Kubernetes的广泛采用极大地推动了etcd的应用和普及,使得更多的开发者和企业开始关注和使用etcd。

随着时间的推移,etcd不断迭代和改进。2015年2月,etcd发布了第一个正式的稳定版本2.0。这个版本不仅修复了之前版本中的一些问题,还引入了更多的特性和优化,使得etcd更加成熟和稳定。此后,etcd社区持续发展壮大,吸引了越来越多的贡献者和使用者。

如今,etcd项目已经隶属于CNCF(Cloud Native Computing Foundation)基金会,这是一个由多家大型互联网公司共同支持的开源组织。etcd的广泛使用也证明了其在实际应用中的价值。AWS、Google、Microsoft、Alibaba等大型互联网公司都在使用etcd来构建和管理他们的分布式系统。

3.etcd特点

  • 简单的接口,通过标准的HTTP API进行调用,也可以使用官方提供的 etcdctl 操作存储的数据

  • 键值对存储。

  • 有监听机制,可以监听特定键的变化,并作出响应

 4.使用场景

  • 服务发现(Service Discovery)
  • 消息发布与订阅
  • 负载均衡
  • 分布式通知与协调
  • 分布式锁

5.关键字

Raft:etcd所采用的保证分布式系统强一致性的算法。
Node:一个Raft状态机实例。
Member: 一个etcd实例。它管理着一个Node,并且可以为客户端请求提供服务。
Cluster:由多个Member构成可以协同工作的etcd集群。
Peer:对同一个etcd集群中另外一个Member的称呼。
Client: 向etcd集群发送HTTP请求的客户端。
WAL:预写式日志,etcd用于持久化存储的日志格式。
snapshot:etcd防止WAL文件过多而设置的快照,存储etcd数据状态。
Proxy:etcd的一种模式,为etcd集群提供反向代理服务。
Leader(领导者):Raft算法中通过竞选而产生的处理所有数据提交的节点。
Follower(跟随者):竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证。
Candidate:当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选。
Term:某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term。
Index:数据项编号。Raft中通过Term和Index来定位数据。

6.工作原理

第1部分是HTTP Server: 用于处理用户发送的API请求,以及其它etcd节点的同步与心跳信息请求
第2部分是Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现
第3部分是Raft:Raft强一致性算法的具体实现,是etcd的核心
第4部分是WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。
在WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容

 7.下载地址

  • etcd项目地址:https://github.com/coreos/etcd/
  • etcd下载地址:https://github.com/etcd-io/etcd/releases 根据需要查找对应版本下载即可

二.将etcd部署到linux

1.etcd安装前介绍

  • etcd在生产环境中一般推荐集群方式部署
  • etcd使用的2个默认端口号:2379和2380
    2379:用于客户端通信(类似于sqlserver的1433/oracle的1521/mysql的3306)
    2380:用于与集群中的Peer通信
  • 因为etcd是go语言编写的,安装只需要下载对应的二进制文件,并放到合适的路径就行。

 2.安装etcd

1. 创建并切换到下载目录

mkdir /usr/local/mytools && cd /usr/local/mytools

 2.下载或者解压


wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz 

这里小编采用的是解压 

tar -zxvf etcd-v3.4.3-linux-amd64.tar.gz

 

3切换至etcd根目录,运行查看命令ls

里面会有一些文档和2个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端

cd etcd-v3.4.3-linux-amd64 && ls

 

4.将etcd和etcdctl二进制文件复制到/usr/local/bin目录

这样系统中可以直接调用etcd/etcdctl这两个程序

cp etcd etcdctl /usr/local/bin

 

5.查看版本

etcd --version

 

6.启动

在解压的路径下启动即可

1.name表示节点名称,默认为default。

2.data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。

3.在http://localhost:2380和集群中其他节点通信。

4.在http://localhost:2379提供客户端交互。

5.heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms。

6.election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms。

7.snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。

8.集群和每个节点都会生成一个uuid。

9.启动的时候会运行raft,选举出leader

3.安装设置etcdctl版本(v2/v3)

注意:etct3.4.3默认使用v3命令所以步骤7可省略,之前版本此步骤不可少,例如:v3.3.10

修改环境变量 

vi /etc/profile

# 最后一行指定etcdctl命令的版本为v3 

export ETCDCTL_API=3

# 刷新环境变量 source /etc/profile

#查看当前etcdctl的版本信息 #

v2版本命令和v3命令是不一样的,

例如: #v2查看版本号 etcdctl -version或 etcdctl -v

#v3查看版本号 etcdctl version

# 更多命令帮助可以查询 etcdctl --help  

4. 常用操作

1) 如何获取帮助

etcdctl -h
  1. put
etcdctl put /testdir/testkey "Hello world"

支持的选项包括
--ttl '0' 该键值的超时时间(单位为秒),不配置(默认为0)则永不超时
--swap-with-value value 若该键现在的值是value,则进行设置操作
--swap-with-index '0' 若该键现在的索引值是指定索引,则进行设置操作

  1. get
etcdctl get /testdir/testkey

--sort 对结果进行排序
--consistent 将请求发给主节点,保证获取内容的一致性。

  1. del
# 清空数据
etcdctl del / --prefix#删除所有/test前缀的节点
etcdctl del /test --prefix

5)watch

#1. 增加一个key,(客户端窗口1)
etcdctl put key1 "hello"#2. 打开一个新的客户端窗口2,监听key1的变化
etcdctl watch key1#3. 回到窗口1,向key1 中put新值
etcdctl put key1 "hello work"# 4. 此时可以在窗口2中看到监听输出# 查看版本信息
curl http://127.0.0.1:2379/version

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机试 - 服务器广播 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷…

土地变化的“预言家”:DNDC模型在双碳背景下的应用探索

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…

定时执行专家V7.1 多国语言版本英文版发布 - TimingExecutor V7.1 English Version Release

目录 ◆ About TimingExecutor ◆ Main Frame ◆ Job Dailog ◆ Trigger Dialog ◆ Setting Dialog ◆ About Dialog ◆ Job Detail Information panel ◆ Statistics Information panel ◆ About TimingExecutor 《定时执行专家》是一款制作精良、功能强大、毫秒精度…

Spring Boot中实现图片上传功能的两种策略

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

vue页面刷新问题:返回之前打开的页面,走了create方法(解决)

vue页面刷新问题:返回之前打开的页面,走了create方法(解决) 直接上图, 我们在开发的时候经常会复制粘贴,导致vue文件的name没有及时修改 我们需要保证name和浏览器的地址一致,这样才能实现缓…

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

智引未来:2024年科技革新引领工业界变革与机遇

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

上海亚商投顾:沪指冲高回落 旅游股尾盘逆市走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一市场情绪 沪指昨日冲高回落,深成指午后跌超1%,创业板指跌超2%,北证50指数跌逾3%。设备…

51-27 DirveVLM:自动驾驶与大型视觉语言模型的融合

本文由清华大学和理想汽车共同发布于2024年2月25日,论文名称DRIVEVLM: The Convergence of Autonomous Driving and Large Vision-Language Models. DriveVLM是一种新颖的自动驾驶系统,旨在针对场景理解挑战,利用最近的视觉语言模型VLM&…

spring启动时如何自定义日志实现

一、现象 最近在编写传统的springmvc项目时,遇到了一个问题:虽然在项目的web.xml中指定了log4j的日志启动监听器Log4jServletContextListener,且开启了日志写入文件,但是日志文件中只记录业务代码中我们声明了日志记录器的日志&a…

leetcode69---x 的平方根

大家好,我是大唐,刚刷完了几道经典的leetcode题,今天给大家分享一道leetcode上面的二分查找经典题型---x 的平方根,我们往下看。 题目描述 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数&a…

Ant Design Vue 修改Model弹框 样式不生效

今天在使用 Ant Design Vue 组件库中又踩了一个坑 其他的样式都可以更改,唯独更改 Model 弹框组件的样式一直不生效 于是研究了好久才找到样式不生效的原因 最后又折腾了好久,参考了不少资料才得出的解决方案:

Gin 获取请求参数

POST 请求参数 Gin 获取Post请求URL参数有三种方式 func (c *Context) PostForm(key string) string func (c *Context) DefaultPostForm(key, defaultValue string) string func (c *Context) GetPostForm(key string) (string, bool)大多数情况下使用的是application/x-www…

力扣刷题

文章目录 1. 双指针1.1 两数之和1.2 三数之和1.3 盛最多水的容器1.4 接雨水 2. 字串2.1 滑动窗口最大值 3. 动态规划4. 多维动态规划4.1 最长回文字串 1. 双指针 1.1 两数之和 思路:因为是有序数组, 1.2 三数之和 题目要求不能重复 思路:三…

力扣刷题Days12第二题--100相同的树(js)

目录 1,题目 2,代码 2.1深度优先遍历 2.2广度优先遍历 3,学习与总结 1,题目 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是…

Java毕业设计 基于SpringBoot vue 疫苗咨询与预约系统

Java毕业设计 基于SpringBoot vue 疫苗咨询与预约系统 SpringBoot vue 疫苗咨询与预约系统 功能介绍 用户前端:首页 图片轮播 疫苗信息 条件查询 疫苗详情 点我收藏 评论 接种疫苗 疫情资讯 资讯详情 资讯评论 论坛交流 发布帖子 公告信息 公告详情 留言反馈 登录…

基于AM62X+FPGA/MCU的B码对时定制化整机解决方案

什么是IRIG-B码对时 IRIG-B(inter-range instrumentationgroup-B)码是一种时间同步标准,通常用于精确的时间测量和数据同步,广泛应用于电力、通信、航空等领域。 IRIG-B码为每秒一帧的时间串码,一帧串码中包含100个码元,频率为1K…

C++ 特殊的类设计

目录 1.请设计一个类,不能被拷贝 2. 请设计一个类,只能在堆上创建对象 3. 请设计一个类,只能在栈上创建对象 4. 请设计一个类,不能被继承 5. 请设计一个类,只能创建一个对象(单例模式) 1.请设计一个类,…

用readproc函数读取进程的状态

概要&#xff1a; 本篇演示用readproc函数读取进程的状态 libprocps库的安装参考笔者的文章readproc.h-CSDN博客 演示所用的系统是Ubuntu22.04 一、代码 #include<stdio.h> #include<stdlib.h> #include<proc/readproc.h> int main() {struct PROCTAB *…

CentOS下安装RabbitMQ

准备工作&#xff0c;更新yum源 正式环境慎用 yum update -y # 进入目录 cd /etc/yum.repos.d/ # 创建目录 mkdir backup # 默认源配备份 mv C* backup/ # 下载阿里云yum源 wget -O /etc/yum.repos.d/CenOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清除旧…