【云原生etcd】etcd的快速入门

在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响
应快速的服务集群,已经成为了迫切需要解决的问题。

目录

一. etcd是什么       

1.服务发现

2.Raft选举算法

3.etcd术语

二. etcd单机版安装

1.上传etcd安装包(网络下载太慢了)

2.解压

3.切换至etcd根目录

4.查看ectd版本

5.输入命令etcd

三.创建一个etcd服务

1.建立etcd相关目录

2.创建etcd配置文件

3.创建systemd配置文件

4.启动/停止/查看etcd服务 

四.etcd基本使用

1.帮助命令

2.put 放入数据

3.get查看数据

4. del 删除数据

5.watch,监测


一. etcd是什么       

etcd 是一个高度一致的分布式键值(key-value)存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在
领导者节点中也可以容忍机器故障。
etcd 是用Go语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。etcd机器之间的通信通过Raft共识算法处理。

1.服务发现

服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。
本质上来说,服务发现就是想要了解集群中是否有进程在监听udptcp端口,并且通过名字就可以查找和连接。
要解决服务发现的问题,需要有下面三大支柱,缺一不可:
  • 一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。
  • 一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
  • 一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可以确保能访问etcd集群的服务都能互相连接。

2.Raft选举算法

集群一般是由两个或两个以上的服务器组建而成,每个服务器都是一个节点。数据库集群、管理集群...数据库集群提供了读写功能,管理集群提供了管理、故障恢复等功能。
对于一个集群来说,多个节点的协同和管理是非常重要的。而主节点则实现了协同和管理,主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上 的一致性。
这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。分布式选举的作用就是选出一个主节点,由它来协调和管理其他节点,以保证集群有序运行和节点间数据的 一致性。
Raft 算法是典型的多数派投票选举算法,其选举机制与我们日常生活中的民主投票机制类似,核心思想是少数服从多数
也就是说,Raft 算法中,获得投票最多的节点成为主节点。
采用 Raft 算法选举,集群节点的角色有 3 种:
  • Leader: 即主节点,同一时刻只有一个 Leader,负责协调和管理其他节点;
  • Candidate: 即候选者,每一个节点都可以成为 Candidate,节点在该角色下才可以被选为新的 Leader
  • Follower: Leader 的跟随者,不可以发起选举。

Raft 选举的流程,可以分为以下几步:

1. 初始化时,所有节点均为 Follower 状态。
2. 开始选主时,所有节点的状态由 Follower 转化为 Candidate,并向其他节点发送选举请求。
3. 其他节点根据接收到的选举请求的先后顺序,回复是否同意成为主。这里需要注意的是,在每一轮选举中,一个节点只能投出一张票。
4. 若发起选举请求的节点获得超过一半的投票,则成为主节点,其状态转化为 Leader,其他节点的状态则由 Candidate 降为 FollowerLeader 节点与 Follower 节点之间会定期发送
心跳包,以检测主节点是否活着。
5. 当 Leader 节点的任期到了,即发现其他服务器开始下一轮选主周期时,Leader 节点的状态由 Leader 降级为 Follower,进入新一轮选主
每一轮选举,每个节点只能投一次票。
这种选举就类似人大代表选举,正常情况下每个人大代表都有一定的任期,任期到后会触发重新选举,且投票者只能将自己手里唯一的票投给其中一个候选者。
对应到 Raft 算法中,选主是周期进行的,包括选主和任值两个时间段,选主阶段对应投票阶段,任值阶段对应节点成为主之后的任期。
但也有例外的时候,如果主节点故障,会立马发起选举,重新选出一个主节点。
Google 开源的 Kubernetes,擅长容器管理与调度,为了保证可靠性,通常会部署 3 个节点用于数据备份。
3 个节点中,有一个会被选为主,其他节点作为备份。
Kubernetes 的选主采用的是开源的 etcd 组件。而,etcd 的集群管理器 etcd,是一个高可用、强一致性的服务发现存储仓库,就是采用了 Raft 算法来实现选主和一致性的。
Raft 算法具有选举速度快、算法复杂度低、易于实现的优点;
缺点是,它要求系统内每个节点都可以相互通信,且需要获得过半的投票数才能选主成功,因此通信量大。
该算法选举稳定性比 Bully 算法好,这是因为当有新节点加入或节点故障恢复后,会触发选主,但不一定会真正切主,除非新节点或故障后恢复的节点获得投票数过半,才会导致切主。

3.etcd术语

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

二. etcd单机版安装

cd /home    进入home创建etcd  ,home是专门给来放软件的 

  

1.上传etcd安装包(网络下载太慢了)

我用的连接工具可以直接移进去,你们可以用rz上传,如果rz报错的话,可以去网上搜索下载一下rz的命令

 安装包:

2.解压

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

3.切换至etcd根目录

cd etcd-v3.4.3-linux-amd64    //进入根目录

cp etcd etcdctl /usr/local/ bin   //复制到bin目录去
etcdetcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序  etcd是它的服务,etcdctl是它的指令

