【ETCD】简介安装常用操作---图文并茂详细讲解

目录

一 简介

1.1 etcd是什么

1.2. 特点

1.3. 使用场景

1.4 关键字

1.5 工作原理

二 安装

2.1 etcd安装前介绍

2.2 安装

2.3 启动

2.4 创建一个etcd服务

三 常用操作


一 简介

1.1 etcd是什么

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

官网上的一段描述:

A distributed, reliable key-value store for the most critical data of a distributed system

etcd是一个分布式,键值对存储系统,用于分布式的关键数据的存储。

1.2. 特点

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

  • 键值对存储

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

1.3. 使用场景

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

1.4 关键字

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

1.5 工作原理

第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表示存储的具体日志内容

二 安装

2.1 etcd安装前介绍

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

2.2 安装

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

创建一个存储etcd的文件目录并且进入该目录中

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

 2)下载

下载的etcd的话可能有点慢,小编这就已经下载好了上传即可

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

3)解压文件到当前目录

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

4)切换至etcd根目录中,运行查看命令ls,里面会有一些文档和2个二进制文件etcd和etcdctl

etcd是server端,etcdctl是客户端

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

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

cp etcd etcdctl /usr/local/bin

6)查看etcd版本

etcd --version

7)设置etcdctl版本(v2/v3)

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

vi /etc/profile

# 按键盘i键,最后一行指定etcdctl命令的版本为v3
export ETCDCTL_API=3

环境变量配置示意图:

按ESC,输入:wq保存并退出

# 刷新环境变量
source /etc/profile
#查看当前etcdctl的版本信息
#v3查看版本号
etcdctl version
# 更多命令帮助可以查询
etcdctl --help  

2.3 启动

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

etcd

输入后如果出现下图样子证明etcd服务就没问题 

 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

2.4 创建一个etcd服务

1)建立etcd相关目录(即数据文件和配置文件的保存位置)
/etc目录是整个Linux系统的中心,其中包含所有系统管理和维护方面的配置文件,所以etcd的配置也放在这里

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

2)创建etcd.conf配置文件并编辑

vim /etc/etcd/etcd.conf

etcd.conf内容:

# 节点名称

ETCD_NAME="etcd0"

# 指定数据文件存放位置

ETCD_DATA_DIR="/var/lib/etcd/"

3)创建systemd配置文件并编辑

vim /etc/systemd/system/etcd.service

systemd内容:

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

## 对于那些严格要求 必须存在真实可用的网络连接的单元, 

## 应该在其单元文件中包含 Wants=network-online.target 

## 与 After=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服务

## 1.重新加载systemd服务
systemctl daemon-reload

## 2.设置开机自启动
systemctl enable etcd 


## 3.查看etcd运行状态
systemctl status etcd


## 4.启动etcd
systemctl start etcd

借鉴,可不操作

## 5.停止服务
systemctl stop etcd

## 6.重启etcd
systemctl restart etcd

三 常用操作

1) 如何获取帮助

etcdctl -h

2)put

etcdctl put /testdir/testkey "Hello world"

前面说了,etcd是一种分布式键值对关系,如上命令进行解释

etcdctl: 这是 etcd 的命令行工具,用于与 etcd 集群进行交互。通过 etcdctl,用户可以执行各种操作,如设置键值对、获取键值对、监听键的变化等。

put: 这是 etcdctl 的一个子命令,用于在 etcd 中创建或更新一个键值对。

/testdir/testkey: 这是键(key)的部分。在 etcd 中,键是唯一的,并且可以使用斜杠(/)来创建层次结构或目录。在这个例子中,testdir 可以被看作是一个目录,而 testkey 是该目录下的一个键。

"Hello world": 这是值(value)的部分。在这个例子中,与键 /testdir/testkey 关联的值是字符串 "Hello world"。

3)get  (获取键与值)

etcdctl get /testdir/testkey

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

4)del   (删除清空)

# 清空数据
etcdctl del / --prefix

#删除所有/test前缀的节点
etcdctl del /test --prefix

5)watch  (监听)

#1. 增加一个key,值为hello(客户端窗口1)
etcdctl put key1 "hello"

#2. 打开一个新的客户端窗口2,监听key1的变化
etcdctl watch key1

#3. 回到窗口1,向key1 中删除原有的值put新值为hello work
etcdctl put key1 "hello work"

# 4. 此时可以在窗口2中看到监听输出


# 查看版本信息
curl http://127.0.0.1:2379/version

 如下的动态图,当我开了两个窗口,另一个窗口监听到了另一个窗口的键与值

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

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

相关文章

git 如何将多个提交点合并为一个提交点 commit

文章目录 核心命令详细使用模式总结示例 核心命令 git merge branch2 是将分支branch2的提交点合并到本地当前分支。 而在执行这条命令的时候,加一个选项--squash就表示在合并的时候将多个提交点合并为一个提交点。 git merge --squash branch2 先看squash单词的意…

探索c++——了解c++的魅力

前言:c是一门既面向对象又面向过程的语言。 不同于java纯粹的面向对象和c纯粹的面向过程。 造成c该特性的原因是c是由本贾尼大佬在c的基础上增添语法创建出来的一门新的语言。 它既兼容了c, 身具面向过程的特性。 又有本身的面向对象的特性。 面向对象和…

