天天看點

consul 的鍵值存儲

# 為提供服務發現和健康檢測,Consul提供了易于使用的鍵值存儲
# 可被用于存儲動态配置資訊、幫助服務協作、建構Leader選舉機制、及開發者可以想到的建構任何其它的東西 ...

           

注冊鍵值資訊

# 先驗證KV存儲内是否有鍵,若無則傳回404(遞歸recurse)
[[email protected] ~]# curl -s http://localhost:8500/v1/kv/?recurse

# 先用PUT方法存儲一些鍵值
[[email protected] ~]# curl -X PUT -d 'test1'  http://localhost:8500/v1/kv/key1
[[email protected] ~]# curl -X PUT -d 'test2'  http://localhost:8500/v1/kv/key2
[[email protected] ~]# curl -X PUT -d 'test3' http://localhost:8500/v1/kv/web/key1?flags=42
# flags是鍵的标記(為64位整型數字,可被用戶端用來做中繼資料)此處對鍵"web/key1"為其設定了"42"的自定義标記....

# 也可使用指令行方式注冊
[[email protected] ~]# echo "5" | consul kv put redis/config/password -
[[email protected] ~]# consul kv put redis/config/password  @password.txt
[[email protected] ~]# consul kv put redis/config/connections  5
# Success! Data written to: redis/config/connections

# 擷取資料
[[email protected] ~]# consul kv get [-detailed|-recurse] redis/config/connections
5

# 擷取詳情
[[email protected] ~]# consul kv get -detailed redis/config/connections
# CreateIndex  336
# Flags        0
# Key          redis/config/connections
# LockIndex    0
# ModifyIndex  336
# Session      -
# Value        5

# 删除資料
[[email protected] ~]# consul kv delete [-recurse|not-a-real-key] redis/config/connections 
# Success! Data deleted at key: redis/config/connections

# 導出tree結構
[[email protected] ~]# consul kv export vault/
# JSON output

           

查詢鍵值資訊

# 查詢所有鍵值資訊 (使用 recurse 參數發出遞歸請求)
[[email protected] ~]# curl -s http://node1:8500/v1/kv/?recurse | python -m json.tool
[
    {
        "CreateIndex": 1721,
        "Flags": 0,
        "Key": "key1",              # 鍵
        "LockIndex": 0,
        "ModifyIndex": 1721,
        "Value": "dGVzdDE="         # 值(值的傳回是base64的編碼,其允許非UTF8字元集)
    },
    {
        "CreateIndex": 1723,
        "Flags": 0,
        "Key": "key2",              # 鍵
        "LockIndex": 0,
        "ModifyIndex": 1723,
        "Value": "dGVzdDI="         # 值
    },
    {
        "CreateIndex": 1729,
        "Flags": 42,                # flag資訊...(此标記不由Consul使用,它可被用于存儲任意鍵值對的中繼資料資訊)
        "Key": "web/key1",          # 鍵
        "LockIndex": 0,
        "ModifyIndex": 1729,
        "Value": "dGVzdDM="         # 值
    }
]

# 查詢指定鍵值資訊...
[[email protected] ~]# curl -s http://localhost:8500/v1/kv/web/key1 | python -m json.tool 
[
    {
        "CreateIndex": 1729,
        "Flags": 42,
        "Key": "web/key1",
        "LockIndex": 0,
        "ModifyIndex": 1729,
        "Value": "dGVzdDM="
    }
]

# ---------------------------------------------

# 也可使用consul的指令行方式查詢
[[email protected] ~]# consul kv get web/key1
# newval

# 查詢所有鍵值對資訊
[[email protected] ~]# consul kv get -recurse
# key1:test1
# key2:test2
# my_key:666
# web/key1:newval

           

删除鍵值資訊

[[email protected] ~]# curl -X DELETE http://localhost:8500/v1/kv/web/key1?recurse     # 使用DELETE方法即可
[[email protected] ~]# cus http://localhost:8500/v1/kv/web/key1 | python -m json.tool  # 再次查詢即不存在
# No JSON object could be decoded

           

修改鍵值資訊

# 使用PUT請求相同的URI并提供不同的消息體即可修改指定鍵,Consul提供了檢測并設定的操作且操作是原子的......
# 通過在GET中提供 ?cas= 參數并及指定最新的 ModifyIndex 值就可以得到原子操作

# 假設想要更新"web/key1"
[[email protected] ~]# curl -s http://localhost:8500/v1/kv/web/key1 | python -m json.tool
[
    {
        "CreateIndex": 1841,
        "Flags": 0,
        "Key": "web/key1",
        "LockIndex": 0,
        "ModifyIndex": 1841,    # ModifyIndex的值為1841
        "Value": "bmV3dmFs"
    }
]
[[email protected] ~]# curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=1841
true
[[email protected] ~]# curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=1841
false
#這裡,第1個CAS更新成功是因為最新的 ModifyIndex 是1841,而第二個操作失敗因為最新的 ModifyIndex 不再是此值

#--------------------------------------------------------------------------------------------------------
#通過提供"?index=",即可請求等待直到鍵包含一個大于20000的 ModifyIndex 的值
#并且由于"?wait=",限制了查詢最多等待5秒則逾時後會傳回目前沒有修改的值
#該操作可高效地等待鍵的更新。另外相同的方法可用于等待一個鍵的集合,直到鍵集合中任何一個鍵發生更新...
[[email protected] ~]# curl -s "http://localhost:8500/v1/kv/web/key1?index=20000&wait=3s" | python -m json.tool  
[
    {
        "CreateIndex": 1841,
        "Flags": 0,
        "Key": "web/key1",
        "LockIndex": 0,
        "ModifyIndex": 1858,
        "Value": "bmV3dmFs"
    }
]

           

繼續閱讀