etcd的初步使用

栏目: 后端 · 发布时间: 6年前

内容简介:可以通过下载源码自己编译,也可以下载编译好的二进制文件,这里选择编译好的。

简介

etcd的初步使用

etcd介绍.png

etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值(key-value)存储、配置共享和服务发现等功能。 etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。

etcd 基于 raft 协议,通过复制日志文件的方式来保证数据的强一致性。在 etcd 之前,常用的是基于 paxos 协议的 zookeeper

安装

可以通过下载源码自己编译,也可以下载编译好的二进制文件,这里选择编译好的。

下载页面: https://github.com/etcd-io/etcd/releases

选择合适的版本下载,实验机器系统是 centos7 ,这里选择 linux 的版本: https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz

步骤如下:

# 下载
wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz 
# 解压
tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64
etcd的初步使用

etcd目录结构.png

其中 etcd 就是服务端程序, etcdctl 是客户端程序。

启动服务端:

./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'
  • --listen-client-urls:监听的用于客户端通信的url,可以监听多个。
  • --advertise-client-urls:建议使用的客户端通信url。

可以看到,输出中有一行:

etcd的初步使用

warning.png

不建议监听任意地址的客户端,因为这样不够安全。这里只是为了测试方便才这么做。

客户端

etcdctl 是官方提供的客户端程序。

etcd的初步使用

etcdctl help.png

etcd 有两个版本的接口,v2和v3,且两个版本不兼容,v2已经停止了支持,v3性能更好。 etcdctl 默认使用v2版本,如果想使用v3版本,可通过环境变量 ETCDCTL_API=3 进行设置。

etcd的初步使用

使用v3版本.png

接下来都使用v3接口进行学习,主要进行单机测试。

常见命令

get put del

最常见的就是 putgetdel 命令。

# 放入一个 键值对
$ ./etcdctl get name
name
zyq
# 取出 name
$ ./etcdctl get name
name
zyq
# 删除 name
$ ./etcdctl del name
1
# 在获取name
$ ./etcdctl get name
# 什么都没拿到

etcdkey有序 存储的,本质上是字符串,可以模拟出目录的结构,例如存储了 /a/b/a/b/c/a/b/d 三个 key ,由于它们在存储中顺序排列的,通过定位到key= /a/b 并依次顺序向后扫描,就会遇到 /a/b/c/a/b/d 这两个孩子,从而实现父子目录关系。

所以一般都将 etcdkey 设计成目录结构。

etcdctlget 命令可以获取单个 key ,也可以获取以某个字符串为前缀的 key (可以模拟某个目录下的所有 key )。

etcd的初步使用

prefix.png

$ ./etcdctl put "/project/jobs/job1" "{...job1}"
OK
$ ./etcdctl put "/project/jobs/job2" "{...job2}"
OK
# 可以单独获取某个key
$ ./etcdctl get "/project/jobs/job1"
/project/jobs/job1
{...job1}

# 也可以获取某个目录下的所有key
# 但是直接获取某个目录 etcd是不认识的 因为它没有目录的概念
$ ./etcdctl get "/project/jobs/"
# 需要加上 --prefix命令
$ ./etcdctl get "/project/jobs/" --prefix
/project/jobs/job1
{...job1}
/project/jobs/job2
{...job2}

# 删除所有
$ ./etcdctl del "/project/jobs/" --prefix
2

watch

watch 命令用来监测 key 的变化,会建立长连接,一直监听。由于 etcd 采用 mvcc 多版本并发控制,etcd的 watch 可以从给定的 revision 进行检测。(这里不知道 etcdctl 用什么命令获取 revision ,所以不演示了)

新打开一个 shell 窗口使用 watch 命令

# 设置环境变量
$ export ETCDCTL_API=3
# 开始监听某个key


$ ./etcdctl watch "name"
# 。。。什么都不打印,在等待结果

# 当另一个窗口执行了 ./etcdctl put "name" "zyq" 之后
$ ./etcdctl watch "name"
PUT
name
zyq

# 当另一个窗口执行了 ./etcdctl del "name" 之后
$ ./etcdctl watch "name"
PUT
name
zyq
DELETE
name

可以看到, watch 命令可以观察到所有的操作事件(PUT和DEL)。

同样,可以使用 --prefix 命令指定观察的 key 的前缀。

租约

租约是一段时间,可以为 etcdkey 授予租约。当 key 被附加到租约时,它的生存时间被绑定到租约的生存时间,一旦租约的TTL到期,租约就过期并且所有附带的key都将被删除。

一个租约可以绑定不止一个 key

# 创建一个20s的租约
$ ./etcdctl lease grant 20
lease 694d673115905e37 granted with TTL(20s)

# 使用租约的 id 进行 put 操作
$ ./etcdctl put --lease=694d673115905e37 "name" "zyq"

# 20s后get发现 key被删除了
$ ./etcdctl get "name"
# 空应答

租约可以被删除

# 创建一个20s的租约
$ ./etcdctl lease grant 1000
lease 694d673115905e49 granted with TTL(1000s)

# 使用租约的 id 进行 put 操作
$ ./etcdctl put --lease=694d673115905e49 "name" "zyq"
OK
# 删除租约
$ ./etcdctl lease revoke 694d673115905e49
lease 694d673115905e49 revoked
# 发现key也被删除了
$ ./etcdctl get "name"
# 空应答

租约可以自动续租

# 创建一个20s的租约
$ ./etcdctl lease grant 20
lease 694d673115905e4f granted with TTL(20s)
# 自动续租
$ ./etcdctl lease keep-alive 694d673115905e4f
lease 694d673115905e4f keepalived with TTL(20)
lease 694d673115905e4f keepalived with TTL(20)

下步计划

使用 etcdctl 确实不太方便,下次学习使用 golangclientv3 api 进行操作。

参考

  1. etcd的github链接
  2. etcd v3命令和API
  3. 慕课网 Go 语言开发分布式任务调度 轻松搞定高性能Crontab

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新

创新

理查德·福斯特 / 王宇锋 / 中信出版社 / 2008-10 / 32.00元

《创新:进攻者的优势》内容简介:为什么一流企业突然间将它们的市场拱手让与新的竞争者?要避免这样的命运,需要无情地抛弃那些过去使它们成功的技能和产品,那么究竟哪些企业能够做到这一点呢?企业如果总是墨守成规、因循守旧,那么长期下去,必然无法以市场的速度及规模进行革新或创造价值。这样的企业会像得州仪器、施乐等市场领先者一样,被一些资源较少、技术较差、市场支配力较弱的竞争对手超越,而这些所谓进攻者的优势,......一起来看看 《创新》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具