etcd mysql etcd的初步使用

2021-10-21 08:21:48 字數 3930 閱讀 1038

簡介

etcd介紹.png

etcd是乙個golang編寫的分布式、高可用的一致性鍵值儲存系統,用於提供可靠的分布式鍵值(key-value)儲存、配置共享和服務發現等功能。etcd可以用於儲存關鍵資料和實現分布式排程,在現代化的集群執行中能夠起到關鍵性的作用。

etcd基於raft協議,通過複製日誌檔案的方式來保證資料的強一致性。在etcd之前,常用的是基於paxos協議的zookeeper。

安裝步驟如下:

wget

# 解壓

etcd目錄結構.png

其中etcd就是服務端程式,etcdctl是客戶端程式。

啟動服務端:

./etcd --listen-client-urls '' --advertise-client-urls ''

--listen-client-urls:監聽的用於客戶端通訊的url,可以監聽多個。

--advertise-client-urls:建議使用的客戶端通訊url。

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

warning.png

不建議監聽任意位址的客戶端,因為這樣不夠安全。這裡只是為了測試方便才這麼做。

客戶端etcdctl是官方提供的客戶端程式。

etcdctl help.png

etcd有兩個版本的介面,v2和v3,且兩個版本不相容,v2已經停止了支援,v3效能更好。etcdctl預設使用v2版本,如果想使用v3版本,可通過環境變數etcdctl_api=3進行設定。

使用v3版本.png

接下來都使用v3介面進行學習,主要進行單機測試。

常見命令

get put del

最常見的就是put、get和del命令。

# 放入乙個 鍵值對

$ ./etcdctl get name

name

zyq# 取出 name

$ ./etcdctl get name

name

zyq# 刪除 name

$ ./etcdctl del name

# 在獲取name

$ ./etcdctl get name

# 什麼都沒拿到

etcd的key是有序儲存的,本質上是字串,可以模擬出目錄的結構,例如儲存了/a/b,/a/b/c,/a/b/d三個key,由於它們在儲存中順序排列的,通過定位到key=/a/b並依次順序向後掃瞄,就會遇到/a/b/c與/a/b/d這兩個孩子,從而實現父子目錄關係。

所以一般都將etcd的key設計成目錄結構。

etcdctl的get命令可以獲取單個key,也可以獲取以某個字串為字首的key(可以模擬某個目錄下的所有key)。

ok# 可以單獨獲取某個key

$ ./etcdctl get "/project/jobs/job1"

/project/jobs/job1

# 也可以獲取某個目錄下的所有key

# 但是直接獲取某個目錄 etcd是不認識的 因為它沒有目錄的概念

$ ./etcdctl get "/project/jobs/"

# 需要加上 --prefix命令

$ ./etcdctl get "/project/jobs/" --prefix

/project/jobs/job1

/project/jobs/job2

# 刪除所有

$ ./etcdctl del "/project/jobs/" --prefix

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"

putname

zyq# 當另乙個視窗執行了 ./etcdctl del "name" 之後

$ ./etcdctl watch "name"

putname

zyqdelete

name

可以看到,watch命令可以觀察到所有的操作事件(put和del)。

同樣,可以使用--prefix命令指定觀察的key的字首。

租約租約是一段時間,可以為etcd的key授予租約。當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確實不太方便,下次學習使用golang的clientv3 api進行操作。

參考

Springboot中的定時任務初初初初級

最近剛剛接觸sringboot中的定時任務寫了乙個最最最初階版的定時任務,作如下記錄 首先在啟動類中新增註解 enablescheduling然後就可以直接通過註解 scheduled編寫我們的定時任務了 service public class timeservice 其中,corn值代表每分鐘執...

MySQL初初初入門筆記 2020 6 25

寥寥幾筆 現在是累計什錦式學習mysql部分的第2天 現在把最前頭的記錄都一起傳上來,雖然現在寫的這一塊還是太簡單了,但畢竟配置環境什麼的還是花時間,於是寫一篇記錄一下粗略的學習過程 現在越學越感覺對於相關知識的學習是由 簡單,繁雜 到 深入,簡約 的乙個過程.所以還是有點耐心吧哈哈 資料庫db 資...

初初初級演算法

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...