etcd 使用指南

什么是 etcd ?

etcd 是一种高度一致的分布式键值(key-value)存储,主要用途是共享配置和服务发现。

安装 etcd

方式一

sudo apt install etcd

方式二

# 下载文件
$ wget https://github.com/etcd-io/etcd/releases/download/v3.5.3/etcd-v3.5.3-linux-amd64.tar.gz
# 解压缩文件
$ tar -zxvf etcd-v3.5.3-linux-amd64.tar.gz
# 移动文件
$ mv etcd-v3.5.3-linux-amd64 $HOME/snap/etcd
# 打开环境变量文件
$ nano ~/.zshrc
  • 在环境变量文件 ~/.zshrc 中添加下面内容
###
# etcd
###
export PATH="$PATH:$HOME/snap/etcd"
  • 让环境变量生效
$ source ~/.zshrc

验证是否安装成功

$ etcd --version
etcd Version: 3.5.3
Git SHA: 0452feec7
Go Version: go1.16.15
Go OS/Arch: linux/amd64

与 etcd 交互

写入键值

$ etcdctl put db 31              
OK

读取键值

$ etcdctl get db   
db
31

# 只获取 db 键的值
$ etcdctl get db --print-value-only  
31

# 添加 3 个键值
$ etcdctl put db1 10
$ etcdctl put db2 20
$ etcdctl put db3 30

# 获取从 db1 到 db3 键的值,但不包括 db3
$ etcdctl get db1 db3 --print-value-only  
10
20

# 获取前缀为 db 键的值
$ etcdctl get db --prefix --print-value-only
31
10
20
30

# 获取前缀为 db 键的前 2 个值
$ etcdctl get db --prefix --limit=2 --print-value-only
31
10

删除键值

# 删除 db 键
$ etcdctl del db   
1

# 删除从 db1 到 db2 键,但不包括 db2
$ etcdctl del db1 db2
1

# 删除前缀为 db 的键
$ etcdctl del db --prefix
2

监视键值的变化

# 监视 db 键的变化
$ etcdctl watch db
# 在另一个终端中执行:$ etcdctl put db 31
PUT
db
33

# 监视从 db1 到 db3 键的变化,但不包括 db3
$ etcdctl watch db1 db3
# 在另一个终端中执行:$ etcdctl put db1 10
PUT
db1
10
# 在另一个终端中执行:$ etcdctl put db2 20
PUT
db2
20

# 监视前缀为 db 键的变化
$ etcdctl watch db --prefix
# 在另一个终端中执行:$ etcdctl put db1 10
PUT
db1
10
# 在另一个终端中执行:$ etcdctl put db2 20
PUT
db2
20

# 同时监视多个键
$ etcdctl watch -i
watch db1
watch db2
# 在另一个终端中执行:$ etcdctl put db1 10
PUT
db1
10
# 在另一个终端中执行:$ etcdctl put db2 20
PUT
db2
20

授予租约

当一个键被绑定到一个租约上时,它的生命周期与租约的生命周期绑定

# 授予租约,租约的存活时间为 60 秒
$ etcdctl lease grant 60
lease 694d804a204aea35 granted with TTL(60s)

# 绑定租约,将 db 键和租约 694d804a204aea35 进行绑定
$ etcdctl put db 31 --lease=694d804a204aea35                
OK

# 获取 db 键的值
$ etcdctl get db                            
db
31

# 等待 60 秒

# 在次获取 db 键的值
$ etcdctl get db 
# 返回的值为空

撤销租约

# 授予租约
$ etcdctl lease grant 60                    
lease 694d804a204aea3b granted with TTL(60s)

# 绑定租约
$ etcdctl put db 31 --lease=694d804a204aea3b                
OK

# 撤销租约
$ etcdctl lease revoke 694d804a204aea3b
lease 694d804a204aea3b revoked

# 获取 db 键的值
$ etcdctl get db 
# 返回的值为空

维持租约

# 授予租约
$ etcdctl lease grant 60                    
lease 694d804a204aea42 granted with TTL(60s)

# 绑定租约
$ etcdctl put db 31 --lease=694d804a204aea42                
OK

# 维持租约,自动续租并维持 60 秒
$ etcdctl lease keep-alive 694d804a204aea42
lease 694d804a204aea42 keepalived with TTL(60)
lease 694d804a204aea42 keepalived with TTL(60)
lease 694d804a204aea42 keepalived with TTL(60)

获取租约信息

# 授予租约
$ etcdctl lease grant 500                   
lease 694d804a204aea45 granted with TTL(500s)

# 绑定租约,将 db1 键和 694d804a204aea45 租约绑定
$ etcdctl put db1 10 --lease=694d804a204aea45
OK

# 绑定租约,将 db2 键和 694d804a204aea45 租约绑定
$ etcdctl put db2 20 --lease=694d804a204aea45
OK

# 获取租约信息
$ etcdctl lease timetolive 694d804a204aea45
lease 694d804a204aea45 granted with TTL(500s), remaining(399s)

# 获取租约信息和租约绑定的键的信息
$ etcdctl lease timetolive 694d804a204aea45 --keys
lease 694d804a204aea45 granted with TTL(500s), remaining(396s), attached keys([db1 db2])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 etcd是一个golang编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值(key-val...
    StormZhu阅读 11,997评论 1 10
  • 前言 你知道etcd吗?随着k8s的使用广泛之后,etcd被非常多的人所知道,同时又因为它可靠的分布式特性被很多人...
    LinkinStar阅读 911评论 0 3
  • ETCD 的理解和简单使用 1. etcd介绍 etcd是使用Go语言开发的一个开源、高可用的分布式key-val...
    董小贱阅读 2,047评论 0 1
  • 下载 https://github.com/coreos/etcd/releases/下载 linux-amd64...
    jerryyyq阅读 1,182评论 0 0
  • 因为工作需求,公司需要使用ETCD来做gRPC服务的负载均衡,以及集群管理,所以对etcd做了一些研究,希望能给大...
    Jay_Guo阅读 46,748评论 8 47