SpringBoot集成ElasticSearch(ES)

ElasticSearch环境搭建 采用docker-compose搭建,具体配置如下: version: 3# 网桥es -> 方便相互通讯 networks:es:services:elasticsearch:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原镜像elasticsearch:7.…

Unity 整体界面淡入淡出效果

在Unity中,如果我们要实现控制多个组件同时淡出,同时淡入的效果,可以使用DOTween插件实现。 如图,一个页面中带有背景,一张图片,一个文本,一个滑动条。 要实现以上界面的整体淡入淡出&#xff…

机器学习-启航

文章目录 原理分析机器学习的两种典型任务机器学习分类总结数据机器学习分类解读简单复杂 原理分析 马克思主义哲学-规律篇 规律客观存在,万事万物皆有规律。 机器学习则是多维角度拆解分析复杂事实数据,发现复杂事实背后的规律,然后将规律用…

C#,回文分割问题(Palindrome Partitioning Problem)算法与源代码

1 回文串 “回文串”是一个正读和反读都一样的字符串,初始化标志flagtrue,比如“level”或者“noon”等等就是回文串。 2 回文分割问题 给定一个字符串,如果该字符串的每个子字符串都是回文的,那么该字符串的分区就是回文分区。…

VS code下载与使用方法(包含远程调试)

Visual Studio Code(简称 VSCode)是由微软开发的一款免费、开源、跨平台的现代化轻量级代码编辑器。它具有丰富的功能和强大的扩展性,适用于多种编程语言和开发环境。以下是 VSCode 的一些主要特点和功能: 跨平台支持: 可在 Windows、macOS 和 Linux 等多种操作系…

基于ACM32 MCU的两轮车充电桩方案,打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及,越来越多的人选择了电动车作为代步工具,而两轮电动车的出行半径较短,需要频繁充电,因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…

Flink:Temporal Table 的两种实现方式 Temporal Table DDL 和 Temporal Table Function

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

近地面无人机植被定量遥感与生理参数反演技术应用

李老师(副教授),长期从事无人机近地面植被遥感,植被生理参数,多角度遥感,RGB/多光谱/高光谱数据处理,LiDAR点云处理等领域研究工作,具有资深的技术底蕴和专业背景。 专题一、近十年…

java 获取项目内的资源/配置文件

【getResourceAsStream】是java中用于获取项目内资源的常用方法,能够返回一个数据流,从而允许我们读取指定路径下的资源文件。这个方法可以用来读取各种类型的资源文件,包括但不限于文本文件、图像文件、配置文件等。 要使用getResourceAsStr…

InfluxDB SHOW SERIES语句按照什么顺序返回?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言样例SHOW SERIES比较原理结论结束语 引言 influxdb的计算引擎为了做到自底而上的…

【Web安全靶场】upload-labs-master 1-21

upload-labs-master 其他靶场见专栏… 文章目录 upload-labs-masterPass-01-js前端校验Pass-02-MIME校验Pass-03-其他后缀绕过黑名单Pass-04-.hatccess绕过Pass-05-点空格点代码逻辑绕过Pass-06-大小写绕过Pass-07-空格绕过Pass-08-点号绕过Pass-09-::$DATA绕过Pass-10-点空格…

三、代码结构(不定时更新)

一、装饰器 Entry:标记当前组件是入口组件 Component:标记自定义组件 State:标记该变量是状态变量,值变化时会触发UI刷新 二、自定义组件 // 可复用的UI单元 struct Index {} 三、UI描述 // 其内部以声明式方式描述UI结构 bu…

fatal: unable to access ‘***‘: OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0解决方案

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文主要介绍在从 GitHub 上克隆 stable-diffusion-webui 项目时出现的 fatal: unable to access https://github.com/AUTOMATIC1111/stable-diffusion-webui.…

【STM32】HAL库 CubeMX教程---通用定时器 定时

STM32常用型号的TIM时钟频率 1. STM32F103系列: 所有 TIM 的时钟频率都是72MHz;F103C8不带基本定时器,F103RC及以上才带基本定时器。 2、STM32F407系列: TIM1、8、9、10、11的时钟频率是168MHz;其它TIM的时钟频率是…

【PHP】PHP通过串口与硬件通讯,向硬件设备发送数据并接收硬件返回的数据

一、前言 之前写过两篇PHP实现与硬件串口交互的文章,一篇是【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据(上)_php串口通信-CSDN博客,另一篇是【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数…

阿里云2核4G服务器支持人数并发测试,2核4G主机测评

阿里云2核4G服务器多少钱一年?2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

C++ LRU缓存

题目: //构建双向链表的节点结构(要有两个构造函数) struct Node{int key, val;Node* pre;Node* next;Node():key(0), val(0), pre(nullptr), next(nullptr) {}Node(int _key, int _val): key(_key), val(_val), pre(nullptr), next(nullpt…

基础小白快速入门web前端开发技术------>web概述

Web概述 我们在编程的学习中,随着学习的深入,我们会理解到WEB这个东西,那么 web究竟是个啥,到底该咋用? web,是网站的英文意思,又被称作“下一代Web3.0,互联网”,是在We…