etcd储存安装

目录

etcd介绍:

etcd工作原理

选举

复制日志

安全性

etcd工作场景

服务发现

etcd基本术语

etcd安装(centos)

设置:etcd后台运行


etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件

etcd介绍:

etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。具有以下特点:

  • 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单用curl

curl www.baidu.com
  • 键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中

  • 监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应

  • 安全:支持 SSL 证书验证

  • 快速:根据官方提供的 benchmark 数据,单实例支持每秒 2k+ 读操作

  • 可靠:采用 raft 算法,实现分布式系统数据的可用性和一致性

etcd 采用 Go 语言编写,它具有出色的跨平台支持,很小的二进制文件和强大的社区。 etcd 机器之间的通信通过 Raft 算法处理。

etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的 leader 选举,以应对机器的故障,即使是在 leader 节点发生故障时。

从简单的 Web 应用程序到 Kubernetes 集群,任何复杂的应用程序都可以从 etcd 中读取数据或将数据写入 etcd。

etcd工作原理

etcd集群本身是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过Raft协议保证每个节点维护的数据是一致的,在ETCD集群中任意时刻至多存在一个有效的主节点,由主节点处理所有来自客户端写操作,通过Raft协议保证写操作对状态机的改动会可靠的同步到其他节点,Raft协议如下图所示:

Raft协议主要分为三个部分:选举,复制日志,安全性

选举

Raft协议是用于维护一组服务节点数据一致性的协议。这一组服务节点构成一个集群,并且有一个主节点来对外提供服务。当集群初始化,或者主节点挂掉后,面临一个选举问题。集群中每个节点,任意时刻处于Leader、Follower、Candidate这三个角色之一,选举特点如下:

  • 当集群初始化时候,每个节点都是Follower角色。

  • 集群中存在至多1个有效的主节点,通过心跳与其他节点同步数据;

  • 当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选举投票。

    • 当收到包括自己在内超过半数节点赞成后,选举成功

    • 当收到票数不足半数选举失败,或者选举超时

    • 若本轮未选出主节点,将进行下一轮选举(出现这种情况,是由于多个节点同时选举,所有节点均为获得过半选票)

  • Candidate节点收到来自主节点的信息后,会立即终止选举过程,进入Follower角色

为了避免陷入选举失败循环,每个节点未收到心跳发起选举的时间是一定范围内的随机值,这样能够避免2个节点同时发起选举。

复制日志

日志复制是指主节点将每次操作形成日志条目,并持久化到本地磁盘,然后通过网络IO发送给其他节点。其他节点根据日志的逻辑时钟(TERM)和日志编号(INDEX)来判断是否将该日志记录持久化到本地当主节点收到包括自己在内超过半数节点成功返回,那么认为该日志是可提交的(committed),并将日志输入到状态机,将结果返回给客户端。

这里需要注意的是,每次选举都会形成一个唯一的TERM编号,相当于逻辑时钟,每一条日志都有全局唯一的编号。

主节点通过网络IO向其他节点追加日志。若某节点收到日志追加的消息,首先判断该日志的TERM是否过期,以及该日志条目的INDEX是否比当前以及提交的日志的INDEX跟早。若已过期,或者比提交的日志更早,那么就拒绝追加,并返回该节点当前的已提交的日志的编号。否则将日志追加,并返回成功。

当主节点收到其他节点关于日志追加的回复后,若发现有拒绝,则根据该节点返回的已提交日志编号,发生其编号下一条日志。

主节点向其他节点同步日志,还作了拥塞控制。主节点发现日志复制的目标节点拒绝了某次日志追加消息,将进入日志探测阶段,一条一条发送日志,直到目标节点接受日志,然后进入快速复制阶段,可进行批量日志追加。

按照日志复制的逻辑,我们可以看到,集群中慢节点不影响整个集群的性能。另外一个特点是,数据只从主节点复制到Follower节点,这样大大简化了逻辑流程。Raft日志复制路程如下图所示:

安全性

