etcd基本介绍

news/2024/7/12 1:01:12 标签: 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根目录,将etcdetcdctl二进制文件复制到/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.niftyadmin.cn/n/5306327.html

相关文章

java数据结构与算法刷题-----LeetCode198. 打家劫舍

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…

苹果Mac电脑PDF优化压缩推荐 Recompress中文 for Mac

Recompress采用了先进的压缩技术,能够智能地分析PDF文件并确定哪些内容可以进一步压缩以节省存储空间。中文界面:Recompress Mac版提供了符合国人浏览习惯的中文界面,使得用户在使用时更加方便。批量压缩:Recompress支持批量压缩P…

数据采集有哪些方法?HTTP代理起到什么作用?

在这个数字化的时代,数据就如同生活中不可或缺的元素,我们的行为、喜好、甚至是想法都被转化成了数字化的信息。那么,现代社会是如何进行数据的采集的呢?让我们一同来看看! 1. 网络浏览行为的追踪 在我们浏览互联网的…

Web安全防护

一、Web安全简介 二、Web攻击来源 1、客户端: 2、服务器: 3、通道: 三、Web应用基本组成部分 URL工作过程 HTTP/HTTPS HTTP有两类报文 HTTP请求报头 HTTP协议请求方法 状态码 状态码组成 三、Cookie概述 Cookie和Session的关系 …

【管理篇 / 恢复】❀ 08. 文件权限对macOS下用命令刷新固件的影响 ❀ FortiGate 防火墙

【简介】虽然上篇文章中成功的在macOS下刷新了固件,但是很多小伙伴在实际操作中碰到了无法成功的状况,我们来看看最常见的一种。 在/private/tftpboot目录拷贝另一个版本的固件文件,具体拷贝过程不再详述。 打开终端,输入命令 sud…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建一个TcpConnection实例 以及 接收客户端数据

#CSDN 年度征文|回顾 2023,赢专属铭牌等定制奖品# 一、主线程反应堆模型的事件添加和处理详解 >>服务器和客户端建立连接和通信流程: 基于多反应堆模型的服务器结构图,这主要是一个TcpServer,关于HttpServer,…

各类Java对象

相关概念的混淆 在某一时间段,人们对某种编程困境感到烦恼,不少人脑中产生了一种新开发方式的概念 一些代表人物提出了他们的意见,而同一时期可能又不少人对同一问题,用自己的不同语言提出不同概念 如果又官方组织维护概念&#x…

简易机器学习笔记(十)Windows下 PaddlePaddle配置CUDA加速环境

前言 大伙既然都来做这个了,那配个CUDA环境肯定是必不可少的了吧(笑) 最前面的最前面, 流程 确定当前设备支持的CUDA版本安装CUDA Toolkit 和 GPU版的Paddlepaddle下载cuDNN Archive手动放置配套的cuDNN到指定文件夹测试 1.确…