etcd入门

文章目录

        • [1. 简介](#1. 简介)
        • [2. 关键术语](#2. 关键术语)
        • [3. 工作原理](#3. 工作原理)
        • [4. 安装etcd](#4. 安装etcd)
        • [5. etcd的基本使用](#5. etcd的基本使用)
          • [5.1 数据库操作](#5.1 数据库操作)
          • [5.2 非数据库操作](#5.2 非数据库操作)
1. 简介

https://etcd.io/
https://github.com/etcd-io/etcd

Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。Etcd内部采用raft协议作为一致性算法,Etcd基于Go语言实现。

etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。etcd集群是为高可用,持久性数据存储和检索而准备。

Etcd的主要应用场景:

  1. 服务发现:服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或者服务如何找到对方并建立连接。
  2. 消息发布于订阅
  3. 负载均衡
  4. 分布式通知与协调
  5. 分布式锁

Etcd的一致性对于正确安排和运行服务至关重要。

Kubernetes API服务器将集群状态持久化在etcd中,使用etcd的watch API监视集群,并发布关键的配置。

2. 关键术语

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

3. 工作原理

Etcd主要分为四个部分:

  • 第1部分是HTTP server: 用于处理用户发送的API请求,以及其它etcd节点的同步与心跳信息请求。
  • 第2部分是Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是Etcd对用户提供的大多数API功能的具体实现。
  • 第3部分是Raft: Raft强一致性算法的具体实现,是Etcd的核心。
  • 第4部分是WAL:Write Abead Log(预写式日志),是etcd的数据存储方式除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。 在WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照,Entry麦示存储具体日志内容。
  • 通常,一个用户的请求发送过来,会经由HTTP Server转发给Store,以进行具体的事务处理。如果涉及到节点修改,则交给Raft模块进行状态变更、日志记录; 然后,再同步给别的etcd节点,以确认数据提交;最后,进行数据提交,再次同步。
4. 安装etcd
  1. 下载发布版本,下载地址:https://github.com/etcd-io/etcd/releases
  1. 将文件解压到指定目录

其中etcd.exe时服务端,etcdctl.exe是客户端

  1. 将该目录配置到环境变量
  1. 查看etcd版本
  1. 启动etcd
bash 复制代码
etcd
5. etcd的基本使用

etcdctl是一个命令行客户端,可以对etcd服务进行测试或者手动修改数据库内容。另外,etcdctl还支持HTTP API。etcdctl支持的命令大体上可以分为数据库操作和非数据库操作两类。

5.1 数据库操作

数据库操作围绕对键值和目录的CRUD完整生命周期的管理。

Etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:testkey。

bash 复制代码
# 帮助命令
etcdctl -h

# put:指定某个键的值
etcdctl put /testdir/testkey "Hello World"

# get:获取指定键的值
etcdctl get /testdir/testkey

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

# 其他命令
update/rm/mk/mkdir/setdir/updatedir/rmdir/ls/
5.2 非数据库操作

非数据库操作包括:备份、监测、节点管理等

  1. backup 备份etcd的数据
  2. watch 监测一个键值的变化,一旦键值发生更新,就会输出最新的值并退出
bash 复制代码
# 在一个终端运行
etcdctl watch key1

# 在2个终端运行put/get/del
etcdctl put key1 "zzz"
etcdctl get key1 # 因为get操作不改变值,所有watch没反应
etcdctl del key1 
  1. member通过list、add、remove命令列出、添加和删除etcd实例节点到etcd集群中。
相关推荐
老邓计算机毕设2 小时前
SSM智慧社区家政服务系统80q7o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架
松涛和鸣3 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa3 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k3 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦4 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL4 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·4 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德5 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫5 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i5 小时前
完全卸载MariaDB
数据库·mariadb