选举复制日志并不能保证节点间数据一致。当一个某个节点挂掉了,一段时间后再次重启,并刚好当选为主节点。而在其挂掉这段时间内,集群若有超过半数节点存活,集群会正常工作,那么会有日志提交,这些提交的日志无法传递给挂掉的节点。当挂掉的节点再次当选举节点,它将缺失部分已提交的日志。在这样场景下,按Raft协议,它将自己日志复制给其他节点,会将集群已经提交的日志给覆盖掉,这显然是不可接受的,对于出现这种问题解决办法:

  • 其他协议解决这个问题的办法是,新当选的主节点会询问其他节点,和自己数据对比,确定出集群已提交数据,然后将缺失的数据同步过来。这个方案有明显缺陷,增加了集群恢复服务的时间(集群在选举阶段不可服务),并且增加了协议的复杂度。

  • Raft解决的办法是,在选举逻辑中,对能够成为主节点加以限制,确保选出的节点已定包含了集群已经提交的所有日志。如果新选出的主节点已经包含了集群所有提交的日志,那就不需要从和其他节点比对数据了,简化了流程,缩短了集群恢复服务的时间。

为什么只要仍然有超过半数节点存活,一定能够选出包含所有日志数据的节点作为主节点呢?因为已经提交的日志必然被集群中超过半数节点持久化,显然前一个主节点提交的最后一条日志也被集群中大部分节点持久化。当主节点挂掉后,集群中仍有大部分节点存活,那这存活的节点中一定存在一个节点包含了已经提交的日志了,因此要求etcd集群节点数量为奇数(3,5,7,9……)

etcd工作场景

服务发现

ETCD服务发现示意图如下图所示:

服务发现是分布式系统中最常见的需要解决的问题之一,即在同一个分布式集群中的进程或服务,客户端通过名字就可以查找和连接服务端。要解决服务发现的问题,需要有下面三点:

  • 一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。

  • 一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。

  • 一种查找和连接服务的机制。通过在etcd指定的主题快速找到服务地址。

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。

lndex:数据项编号。Raft中通过Term和Index来定位数据。

etcd安装(centos)

上传etcd解压安装包(网络下载太慢了)

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

 

etcd:服务

etcdctl:操作命令

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

cp etcd etcdctl /usr/local/bin

查看etcd版本

etcd --version

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

运行:

输出内容

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

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

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

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

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

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

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

设置:etcd后台运行

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

mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/
  • 创建etcd配置文件

vim /etc/etcd/etcd.conf
  • 创建systemd配置文件

vim /etc/systemd/system/etcd.service

service内容

[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
  • 启动/停止/查看etcd服务

systemctl daemon-reload 刷新服务
systemctl enable etcd 设置开机自启
systemctl start etcd 启动
systemctl status etcd 查看状态

编辑配置文件

查看etcd状态 默认关闭 systemctl status etcd

启动etcd systemctl start etcd

查看etcd指令内容 etcdctl -h

put 放

etcdctl put name 内容

get 拿

etcdctl get name

del 删除数据

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

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

etcdctl watch key1
 

👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌🎆🎇🧨

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

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

相关文章

单片机大小端模式

单片机大小端模式 参考链接 单片机干货-什么是大小端_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ju4y1M7Tx/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年1月2日

C语言——内存函数【memcpy,memmove,memset,memcmp】

📝前言: 在之前的文章C语言——字符函数和字符串函数(一)中我们学习过strcpy和strcat等用来实现字符串赋值和追加的函数,那么除了字符内容,其他的数据(例如整型)能否被复制或者移动呢…

IDEA2023 最新版详细图文安装教程(Java环境搭建+IDEA安装+运行测试+汉化+背景图设置)

IDEA2023 最新版详细图文安装教程 名人说:工欲善其事,必先利其器。——《论语》 作者:Code_流苏(CSDN) o(‐^▽^‐)o很高兴你打开了这篇博客,跟着教程去一步步尝试安装吧。 目录 IDEA2023 最新版详细图文安…

Linux第15步_安装FTP客户端

安装完FTP服务器后,还需要安装FTP客户端,才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中,找到“FileZilla_3.51.0_win64-setup.exe”,双击它,就可以安装。 2、点击“I …

吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版

Guitar Pro 8 Mac是一款吉他编曲学习软件,用于吉他、贝和其他弦乐器的制谱和演奏,这是一个多轨编辑器,具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱,并…

浅谈云可观测性的关键组件及重要性

在云计算时代,企业和开发团队不仅需要关注应用程序的功能性,还需要关心系统在生产环境中的性能、可用性和可靠性。云可观测性成为一项关键的技术实践,它涵盖了日志、指标、追踪等多个方面,为系统监控和故障诊断提供了全方位的支持…

二手买卖、废品回收小程序 在app.json中声明permission scope.userLocation字段 教程说明

处理二手买卖、废品回收小程序 在app.json中声明permission scope.userLocation字段 教程说明 sitemapLocation 指明 sitemap.json 的位置;默认为 ‘sitemap.json’ 即在 app.json 同级目录下名字的 sitemap.json 文件 找到app.json这个文件 把这段代码加进去&…

分解质因数算法总结

知识概览 n中最多只包含一个大于的质因子。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构,给出相应代码模板,并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/869/ 题解 分解质因数可以用试除法解决&…

Zoho SalesIQ:构建客户服务知识库的实用工具与指南

客服人员每天都有很多事情要做,包括在线聊天、音频通话、屏幕共享和发送电子邮件。为什么要将搜索常用信息添加到他们列表中呢?因为客户在遇到问题的同时想快速解决问题。所以,我们要使用Zoho SalesIQ客服系统构建客户服务知识库。 一、什么…

根据MySql的表名,自动生成实体类,模仿ORM框架

ORM框架可以根据数据库的表自动生成实体类,以及相应CRUD操作 本文是一个自动生成实体类的工具,用于生成Mysql表对应的实体类。 新建Winform窗体应用程序AutoGenerateForm,框架(.net framework 4.5), 添加对System.Configuration的…

【经验】VSCode连接远程服务器(可以使用git管理、方便查看和编辑Linux源码)

1、查看OpenSSH Windows10通常自带OpenSSH不需要安装。 Windows10下检查是否已经安装OpenSSH的方法: 1)按下快捷键Win + X,选择Windows PoweShell(管理员) 2)输入以下指令: Get-WindowsCapability -Online | ? Name -like ‘OpenSSH*’ 3)如果电脑未安装OpenSSH,…