4.查看ectd版本

etcd --version

5.输入命令etcd

 即可启动一个单节点的etcd服务,ctrl+c即可停止服务

xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : name = default
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : data dir = default . etcd
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : member dir = default . etcd / member
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : heartbeat = 100 ms
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : election = 1000 ms
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : snapshot count = 100000
xxxx - xx - xx xx : xx : xx . xxxxxx I | embed : advertise client URLs = http : //localhost:2379
xxxx - xx - xx xx : xx : xx . xxxxxx I | etcdserver : starting member 8e9 e05c52164694d in cluster cdf818194e3a8c32

1.name表示节点名称,默认为default
2.data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。
3.http://localhost:2380和集群中其他节点通信。
4.http://localhost:2379提供客户端交互。
5.heartbeat100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms
6.election1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms
7.snapshot count10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
8.集群和每个节点都会生成一个uuid
9.启动的时候会运行raft,选举出leader

三.创建一个etcd服务

创建一个ectd服务中就可以让它开机自启,查看服务状态之类的

1.建立etcd相关目录

(即数据文件和配置文件的保存位置) 

mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/

2.创建etcd配置文件

vim /etc/etcd/etcd.conf
按 i 键进入编辑模式
把以下内容复制进去
# 节点名称
ETCD_NAME="etcd0"
# 指定数据文件存放位置
ETCD_DATA_DIR="/var/lib/etcd/"
esc 输入 :wq 保存并退出

3.创建systemd配置文件

vim /etc/systemd/system/etcd.service
按 i 键进入编辑模式
把以下内容复制进去 

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
User=root
Type=notify
WorkingDirectory=/var/lib/etcd/
## 根据实际情况修改EnvironmentFile和ExecStart这两个参数值
## 1.EnvironmentFile即配置文件的位置,注意“-”不能少
EnvironmentFile=-/etc/etcd/etcd.conf
## 2.ExecStart即etcd启动程序位置
ExecStart=/usr/local/bin/etcd
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

4.启动/停止/查看etcd服务 

systemctl daemon - reload && systemctl enable etcd && systemctl start etcd && systemctl status etcd

四.etcd基本使用

etcdctl是一个命令行客户端,可以对etcd服务进行测试或者手动修改数据库内容。另外,etcdctl还支持HTTP API(之后介绍)
etcdctl支持的命令大体上分为数据库操作和非数据库操作两类

1.帮助命令

etcdctl -h

2.put 放入数据

etcdctl put / testdir / testkey "Hello world"
这是用键值对的方式插入数据
/testdir/testkey:是键
"Hello world" :是值
--sort 对结果进行排序
--consistent 将请求发给主节点,保证获取内容的一致性。

3.get查看数据

etcdctl get  / testdir / testkey

4. del 删除数据

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

5.watch,监测

watch,监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出

etcdctl watch /testdir/testkey

现在就在监测当中了,我们另外打开一个窗口,操作这个键

 回到监测的窗口,欧克,监测到了


好啦 文章内容到这里就结束了  你学到了吗 !!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

兆芯最新X86 CPU曝光:性能与英特尔/AMD相比,没落后10年

众所周知,在PC领域,X86完全是处于垄断地全的,至少占了90%以上的份额。其它的像MIPS、ARM、RISC-V等等,都不是X86的对手。 这与X86是复杂指令集有关,更与X86绑定了windows操作系统,有坚固的intel联盟有关&am…

多模态模型学习1——CLIP对比学习 语言-图像预训练模型

多模态模型学习1——CLIP对比学习 语言-图像预训练模型学习前言什么是CLIP模型代码下载CLIP实现思路一、网络结构介绍1、Image Encodera、PatchPosition Embeddingb、Transformer EncoderI、Self-attention结构解析II、Self-attention的矩阵运算III、MultiHead多头注意力机制IV…

美国Embarcadero公司2023年2月27日正式发布RAD Studio Delphi 11.3

Embarcadero很高兴地宣布发布RAD Studio 11 Alexandria Release 3,也称为RAD Studio 11.3,以及Delphi 11.3和CBuilder 11.3。此版本侧重于质量和改进,以RAD Studio 11 Alexandria三个先前版本中的强大新功能为基础。 RAD Studio 11.3包括对多…

BUUCTF-[GWCTF 2019]babyvm

题目下载:下载 这种简单vm逆向搞了快半辈子了,看别人wp也看的迷迷糊糊的,今天突然就看明白了,可能是受一个python虚拟机题的影响,第一次见vm,简单记录一下~ 参考:系统学习vm虚拟机逆向_43v3rY…

标准分布的累计分布函数的差分去模拟离散的高斯分布

标准分布的累计分布函数的差分去模拟离散的高斯分布如何理解图像生成中“标准分布的累积分布函数的差分去模拟离散的高斯分布”?discretized_gaussian_log_likelihoodcodeapprox_standard_normal_cdftanh激活函数标准正态分布的累积密度函数如何理解图像生成中“标准…

提高代码质量!详解在Gradle项目中使用PMD的正确姿势

