etcd套路(三)命令操作演示

huxiaobai_001發表於2020-08-23

前邊我們已經講過了什麼是etcd以及安裝方式,這裡補充一下,我們配置了etcd的環境變數,執行etcd etcdctl命令很方便 當我們執行etcd命令的時候,你在哪裡執行的那麼就會在此目錄下生成一個default.etcd的資料庫資料夾裡面存放etcd的各種資料,這個得要注意哦,千萬別傻不愣登的就刪除了!

特別提醒:etcd命令還是比較多的 當然和redis來比少多了,這裡只是總結了很少一部分 命令列模式 像curl模式我沒寫 大家可以去www.orchome.com/620 這篇文章當中看到更多精彩的內容

接下來我們記錄一下etcd的命令的簡單操作,這也跟redis的學習是一個套路,你得先懂人家的命令啊,然後在用php或者golang去操作redis或者etcd,都是一個套路
還是要看手冊:
etcd.io/docs/v3.4.0/demo/#access-e...
找打access etcd環節
裡面各種操作

etcdctl --endpoints=$ENDPOINTS put foo "Hello World!"

此命令當中的 –endpoints-$ENDPOINTS 只有在叢集環境當中才會用到目前我們是單機版所以先忽略過去!

put get del命令:
//-------------------------------------------------------
//設定 key為name  value為huxiaobai
etcdctl put name "huxiaobai"
//獲取key為name的值
etcdctl get name
//-------------------------------------------------------
//設定字首名稱都為web的key以及value值
etcdctl put web1 value1
etcdctl put web2 value2
etcdctl put web3 value3
//通過字首批量獲取web開頭的key的值
etcdctl get web --prefix
//-------------------------------------------------------
//刪除key為web1的鍵值對
etcdctl del web1
//刪除一個或者多個字首為web開頭的鍵值對
etcdctl del web --prefix
//-------------------------------------------------------

txn事務
txn從標準輸入中讀取多個請求,將它們看做一個原子性的事務執行。事務是由條件列表,條件判斷成功時的執行列表(條件列表中全部條件為真表示成功)和條件判斷失敗時的執行列表(條件列表中有一個為假即為失敗)組成的。

//先設定上值flag = 1
$ etcdctl put flag 1
OK
//txn事務開始
$ etcdctl txn -i
compares:
value("flag") = "1"
//輸入空格確認 我輸入了兩次
//設定上邊驗證成功了該怎麼辦?
success requests (get, put, delete):
//成功了就put設定值
put result true
//設定上邊失敗了怎麼辦?
failure requests (get, put, delete):
//失敗了也是put值
put result false
SUCCESS
OK
//然後驗證
$ etcdctl get result
result
true

解釋:
etcdctl put flag 1設定flag為1
etcdctl txn -i開啟事務(-i表示互動模式)
第2步輸入命令後回車,終端顯示出compares:
輸入value(“flag”) = “1”,此命令是比較flag的值與1是否相等
第4步完成後輸入回車,終端會換行顯示,此時可以繼續輸入判斷條件(前面說過事務由條件列表組成),再次輸入回車表示判斷條件輸入完畢
第5步連續輸入兩個回車後,終端顯示出success requests (get, put, delete):,表示下面輸入判斷條件為真時要執行的命令
與輸入判斷條件相同,連續兩個回車表示成功時的執行列表輸入完成
終端顯示failure requests (get, put, delete):後輸入條件判斷失敗時的執行列表
為了看起來簡潔,此例項中條件列表和執行列表只寫了一行命令,實際可以輸入多行
總結上面的事務,要做的事情就是flag為1時設定result為true,否則設定result為false總結上面的事務,要做的事情就是flag為1時設定result為true,否則設定result為false
事務執行完成後檢視result值為true

watch監聽
watch後etcdctl阻塞,在另一個終端中執行etcdctl put flag 2後,watch會列印出相關資訊

$ etcdctl watch flag
PUT
flag
2

lease租約
etcd也能為key設定超時時間,但與redis不同,etcd需要先建立lease,然後使用put命令加上引數–lease=<lease ID>來設定

$ etcdctl lease grant 100
lease 38015a3c00490513 granted with TTL(100s)
$ etcdctl put k1 v1 --lease=38015a3c00490513
OK
$ etcdctl lease timetolive 38015a3c00490513
lease 38015a3c00490513 granted with TTL(100s), remaining(67s)
$ etcdctl lease timetolive 38015a3c00490513
lease 38015a3c00490513 granted with TTL(100s), remaining(64s)
$ etcdctl lease timetolive 38015a3c00490513 --keys
lease 38015a3c00490513 granted with TTL(100s), remaining(59s), attached keys([k1])
$ etcdctl put k2 v2 --lease=38015a3c00490513
OK
$ etcdctl lease timetolive 38015a3c00490513 --keys
lease 38015a3c00490513 granted with TTL(100s), remaining(46s), attached keys([k1 k2])
$ etcdctl lease revoke 38015a3c00490513 
lease 38015a3c00490513 revoked
$ etcdctl get k1
$ etcdctl get k2
$ 
$ etcdctl lease grant 10
lease 38015a3c0049051d granted with TTL(10s)
$ etcdctl lease keep-alive 38015a3c0049051d
lease 38015a3c0049051d keepalived with TTL(10)
lease 38015a3c0049051d keepalived with TTL(10)
lease 38015a3c0049051d keepalived with TTL(10)

lease grant <ttl>
建立lease,返回lease ID。建立的lease生存時間大於或等於ttl秒(TODO:為什麼可能大於?)
lease revoke <lease ID>
刪除lease,並刪除所有關聯的key
lease timetolive <lease ID>
取得lease的總時間和剩餘時間
lease keep-alive <lease ID>
此命令不會只更新一次lease時間,而是週期性地重新整理,保證它不會過期。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
胡軍

相關文章