RFID标签在汽车监管方面的应用与实施方案

RFID技术在汽车工业领域得到了广泛应用,主要体现在汽车资质证书远程监管系统的普及化,系统包括OBD接口监视器、车证监管箱、超高频读写设备、应用系统软件以及大数据采集与处理等组成部分。 在汽车物流监管方面,系统利用OBD接口监控车辆并实时…

JavaWeb 期末考--复盘

Javaweb 期末复习题目 1 单选 2 多选 3 问答与分析 4 程序填空 5 程序设计(该部分无) 需要word版资料详见文章末尾,免费自提 0、学期知识点回顾 一、注释和注解 1、Java的三种注释:单行、多行和文档注释。 2、常用…

深入理解神经网络训练与反向传播

目录 前言1 损失函数1.1 交叉熵(Cross Entropy):1.2 均方差(Mean Squared Error): 2 梯度下降与学习率2.1 梯度下降2.2 学习率 3 正向传播与反向传播3.1 正向传播3.2 反向传播 4 链式法则和计算图4.1 链式法…

万界星空科技云MES,助力客户快速构建数字工厂

一、MES发展趋势 1、定制化趋势 工业2.0、3.0的技术已较为成熟,部分制造业水平较为发达的国家已经率先进入以网络化、智能化为代表的工业4.0发展阶段,MES作为制造业规划层随着物联网等持续发展,为适应定制化时代,整体技术模块化、服务化将重…

RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

先决条件# Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客CLI 工具Ingress Controller(仅适用于托管 Kubernetes) 创建集群k8s [rootnginx locale]# cat rancher-cluster.yml nodes:- …

C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数

一、strcpy的使用和模拟实现 &#xff08;一&#xff09;strcpy使用 //strcpy的使用 #include <stdio.h>int main() {char arr1[] "abcdef";char arr2[10] "qwertt";char arr3[10] "okl";strcpy(arr2, arr1);printf("arr2 %s\n&…

数据结构和算法-插入排序(算法效率 折半优化 顺序表与链表插入排序 代码实现)

文章目录 插入排序算法实现算法效率分析优化-折半插入排序代码实现对链表进行插入排序小结 插入排序 首先49当作第一个已经排好序得元素&#xff0c;将第二个元素与前面得元素对比&#xff0c;发现小于49&#xff0c;于是49移动位置 此时将65与之前元素对比&#xff0c;发现其…

玩转Python:用Python处理文档,5个必备的库,特别实用,附代码

在Python中&#xff0c;有几个流行的库用于处理文档&#xff0c;包括解析、生成和操作文档内容。以下是一些常用的库及其简介和简单的代码示例&#xff1a; PyPDF2 - 用于处理PDF文件。 简介&#xff1a;PyPDF2是一个纯Python库&#xff0c;用于分割、合并、转换和提取PDF文件中…

C#,入门教程(09)——运算符的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998 一、算术运算符号 算术运算符号包括&#xff1a;四则运算 加 , 减-, 乘*, 除/与取模%。 // 加法&#xff0c;运算 int va 1 …