当今的软件开发需要使用许多不同的工具和技术来确保代码质量和稳定性。PMD是一个流行的静态代码分析工具,可以帮助开发者在编译代码之前发现潜在的问题。在本文中,我们将讨论如何在Gradle中使用PMD,并介绍一些最佳实践。 什么是PMD&#xff…

国内智慧城市标准是怎样的?

我国智慧城市标准化工作的历史可以回溯至2013 年,相关工作也得到了国家标准委、中央网信办、发展改革委、工业和信息化部等部门的高度关注和支持,在标准化协调机制、国家标准研制实施等方面取得了积极进展。 北京智汇云舟科技有限公司成立于2012年&#…

【vSphere | Python】vSphere Automation SDK for Python Ⅲ—— vCenter Datacenter APIs

目录5. vCenter Datacenter APIs操作5.1 Create Datacenter5.2 List Datacenter5.3 Get Datacenter5.4 Delete Datacenter参考资料5. vCenter Datacenter APIs 数据中心服务(Datacenter service)提供管理 vCenter Server 中数据中心的操作。 操作 Cre…

新加坡电商系统上线指南

如果您正在考虑在新加坡开展电子商务业务并准备上线您的电商网站,以下是一些指南和建议,可以帮助您成功地启动和运营您的电商业务: 确认您的业务模式和目标市场。在上线之前,您需要确定您的业务模式,例如是B2B&#xf…

Python 进阶指南(编程轻松进阶):六、编写 Python 风格的代码

原文:http://inventwithpython.com/beyond/chapter6.html 强大对于编程语言来说是一个没有意义的形容词。每种编程语言都称自己长处。官方 Python 教程开头就说 Python 是一种简单易学、功能强大的编程语言。但是没有一种语言可以做另一种语言不能做的算法&#xff…

Robosense激光雷达Linux配置

文章目录1.1 速腾rs16连接:1.2 网络配置1)官方说明2)设置网络3)检查是否连接成功2.1 激光雷达ROS包下载/编译1)下载ROS包2)安装libpcap依赖3)修改编译模式4)config文件配置5)编译并运…

AI-TestOps —— 软件测试工程师的一把利剑

写在前面软件测试的前世今生测试工具开始盛行AI-TestOps 云平台● AI-TestOps 功能模块● AI-TestOps 自动化测试流程写在前面 最近偶然间看到一句话:“软件测试是整个 IT 行业中最差的岗位”。这顿时激起了我对软件测试领域的兴趣,虽然之前未涉及过软件…

《Flutter进阶》flutter升级空安全遇到的一些问题及解决思路

空安全出来挺久了,由于业务需求较紧,一直没时间去升级空安全,最近花了几天去升级,发现其实升级也挺简单的,不要恐惧,没有想象中的多BUG。 flutter版本从1.22.4升到3.0.5; compileSdkVersion从1…

日撸 Java 三百行day11-13

文章目录说明day11-day12 顺序表1.面向过程面向对象区别2.代码2.1 面向过程2.2 面向对象day13 链表1.成员内部类2.链表的插入删除3.代码说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了…

【51单片机】:LED任务及汇编解释任务

学习目标: 1、用汇编或者c语言实现D1 D3 D5 D7 为一组 ;D2 D4 D6 D8 为一组 ,两组实现 1)一组亮约一秒 另一组灭一秒,这样的互闪现象五次后 25分 2)所有灯灭约一秒后, …

关于ChatGPT的一些随笔

大家好,我是老三,最近几个月关于ChatGPT的信息可以说是铺天盖地。 “王炸,ChatGPT……” “xxx震撼发布……” “真的要失业了,xxx来袭……” “普通如何利用ChatGPT……” …… 不过老三前一阵比较忙,对ChatGPT…

ElasticSearch简介

第一章 ElasticSearch简介 1.1 什么是ElasticSearch Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB…

【数据结构与算法】树与二叉树

目录一.树1.树的定义2.结点的分类与关系3.树的相关概念4.树的表示方法二.二叉树1.二叉树的定义2.特殊二叉树3.二叉树的性质4.二叉树的顺序结构5.二叉树的链式结构(1)链式结构的创建(2)结点的创建(3)二叉树的手动构建(4)前中后序遍历(5)二叉树结点个数(6)二叉树的高度(7)第k层的…

Docker目录迁移

介绍 在docker的使用中随着下载镜像越来越多,构建镜像、运行容器越来越多, 数据目录必然会逐渐增大;当所有docker镜像、容器对磁盘的使用达到上限时,就需要对数据目录进行迁移。 如何避免: 1.在安装前对/var/lib/docker&#x…

如何3步精读《PMBOK指南》(含PMP备考资料)

初学者学习《PMBOK指南》的确有点吃亏,比不得那些项目管理专业以及相关专业的毕业生,哪怕只稍微接触过项目的都比初学者强。 所以,有计划性的阅读就显得尤为重要,要克服的不仅是阅读上的枯燥,还有专业知识的理解&…