etcd基本介绍

etcd基本介绍

ETCD是SoreOs公司发布的一个分布式的、高可用的、key-value存储的数据库。基于Go语言实现,k8s中也使用了ETCD作为数据库。主要用于共享配置和服务发现。相对于zookeeper采用的Paxos,ETCD采用的是Raft算法,该算法具备的性能更佳、数据一致性强等优点。

服务发现

服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。 本质上来说,服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以查找和连接。

要解决服务发现的问题,需要有下面三大支柱,缺一不可:

1.一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。
2.一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
3. 一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可 以确保能访问etcd集群的服务都能互相连接。

Raft选举算法

一、什么是Raft算法

Raft算法是基于Multi-Paxos 思想 提出的一种易于理解的共识算法,主要解决了分布式中的一致性问题。

二、选举过程

Raft算法中每个节点拥有三种状态: Follower 跟随者状态 Candidate 候选者状态 Leader 领导者状态 1、所有的节点初始都是在跟随者状态下 2、如果一个跟随者在一定时间内(150ms 至300ms,随机值)没有收到领导者的心跳信息,自己将变成候选者状态,先投自己一票,并向群体内的其它节点发送选举投票请求 3、群体内的其它节点如果在这一任期内没有投过票,收到投票请求后将投一票给候选者,并返回 4、如果一个候选者收到了群体内大多数人(N/2 + 1)的投票,它将变成一名领导者,选举完成,开始不断地向其它节点发送心跳检测。任期将一直持续到某一个跟随者在一定时间内没有收到领导者的心跳信息。 选举完成之后,所有的数据操作将都通过领导者进行

通过上述的选举过程发现,肯定会有一定几率,两个跟随者节点同时进入候选者状态。 Raft算法中还有一个概念叫做任期(term),在一个任期中,每个节点只能投一次票。每次处理群体内其它节点的请求时,都会对term进行校验或者更新,当某个节点发现自己的 term 号比其他人小,那么它会更新到较大的 term 值。如果一个 Candidate 或者 Leader 发现自己的 term 过期了,他会立即退回成 Follower。如果一台服务器收到的请求的 term 号是过期的,那么它会拒绝此次请求。

个人理解可以想象成你们村儿选第二百五十届村长,term相当于第250个任期,总共有2个村名,还有2个候选者去竞选,你爸是村民,你家在这个任期只能投一票,你爸投给了张三,就不能投给李四了。

这时候他们会进行 2 步骤:先投自己一票,并向群体内的其它节点发送选举投票请求 并且两人都拉到了一名村民(跟随者)的投票,这时两位候选者都拥有两票,这一轮的选举就失败了,赋随机等待值继续等待下一轮的选举,重复2-4步骤.

etcd常用术语

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来定位数据。

centos安装etcd

1.解压etcd安装包

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

2.切换至etcd根目录,将etcd和etcdctl二进制文件复制到/usr/local/bin目录这样系统中可以直接调用etcd/etcdctl这两个程序

**cp etcd etcdctl /usr/local/bin**

3.查看etcd版本

**etcd --version**

4.输入命令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 = 100ms **
​
**xxxx-xx-xx xx:xx:xx.xxxxxx I | embed: election = 1000ms **
​
**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 8e9e05c52164694d in cluster cdf818194e3a8c32**

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

创建一个etcd服务

1.建立etcd相关目录(即数据文件和配置文件的保存位置)

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

数据目录mkdir -p /var/lib/etcd/

配置文件目录mkdir -p /etc/etcd/

2.创建etcd配置文件

vim /etc/etcd/etcd.conf

3.创建systemd配置文件

vim /etc/systemd/system/etcd.service

创建完成后刷新系统资源 systemctl daemon-reload

etcd开机自启

systemctl enable etcd

etcd启动

systemctl start etcd

etcd查看服务

systemctl status etcd

etcd基本使用

增删改查数据相关命令

帮助命令

etcdctl -h

put 放入数据

