1.介紹:
etcd 是 CoreOS 團隊于 2013 年 6 月發(fā)起的開源項目,它的目標(biāo)是構(gòu)建一個高可用的分布式鍵值(key-value)數(shù)據(jù)庫,基于 Go 語言實現(xiàn)。我們知道,在分布式系統(tǒng)中,各種服務(wù)的配置信息的管理分享,服務(wù)的發(fā)現(xiàn)是一個很基本同時也是很重要的問題。CoreOS 項目就希望基于 etcd 來解決這一問題。
受到?Apache ZooKeeper?項目和?doozer?項目的啟發(fā),etcd 在設(shè)計的時候重點考慮了下面四個要素:
簡單:支持 REST 風(fēng)格的 HTTP+JSON API
安全:支持 HTTPS 方式的訪問
快速:支持并發(fā) 1k/s 的寫操作
可靠:支持分布式結(jié)構(gòu),基于 Raft 的一致性算法
注:Apache ZooKeeper 是一套知名的分布式系統(tǒng)中進行同步和一致性管理的工具。?
注:doozer 則是一個一致性分布式數(shù)據(jù)庫。?
注:Raft 是一套通過選舉主節(jié)點來實現(xiàn)分布式系統(tǒng)一致性的算法,相比于大名鼎鼎的 Paxos 算法,它的過程更容易被人理解
一般情況下,用戶使用 etcd 可以在多個節(jié)點上啟動多個實例,并添加它們?yōu)橐粋€集群。同一個集群中的 etcd 實例將會保持彼此信息的一致性
2.安裝:
方法1---安裝(最新版本3.3.9):
下載地址:
wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
tar zxf??etcd-v3.3.9-linux-amd64.tar.gz?
mv?etcd-v3.3.9-linux-amd64? ?/usr/local/etcd
其中 etcd 是服務(wù)主文件,etcdctl 是提供給用戶的命令客戶端
運行:
/usr/local/etcd/etcd? ?&? (默認(rèn)數(shù)據(jù)存放在./default.etcd)

簡單信息查看:
1)在http://localhost:2380和集群中其他節(jié)點通信
2)在http://localhost:2379提供HTTP API服務(wù),供客戶端交互。
3)heartbeat為100ms,該參數(shù)的作用是leader多久發(fā)送一次心跳到followers,默認(rèn)值是100ms。
4)election為1000ms,該參數(shù)的作用是重新投票的超時時間,如果follow在該時間間隔沒有收到心跳包,會觸發(fā)重新投票,默認(rèn)為1000ms。
5)snapshot count為10000,該參數(shù)的作用是指定有多少事務(wù)被提交時,觸發(fā)截取快照保存到磁盤
6)集群和每個節(jié)點都會生成一個uuid,啟動的時候會運行raft,選舉出leader
方法2安裝(版本3.2.22):
yum install etcd -y
啟動:
systemctl start etcd??
配置文件:
配置文件:/etc/etcd/etcd.conf
systemd 服務(wù)文件:/usr/lib/systemd/system/etcd.service
3.etcdctl相關(guān)命令
/usr/local/etcd/etcdctl? ?-h? ?----幫助信息
etcdctl 是一個命令行客戶端,它能提供一些簡潔的命令,供用戶直接跟 etcd 服務(wù)打交道
etcd 在鍵的組織上采用了層次化的空間結(jié)構(gòu)(類似于文件系統(tǒng)中目錄的概念),用戶指定的鍵可以為單獨的名字,如?testkey,此時實際上放在根目錄?/?下面,也可以為指定目錄結(jié)構(gòu),如?cluster1/node2/testkey,則將創(chuàng)建相應(yīng)的目錄結(jié)構(gòu)
1)指定某個鍵的值:? /usr/local/etcd/etcdctl set ./default.etcd/testkey "hello"
2)獲取某個鍵的值:? /usr/local/etcd/etcdctl get ./default.etcd/testkey "hello"? ??
?----當(dāng)鍵不存在時,則會報錯
3)當(dāng)鍵存在時,更新值內(nèi)容:? ??/usr/local/etcd/etcdctl? update ./default.etcd/testkey "world"
當(dāng)鍵不存在時,則會報錯
4)刪除某個鍵:/usr/local/etcd/etcdctl? rm ./default.etcd/testkey
當(dāng)鍵不存在時,則會報錯
5)給定的鍵不存在,則創(chuàng)建一個新的鍵值:
?/usr/local/etcd/etcdctl? mk? ./default.etcd/testkey "world? hello"
當(dāng)鍵存在的時候,執(zhí)行該命令會報錯
6)給定的鍵目錄不存在,則創(chuàng)建一個新的鍵目錄:
?/usr/local/etcd/etcdctl? mkdir testdir? ? ? ? ? ---------->當(dāng)鍵目錄存在的時候,執(zhí)行該命令會報錯
7)創(chuàng)建一個鍵目錄,無論存在與否:
?/usr/local/etcd/etcdctl? setdir testdir
8)更新一個鍵目錄,無論存在與否:
?/usr/local/etcd/etcdctl? updatedir testdir
9)刪除一個空目錄,或者鍵值對:
/usr/local/etcd/etcdctl??rmdir testdir? ? ? ------------->若目錄不空,會報錯
10)列出目錄(默認(rèn)為根目錄)下的鍵或者子目錄,默認(rèn)不顯示子目錄中內(nèi)容
/usr/local/etcd/etcdctl? ?ls
11)數(shù)據(jù)庫的備份:
/usr/local/etcd/etcdctl? ?backup --data-dir default.etcd --backup-dir 備份目錄
12)監(jiān)測一個鍵值的變化,一旦鍵值發(fā)生更新,就會輸出最新的值并退出
/usr/local/etcd/etcdctl? ? watch? ?./default.etcd/testkey
13)監(jiān)測一個鍵值的變化,一旦鍵值發(fā)生更新,就執(zhí)行給定命令:
/usr/local/etcd/etcdctl? ? execwatch? ?./default.etcd/testkey?-- sh -c '執(zhí)行的命令'
14)查看集群中存在的節(jié)點:
/usr/local/etcd/etcdctl? ?member list
15)刪除集群中存在的節(jié)點
/usr/local/etcd/etcdctl member remove? 節(jié)點號
16)向集群中新加節(jié)點
/usr/local/etcd/etcdctl?member add? 節(jié)點名稱【etcd3】 節(jié)點地址【http://192.168.1.100:2380】