1. 程式人生 > >consul只key/value存儲

consul只key/value存儲

方式 com 開發人員 健康檢查 動態 data 執行 index keyword

除了提供服務發現和綜合健康檢查,Consul還提供了一個易於使用的鍵/值存儲。這可以用來保存動態配置,協助服務協調,建立領導人選舉,並啟用其他開發人員可以想構建的任何其他內容。

有兩種方法可以使用:通過HTTP API和通過CLI API。下面的例子顯示使用CLI API

D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get redis/config/minconns
Error! No key exists at: redis/config/minconns

你將看到沒有結果返回,由於KV存儲中沒有該鍵返回了一個錯誤,接下來我們將插入或”put”一個值到KV存儲中。

D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv put redis/config/minconns 1
Success! Data written to: redis/config/minconns

現在再次查詢該鍵你將看到如下結果:

D:\soft\worksoft\consul_1.0.6_windows_amd64>consul kv get redis/config/minconns
1

在web UI上可以看到用CLI API創建的key

技術分享圖片

在web UI上創建一個“duan”的key:

技術分享圖片

再通過CLI API查詢結果:

技術分享圖片

Consul保留額外的元數據在該字段,你可以使用-detailed標誌檢索詳細信息:

root@server1:~# consul kv get -detailed redis/config/minconns
CreateIndex      1049
Flags            0
Key              redis/config/minconns
LockIndex        0
ModifyIndex      1049
Session          -
Value            1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

設置值的時候,還可以使用-flags標誌
- -flags=<uint>
Unsigned integer value to assign to this key-value pair. This value is not read by Consul, so clients can use this value however makes sense for their use case. The default value is 0 (no flags).

flags用來做客戶端自定義標誌,consul並不使用它,你可以在你自己的程序中隨便定義

root@server1:~# consul kv put -flags=42 redis/config/users/admin abcd1234
Success! Data written to: redis/config/users/admin
  • 1
  • 2

設置flag值為42,想設置成什麽就設置成什麽.所有的鍵都支持設置一個64位的整型值。

使用-recurse選項可以列出KV存儲中所有keys,返回的結果將按照字母排序。

root@server1:~# consul kv get -recurse
redis/config/minconns:1
redis/config/users/admin:abcd1234
  • 1
  • 2
  • 3

使用delete命令刪除KV存儲中指定的key。

root@server1:~# consul kv delete redis/config/minconns
Success! Deleted key: redis/config/minconns
  • 1
  • 2

還可以使用recurse選項遞歸選項刪除含某個前綴的所有keys:

root@server1:~# consul kv delete -recurse redis
Success! Deleted keys with prefix: redis
  • 1
  • 2

如果要更新一個存在鍵的值,可以put一個新值在同樣的路徑上。

root@server1:~# consul kv put foo bar
Success! Data written to: foo
root@server1:~# consul kv get foo
bar
root@server1:~# consul kv put foo zip
Success! Data written to: foo
root@server1:~# consul kv get foo
zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Consul可以使用Check_And_Set提供原子鍵更新操作。執行CAS操作時需指定-cas標誌。至於什麽是CAS,請自行百度吧
- -modify-index=<uint>
Unsigned integer representing the ModifyIndex of the key. This is used in combination with the -cas flag.

首先查詢foo這個key的詳細信息

root@server1:~# consul kv get -detailed foo
CreateIndex      1065
Flags            0
Key              foo
LockIndex        0
ModifyIndex      1067
Session          -
Value            zip
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

看到foo的索引編號ModifyIndex是1067。然後使用CAS操作的方式來修改它

root@server1:~# consul kv put -cas -modify-index=1067 foo bar
Success! Data written to: foo
  • 1
  • 2

修改成功,再查詢

root@server1:~# consul kv get -detailed foo
CreateIndex      1065
Flags            0
Key              foo
LockIndex        0
ModifyIndex      1091
Session          -
Value            bar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

ModifyIndex變成1091了。依然使用上面那個修改命令試試

root@server1:~# consul kv put -cas -modify-index=1067 foo bar
Error! Did not write to foo: CAS failed
  • 1
  • 2

失敗了。原因是第一次CAS操作成功,因為ModifyIndex的值是1067,我們輸入的也是-modify-index=1067。
第二次操作失敗,ModifyIndex已經變成1091了,我們還用-modify-index=1067,Check_And_SetS中的Check這步就失敗了,不會再Set了。

技術分享圖片

consul只key/value存儲