什么是 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])
网友评论