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

目录

[一 简介](#一 简介)

[1.1 etcd是什么](#1.1 etcd是什么)

[1.2. 特点](#1.2. 特点)

[1.3. 使用场景](#1.3. 使用场景)

[1.4 关键字](#1.4 关键字)

[1.5 工作原理](#1.5 工作原理)

[二 安装](#二 安装)

[2.1 etcd安装前介绍](#2.1 etcd安装前介绍)

[2.2 安装](#2.2 安装)

[2.3 启动](#2.3 启动)

[2.4 创建一个etcd服务](#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

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

相关推荐
阿华的代码王国5 分钟前
MySQL ------- 索引(B树B+树)
数据库·mysql
Hello.Reader33 分钟前
StarRocks实时分析数据库的基础与应用
大数据·数据库
执键行天涯35 分钟前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
yanglamei19621 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
工作中的程序员1 小时前
ES 索引或索引模板
大数据·数据库·elasticsearch
严格格1 小时前
三范式,面试重点
数据库·面试·职场和发展
微刻时光1 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
单字叶2 小时前
MySQL数据库
数据库·mysql
mqiqe2 小时前
PostgreSQL 基础操作
数据库·postgresql·oracle
just-julie2 小时前
MySQL面试题——第一篇
数据库·mysql