etcdctl put /testdir/testkey "Hello world"
--sort 对结果进行排序
--consistent 将请求发给主节点,保证获取内容的一致性。

删除

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

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

etcdctl watch key1

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

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

相关文章

Linux 启动过程详解

第 1 步 - 当我们打开电源时,BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)固件从非易失性存储器加载,并执行POST(开机自检)。 第 2 步 - BIOS/UEFI 检测连接到系统的设备&am…

对话新七天创始人&CEO左英杰:品牌直播电商出圈“五步法”

整理 | 飞族 编辑 | 渔舟 出品|极新&北京电子商务协会 AI、AIGC、VR等数智化新技术发展日新月异,在直播电商领域的应用和探索逐渐深入,从内容生成、创意优化、购物体验、智能客服、精准营销等方面提供全方位全链路的赋能&#…

[ctfshow 2023元旦水友赛]web题解

文章目录 easy_include方法一 session文件包含方法二 pearcmd.php本地文件包含 easy_webeasy_login easy_include 源码 <?phpfunction waf($path){$path str_replace(".","",$path);return preg_match("/^[a-z]/",$path); }if(waf($_POST[…

JAVA集合框架总结

集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用数组存储对象方面具有一些弊端&#xff0c;而Java 集合就…

二叉树的层序遍历经典问题(算法村第六关白银挑战)

基本的层序遍历与变换 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入…

【合阳新起点公益】“关爱留守儿童 守护牙齿健康”牙膏发放活动

为了关爱儿童的口腔健康&#xff0c;帮助他们改善生活状况&#xff0c;养成良好的刷牙习惯。合阳县未成年人保护中心、合阳县新起点公益服务中心组织链接到汕头市惠泽人志愿服务中心&#xff0c;为孩子们申请到一批儿童爱心牙膏套盒&#xff0c;分别于2023年12月22日、12月30日…

第一课:Transformer

第一课&#xff1a;Transformer 文章目录 第一课&#xff1a;Transformer1、学习总结&#xff1a;什么是语言模型&#xff1f;大语言模型&#xff08;LLM&#xff09;技术演变史注意力机制Transformer结构课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、…

uniappVue3版本中组件生命周期和页面生命周期的详细介绍

一、什么是生命周期&#xff1f; 生命周期有多重叫法&#xff0c;有叫生命周期函数的&#xff0c;也有叫生命周期钩子的&#xff0c;还有钩子函数的&#xff0c;其实都是代表&#xff0c;在 Vue 实例创建、更新和销毁的不同阶段触发的一组钩子函数&#xff0c;这些生命周期函数…

面试题:你如何理解 System.out.println()?

文章目录 前言首先分析System源码&#xff1a;out源码分析println分析 前言 如果你能自己读懂System.out.println()&#xff0c;就真正了解了Java面向对象编程的含义。 面向对象编程即创建了对象&#xff0c;所有的事情让对象帮亲力亲为&#xff08;即对象调用方法&#xff09…

2023年广东省网络安全A模块(笔记详解)

模块A 基础设施设置与安全加固 一、项目和任务描述&#xff1a; 假定你是某企业的网络安全工程师&#xff0c;对于企业的服务器系统&#xff0c;根据任务要求确保各服务正常运行&#xff0c;并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多…

Windows通过注册表修改socket缓冲区大小的方法

在 Windows 通过修改注册表来更改 UDP 缓冲区的大小&#xff0c;按照以下步骤进行操作&#xff1a; 打开注册表编辑器&#xff1a;按下 Win R 键&#xff0c;然后输入 "regedit" 并点击 "确定"。 导航到以下路径&#xff1a;HKEY_LOCAL_MACHINE\System\C…

线程同步之:QMutex\QMutexLocker

1、基于互斥量的线程同步类QMutex 2、lock() 与 unlock()必须配对使用。 2.1 lock() unlock() 2.2 tryLock() unlock() 3、QMutexLocker()是另一个简化了互斥量处理的类。在QMutexLocker实例变量的“生命周期”内的代码段 得到保护。 QMutexLocker的构造函数接受要给互斥量…