etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)
1. etcd 客戶端
etcdctl 是一個(gè)命令行客戶端,便于我們進(jìn)行服務(wù)測試或手動修改數(shù)據(jù)庫內(nèi)容,etcdctl 在兩個(gè)不同的 etcd 版本(v2 和 v3)下的功能和使用方式也完全不同。
一般通過如下方式來指定使用 etcd 的版本:
export ETCDCTL_API=2
export ETCDCTL_API=3
在前面我們已經(jīng)在 /tmp/etcd-download-test/ 安裝了 etcd,那么就可以將當(dāng)前的安裝路徑加到環(huán)境變量 PATH 中,如下:
vi ~/.bashrc
在最后加入
export PATH=$PATH:/tmp/etcd-download-test/
然后執(zhí)行以下命令讓其生效:
source ~/.bashrc
此時(shí)就可以直接輸入 etcdctl 命令進(jìn)行操作了,如下:
wohu@ubuntu-dev:~/tools$ etcdctl -h
NAME:etcdctl - A simple command line client for etcd3.USAGE:etcdctl [flags]VERSION:3.4.15API VERSION:3.4
支持的 COMMANDS 見下圖:
支持的 OPTIONS 見下圖:
etcdctl 支持的命令大體上分為數(shù)據(jù)庫操作和非數(shù)據(jù)庫操作兩類。
- 數(shù)據(jù)庫操作基本圍繞著對鍵值和目錄的 CRUD 操作(即增刪改查);
- 非數(shù)據(jù)庫操作如用戶、角色、授權(quán)、認(rèn)證相關(guān);
etcd 在鍵的組織上采用了類似文件系統(tǒng)中目錄的概念,即層次化的空間結(jié)構(gòu),我們指定的鍵可以作為鍵名,實(shí)際上,此時(shí)鍵值對放于根目錄 / 下面。
我們也可以為鍵的存儲指定目錄結(jié)構(gòu),如 /cluster/node/key,如果不存在 /cluster/node 目錄,則 etcd Server 將會創(chuàng)建相應(yīng)的目錄結(jié)構(gòu)。
2 鍵值對操作
鍵操作包括最常用的增刪改查操作,包括 PUT、GET、DELETE 等命令。
PUT設(shè)置或者更新某個(gè)鍵的值
wohu@ubuntu-dev:~/tools$ etcdctl put /home/wohu/key1 "hello world1"
OK
wohu@ubuntu-dev:~/tools$ etcdctl put /home/wohu/key2 "hello world2"
OK
wohu@ubuntu-dev:~/tools$ etcdctl put /home/wohu/key3 "hello world3"
OK
wohu@ubuntu-dev:~/tools$
GET獲取指定鍵的值
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/key3
/home/wohu/key3
hello world3
wohu@ubuntu-dev:~/tools$
加上 --print-value-only 可以讀取對應(yīng)的值。
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/key3 --print-value-only
hello world3
wohu@ubuntu-dev:~/tools$
GET 通過選項(xiàng) --hex 獲取指定鍵的對應(yīng)值的 16 進(jìn)制格式
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/key3 --hex
\x2f\x68\x6f\x6d\x65\x2f\x77\x6f\x68\x75\x2f\x6b\x65\x79\x33
\x68\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x33
wohu@ubuntu-dev:~/tools$
十六進(jìn)制在 etcd 中有多處使用,如租約 ID 也是十六進(jìn)制。
GET指定鍵范圍內(nèi)的值
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/key1 /home/wohu/key3
/home/wohu/key1
hello world1
/home/wohu/key2
hello world2
wohu@ubuntu-dev:~/tools$
上述操作獲取了大于等于 /home/wohu/key1,且小于 /home/wohu/key3 的鍵值對。key3 不在范圍之內(nèi),因?yàn)榉秶前腴_區(qū)間 [key1, key3),不包含 key3 。
- 通過
--prefix獲取指定鍵前綴的所有鍵值對
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/ --prefix
/home/wohu/key1
hello world1
/home/wohu/key2
hello world2
/home/wohu/key3
hello world3
wohu@ubuntu-dev:~/tools$
這樣就能獲取所有以 /home/wohu/ 開頭的鍵值對,當(dāng)前綴獲取的結(jié)果過多時(shí),還可以通過 --limit=N 限制獲取的數(shù)量,其中 N 為指定的要返回的個(gè)數(shù)。
wohu@ubuntu-dev:~/tools$ etcdctl get /home/wohu/ --prefix --limit=2
/home/wohu/key1
hello world1
/home/wohu/key2
hello world2
wohu@ubuntu-dev:~/tools$
DELETE刪除一個(gè)鍵或者特定范圍的鍵
- 刪除單個(gè)鍵
wohu@ubuntu:~$ etcdctl get /home/wohu/key4
/home/wohu/key4
hello world4
wohu@ubuntu:~$ etcdctl del /home/wohu/key4
1
wohu@ubuntu:~$ etcdctl get /home/wohu/key4
wohu@ubuntu:~$
- 刪除某一范圍的鍵,刪除鍵區(qū)間為 [key1 key3),返回已經(jīng)刪除鍵的個(gè)數(shù)
wohu@ubuntu:~$ etcdctl del /home/wohu/key1 /home/wohu/key3
2
wohu@ubuntu:~$
--prev-kv刪除鍵并返回該鍵的值
wohu@ubuntu:~$ etcdctl del /home/wohu/key1 --prev-kv
1
/home/wohu/key1
hello world1
wohu@ubuntu:~$ etcdctl get /home/wohu/key1
wohu@ubuntu:~$
--prefix刪除指定前綴的鍵
wohu@ubuntu:~$ etcdctl get /home/wohu/key --prefix
/home/wohu/key1
hello world1
/home/wohu/key2
hello world2
/home/wohu/key3
hello world3
wohu@ubuntu:~$ etcdctl del /home/wohu/key --prefix
3
wohu@ubuntu:~$ etcdctl get /home/wohu/key --prefix
wohu@ubuntu:~$
3 watch 對象
watch 監(jiān)測一個(gè)鍵值的變化,一旦鍵值發(fā)生更新,就會輸出最新的值并退出。
其中 watch 終端和 put 分別在不同的終端。
-
監(jiān)聽單個(gè)鍵
-
監(jiān)聽某個(gè)范圍的鍵
etcd 保存修訂版本以便應(yīng)用客戶端可以讀取鍵的歷史版本。但是,為了避免積累無限數(shù)量的歷史數(shù)據(jù),需要對歷史的修訂版本進(jìn)行壓縮 compact 。經(jīng)過壓縮,etcd 刪除歷史修訂版本,釋放存儲空間,且在壓縮修訂版本之前的數(shù)據(jù)將不可訪問。
4 lease 對象
lease 意為租約,類似于 Redis 中的 TTL(Time To Live)。etcd 中的鍵值對可以綁定到租約上,實(shí)現(xiàn)存活周期控制。在實(shí)際應(yīng)用中,常用來實(shí)現(xiàn)服務(wù)的心跳,即服務(wù)在啟動時(shí)獲取租約,將租約與服務(wù)地址綁定,并寫入 etcd 服務(wù)器,為了保持心跳狀態(tài),服務(wù)會定時(shí)刷新租約。
4.1 授予租約
應(yīng)用客戶端可以為 etcd 集群里面的鍵授予租約。當(dāng)鍵被附加到租約時(shí),它的存活時(shí)間被綁定到租約的存活時(shí)間,而租約的存活時(shí)間相應(yīng)的被 TTL 管理。在授予租約時(shí),每個(gè)租約的最小 TTL 值由應(yīng)用客戶端指定。
一旦租約的 TTL 到期,租約就會過期并且所有附帶的鍵都將被刪除。
創(chuàng)建一個(gè)租約,時(shí)間為 100s
wohu@ubuntu:~$ etcdctl lease grant 100
lease 694d78e3bc12d11a granted with TTL(100s)
將創(chuàng)建的租約綁定到鍵 /home/wohu/key1 上
wohu@ubuntu:~$ etcdctl put /home/wohu/key1 "hello" --lease=694d78e3bc12d11a
OK
查詢鍵,在租約有效期內(nèi),可以獲取到鍵值,租約到期后鍵值對被刪除。
wohu@ubuntu:~$ etcdctl get /home/wohu/key1
/home/wohu/key1
hello
wohu@ubuntu:~$ etcdctl get /home/wohu/key1
wohu@ubuntu:~$
4.2 撤銷租約
應(yīng)用通過租約 ID 可以撤銷租約。撤銷租約將刪除所有附帶的 key。
wohu@ubuntu:~$ etcdctl lease grant 100000
lease 694d78e3bc12d122 granted with TTL(100000s)
wohu@ubuntu:~$ etcdctl put /home/wohu/key1 "hello" --lease=694d78e3bc12d122
OK
wohu@ubuntu:~$ etcdctl lease revoke 694d78e3bc12d122
lease 694d78e3bc12d122 revoked
wohu@ubuntu:~$ etcdctl get /home/wohu/key1
4.3 刷新租期
應(yīng)用程序可以通過刷新其 TTL 保持租約存活,確保其不會過期。
wohu@ubuntu:~$ etcdctl lease grant 30
lease 694d78e3bc12d134 granted with TTL(30s)
wohu@ubuntu:~$ etcdctl lease keep-alive 694d78e3bc12d134
lease 694d78e3bc12d134 keepalived with TTL(30)
lease 694d78e3bc12d134 keepalived with TTL(30)
lease 694d78e3bc12d134 keepalived with TTL(30)
lease 694d78e3bc12d134 keepalived with TTL(30)
lease 694d78e3bc12d134 keepalived with TTL(30)
4.4 查詢租期
客戶端可以查詢租賃信息,檢查續(xù)訂或租賃的狀態(tài),是否存在或者是否已過期。應(yīng)用客戶端還可以查詢特定租約綁定的 key。
wohu@ubuntu:~$ etcdctl lease grant 300
lease 694d78e3bc12d137 granted with TTL(300s)
wohu@ubuntu:~$ etcdctl put /home/wohu/key1 "hello" --lease=694d78e3bc12d137
OK
wohu@ubuntu:~$ etcdctl lease timetolive 694d78e3bc12d137
lease 694d78e3bc12d137 granted with TTL(300s), remaining(271s)
wohu@ubuntu:~$ etcdctl lease timetolive 694d78e3bc12d137 --keys
lease 694d78e3bc12d137 granted with TTL(300s), remaining(261s), attached keys([/home/wohu/key1])
wohu@ubuntu:~$
總結(jié)
以上是生活随笔為你收集整理的etcd 笔记(03)— etcd 客户端使用(键值的增、删、改、查)、watch监测键、lease使用(创建租约、撤销租约、刷新租期、查询租期)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: etcd 笔记(02)— etcd 安装
- 下一篇: 2022-2028年中国氧化铟锡薄膜行业