etcd基本操做

概述

etcd是一個用於共享配置和服務的高可用鍵值存儲系統,由CoreOS使用開發並做爲CoreOS的基礎服務啓動。etcd的靈感來源於Apache ZooKeeper和doozer,其特色:git

  • 簡單:可用curl進行操做(HTTP+JSON)
  • 安全:可以使用SSL客戶端證書驗證
  • 快速:基準測試在每一個實例1000次寫入每秒
  • 可靠: 使用Raft協議來進行合理的分佈式
    etcd是go語言寫的,並使用Raft一致性算法來管理一個高可用的複製日誌。

etcd 2.0以後,規範了端口號的使用,而且寫入了IANA組織的標準端口記錄。etcd將提供給外部客戶端的端口變爲2379,而etcd服務間通訊的端口變爲2380github

安裝etcd

etcd的安裝很是簡單,能夠直接下載編譯後的可執行文件,啓動以下:算法

etcd -name etcd1 -data-dir /data/etcd --advertise-client-urls http://10.116.21.131:2379,http://127.0.0.1:2379 --listen-client-urls http://10.116.21.131:2379,http://127.0.0.1:2379

使用etcdctl操做etcd

須要說明的是,下面全部操做都是針對etcd2.0可用,etcd3.0的接口變更較大,還沒有進行驗證數據庫

數據庫操做

一、set:設置鍵值json

#支持的選項:
    --ttl "0"    #該鍵值的超時時間,單位爲s,默認爲0,永不超時
    --swap-with-value value    #若該鍵如今的值爲value,則進行設置操做
    --swap-with-index '0'    #若該鍵如今的索引值是指定索引,則進行設置操做
    
#示例:
    etcdctl set /foo/bar "hello"    #設置/foo/bar的值爲hello
    etcdctl set /foo/bar "hello" --ttl 60    #設置/foo/bar的值爲hello,而且超時時間爲60s
    etcdctl set /foo/bar "world" --swap-with-value "hello" #當/foo/bar的值爲hello時,則設置/foo/bar的值爲world,若是不爲hello,則會拋出異常

二、mk:設置鍵的值,僅當該鍵不存在時設置 ,若是已存在,則拋出異常安全

etcdctl mk /foo/new_bar "hello"
#支持的選項:
    --ttl "0"

三、update:更新一個鍵的值,僅當該鍵存在時,若是不存在,則拋出異常bash

etcdctl update /foo/bar "world"
支持的選項:
    --ttl "0"    #單位爲s,默認爲0,永不超時

四、get:獲取某個鍵的值,若是不存在,則拋出異常curl

etcdctl get /foo/bar
#支持的選項:
    --sort    #對結果進行排序
    --consistent    #將請求結果發給主節點,保證獲取內容的一致性

五、rm:刪除某個鍵值 ,若是鍵不存在,則拋出異常分佈式

etcdctl rm testkey
#支持的選項:
    --dir    #若是鍵是空目錄或者鍵值對則刪除
    --recursive    #刪除目錄和全部子鍵
    --with-value    #檢查現有的值是否匹配,匹配時才刪除
    --with-index '0'     #檢查現有的index是否匹配

六、mkdir:若是給定的鍵目錄不存在,則建立一個新的鍵目錄,若是存在,則報錯

etcdctl mkdir testdir
#支持的選項:
    --ttl "0"

七、setdir:建立一個鍵目錄,不管存在與否。

etcdctl setdir testdir
#支持的選項:
    --ttl "0"

八、updatedir:更新一個已經存在的目錄,若是不存在,則拋出異常

#支持的選項:
    --ttl "0"

九、rmdir:刪除一個空目錄或者鍵值對。若是目錄不爲空,則拋出異常

etcdctl rmdir /dir

十、ls:列出目錄下的鍵或子目錄,默認不顯示子目錄的內容

etcdctl set dir/test "hello"
etcdctl ls dir
#支持的選項:
    --sort    #將結果排序
    --recursive    #若是目錄下有子目錄,則遞歸輸出子目錄中的內容
    -p    #對於輸出爲目錄的,在最後添加"/"進行區分

非數據庫操做

一、backup:備份etcd數據

etcdctl backup --data-dir /data/etcd --backup-dir /data/backup/etcd
#支持的選項:
    --data-dir    #etcd的數據目錄
    --backup-dir    #備份到指定路徑

二、watch:監測一個鍵值的變化,一旦鍵值發生更新,就會輸出最新的值並退出

etcdctl watch testkey
#支持的選項:
    --forever    #一直監測,直到用戶按"Ctrl+C"退出
    --after-index '0'    #在指定index以前一直監測
    --recursive    #返回全部的鍵值和子鍵值

三、exec-watch:監測一個鍵值的變化 ,一旦鍵值發生更新,就執行給定的命令

etcdctl exec-watch testkey -- sh -c 'ls'
#支持的選項:
    --after-index "0"    #在指定的index前一直監測
    --recursive    #返回全部的值和子鍵值

四、member:經過list、add、remove命令列出、添加、刪除etcd實例到etcd集羣中

etcdctl member list
#支持的選項:
    --debug     #輸出 cURL 命令,顯示執行命令的時候發起的請求
    --no-sync   #發出請求以前不一樣步集羣信息
    --output, -o 'simple'   #輸出內容的格式 (simple 爲原始信息,json 爲進行    json格式解碼,易讀性好一些)
    --peers, -C     #指定集羣中的同伴信息,用逗號隔開 (默認爲: "127.0.0.1:4001")
    --cert-file     #HTTPS 下客戶端使用的 SSL 證書文件
    --key-file  #HTTPS 下客戶端使用的 SSL 密鑰文件
    --ca-file   #服務端使用 HTTPS 時,使用 CA 文件進行驗證

使用curl操做etcd

一、set操做

curl -L http://127.0.0.1:2379/v2/keys/foo/bar -XPUT -d value="hello world"

二、get操做

curl -L http://127.0.0.1:2379/v2/keys/foo/bar

三、rm操做

curl -L http://127.0.0.1:2379/v2/keys/foo/bar -XDELETE
{
"action":"delete",
"node:{
    "key":"/foo/bar",
    "modifiedIndex":28,
    "createdIndex":27
    },
"prevNode":{
    "key":"/foo/bar",
    "value":"hi, etcd",
    "modifiedIndex":27,
    "createdIndex":27
    }
}

參考:
https://tonydeng.github.io/2015/11/24/etcd-the-first-using/
http://cizixs.com/2016/08/02/intro-to-etcd

相關文章
相關標籤/搜索