您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么安裝使用etcd”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么安裝使用etcd”吧!
etcd是一個高可用的鍵值存儲系統(tǒng),主要用于共享配置和服務(wù)發(fā)現(xiàn)。etcd是由CoreOS開發(fā)并維護的,靈感來自于 ZooKeeper 和 Doozer,它使用Go語言編寫,并通過Raft一致性算法處理日志復(fù)制以保證強一致性。Raft是一個新的一致性算法,適用于分布式系統(tǒng)的日志復(fù)制,Raft通過選舉的方式來實現(xiàn)一致性。Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。在分布式系統(tǒng)中,如何管理節(jié)點間的狀態(tài)一直是一個難題,etcd像是專門為集群環(huán)境的服務(wù)發(fā)現(xiàn)和注冊而設(shè)計,它提供了數(shù)據(jù)TTL失效、數(shù)據(jù)改變監(jiān)視、多值、目錄監(jiān)聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節(jié)點的狀態(tài)。
etcd的特性如下:
簡單: 支持curl方式的用戶API(HTTP+JSON)
安全: 可選的SSL客戶端證書認證
快速: 單實例每秒 1000 次寫操作
可靠: 使用Raft保證一致性
etcd的安裝非常簡單,可以直接下載編譯后的可執(zhí)行文件。
wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz tar xzvf etcd-v3.0.12-linux-amd64.tar.gz ./etcd --version
啟動方式:./etcd
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcd 2019-07-06 04:05:14.961448 I | etcdmain: etcd Version: 3.0.12 2019-07-06 04:05:14.961795 I | etcdmain: Git SHA: 2d1e2e8 2019-07-06 04:05:14.962112 I | etcdmain: Go Version: go1.6.3 2019-07-06 04:05:14.962427 I | etcdmain: Go OS/Arch: linux/amd64 2019-07-06 04:05:14.962808 I | etcdmain: setting maximum number of CPUs to 1, total number of available CPUs is 1 2019-07-06 04:05:14.963079 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd 2019-07-06 04:05:14.964292 I | etcdmain: listening for peers on http://localhost:2380 2019-07-06 04:05:14.964866 I | etcdmain: listening for client requests on localhost:2379 2019-07-06 04:05:14.972043 I | etcdserver: name = default 2019-07-06 04:05:14.972560 I | etcdserver: data dir = default.etcd 2019-07-06 04:05:14.973497 I | etcdserver: member dir = default.etcd/member 2019-07-06 04:05:14.974055 I | etcdserver: heartbeat = 100ms 2019-07-06 04:05:14.974406 I | etcdserver: election = 1000ms 2019-07-06 04:05:14.974802 I | etcdserver: snapshot count = 10000 2019-07-06 04:05:14.975163 I | etcdserver: advertise client URLs = http://localhost:2379 2019-07-06 04:05:14.975658 I | etcdserver: initial advertise peer URLs = http://localhost:2380 2019-07-06 04:05:14.975985 I | etcdserver: initial cluster = default=http://localhost:2380 2019-07-06 04:05:14.987525 I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32 2019-07-06 04:05:14.988349 I | raft: 8e9e05c52164694d became follower at term 0 2019-07-06 04:05:14.988796 I | raft: newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0] 2019-07-06 04:05:14.989133 I | raft: 8e9e05c52164694d became follower at term 1 2019-07-06 04:05:14.993798 I | etcdserver: starting server... [version: 3.0.12, cluster version: to_be_decided] 2019-07-06 04:05:15.018325 I | membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32 2019-07-06 04:05:15.191979 I | raft: 8e9e05c52164694d is starting a new election at term 1 2019-07-06 04:05:15.192994 I | raft: 8e9e05c52164694d became candidate at term 2 2019-07-06 04:05:15.193820 I | raft: 8e9e05c52164694d received vote from 8e9e05c52164694d at term 2 2019-07-06 04:05:15.194712 I | raft: 8e9e05c52164694d became leader at term 2 2019-07-06 04:05:15.195595 I | raft: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 2 2019-07-06 04:05:15.197315 I | etcdserver: setting up the initial cluster version to 3.0 2019-07-06 04:05:15.199185 N | membership: set the initial cluster version to 3.0 2019-07-06 04:05:15.199995 I | api: enabled capabilities for version 3.0 2019-07-06 04:05:15.200486 I | etcdmain: ready to serve client requests 2019-07-06 04:05:15.205889 N | etcdmain: serving insecure client requests on localhost:2379, this is strongly discouraged! 2019-07-06 04:05:15.212655 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c32 2019-07-06 04:05:15.214893 E | etcdmain: forgot to set Type=notify in systemd service file?
從上面的輸出中,我們可以看到很多信息。以下是幾個比較重要的信息:
2019-07-06 04:05:14.972043 I | etcdserver: name = default
name表示節(jié)點名稱,默認為default。
2019-07-06 04:05:14.972560 I | etcdserver: data dir = default.etcd
data-dir 保存日志和快照的目錄,默認為當(dāng)前工作目錄default.etcd/目錄下。
2019-07-06 04:05:14.974055 I | etcdserver: heartbeat = 100ms
heartbeat為100ms,該參數(shù)的作用是leader多久發(fā)送一次心跳到followers,默認值是100ms。
2019-07-06 04:05:14.974406 I | etcdserver: election = 1000ms
election為1000ms,該參數(shù)的作用是重新投票的超時時間,如果follow在該時間間隔沒有收到心跳包,會觸發(fā)重新投票,默認為1000ms。
2019-07-06 04:05:14.974802 I | etcdserver: snapshot count = 10000
snapshot count為10000,該參數(shù)的作用是指定有多少事務(wù)被提交時,觸發(fā)截取快照保存到磁盤。
2019-07-06 04:05:14.975163 I | etcdserver: advertise client URLs = http://localhost:2379
在http://localhost:2379提供HTTP API服務(wù),供客戶端交互。
2019-07-06 04:05:14.975985 I | etcdserver: initial cluster = default=http://localhost:2380
在http://localhost:2380和集群中其他節(jié)點通信。
集群和每個節(jié)點都會生成一個uuid。
啟動的時候會運行raft,選舉出leader。
采用這種方式啟動的etcd只是一個程序,如果啟動etcd的窗口被關(guān)閉的話則etcd便會被關(guān)閉
,所以如果要長期使用的話最好是為etcd開啟一個服務(wù),此處便不提供開啟服務(wù)的方法,如果有需要讀者可以自行百度。
./etcdctl -h 可以查看用法
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl -h
etcd在鍵的組織上采用了層次化的空間結(jié)構(gòu)(類似于文件系統(tǒng)中目錄的概念),用戶指定的鍵可以為單獨的名字,如:testkey,此時實際上放在根目錄/下面,也可以為指定目錄結(jié)構(gòu),如/cluster1/node2/testkey,則將創(chuàng)建相應(yīng)的目錄結(jié)構(gòu)。
set 指定某個鍵的值。 -ttl ‘0’ 該鍵值的超時時間(單位為秒),不配置(默認為0)則永不超時 –swap-with-value value 若該鍵現(xiàn)在的值是value,則進行設(shè)置操作 –swap-with-index ‘0’ 若該鍵現(xiàn)在的索引值是指定索引,則進行設(shè)置操作 get 獲取指定鍵的值
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl set --ttl '5' key_1 "hello world" hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl get key_1 hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl get key_1 Error: 100: Key not found (/key_1) [6]
上面第二個get方法在是在5秒之后請求的,已經(jīng)請求不到key了,因為已經(jīng)超時。
update 對指定鍵進行修改 –ttl ‘0’ 超時時間(單位為秒),不配置(默認為 0)則永不超時。
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl set --ttl '5' key_1 "hello world" hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl update key_1 "hello world 2" hello world 2 duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl get key_1 hello world 2
rm 刪除某個鍵值。 –dir 如果鍵是個空目錄或者鍵值對則刪除 –recursive 刪除目錄和所有子鍵 –with-value 檢查現(xiàn)有的值是否匹配 –with-index ‘0’檢查現(xiàn)有的index是否匹配
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl set --ttl '5' key_1 "hello world" hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl rm key_1 PrevNode.Value: hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl get key_1 Error: 100: Key not found (/key_1) [18]
mk 如果給定的鍵不存在,則創(chuàng)建一個新的鍵值。 –ttl ‘0’ 超時時間(單位為秒),不配置(默認為 0)。則永不超時
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl mk /testdir/testkey "hello world" hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl mk /testdir/testkey "hello world" Error: 105: Key already exists (/testdir/testkey) [20]
mkdir –ttl ‘0’ 超時時間(單位為秒),不配置(默認為0)則永不超時。 如果給定的鍵目錄不存在,則創(chuàng)建一個新的鍵目錄。 如果給定的鍵目錄存在,則報錯
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl mkdir dir2 duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl mkdir dir2 Error: 105: Key already exists (/dir2) [21]
setdir 創(chuàng)建一個鍵目錄。如果目錄不存在就創(chuàng)建,如果目錄存在更新目錄TTL。 –ttl ‘0’ 超時時間(單位為秒),不配置(默認為0)則永不超時。
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl setdir dir3
rmdir 刪除一個空目錄,或者鍵值對。
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl rmdir dir3
ls 列出目錄(默認為根目錄)下的鍵或者子目錄,默認不顯示子目錄中內(nèi)容。 –sort 將輸出結(jié)果排序 –recursive 如果目錄下有子目錄,則遞歸輸出其中的內(nèi)容 -p 對于輸出為目錄,在最后添加/進行區(qū)分
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl ls /message /test /testdir /dir2
backup 備份etcd的數(shù)據(jù)。 –data-dir etcd的數(shù)據(jù)目錄 –backup-dir 備份到指定路徑
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl backup --data-dir default.etcd/ --backup-dir ~/
watch 監(jiān)測一個鍵值的變化,一旦鍵值發(fā)生更新,就會輸出最新的值并退出。 –forever 一直監(jiān)測直到用戶按CTRL+C退出 –after-index ‘0’ 在指定index之前一直監(jiān)測 –recursive 返回所有的鍵值和子鍵值
先設(shè)置mykey="hello world",然后監(jiān)測mykey
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl set mykey "Hello world" Hello world duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl watch mykey
在另一個窗口中修改mykey的值:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl update mykey "test" test
之前的監(jiān)控界面便打印出test,然后退出:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl watch mykey test
exec-watch 監(jiān)測一個鍵值的變化,一旦鍵值發(fā)生更新,就執(zhí)行給定命令。 –after-index ‘0’ 在指定 index 之前一直監(jiān)測 –recursive 返回所有的鍵值和子鍵值
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl exec-watch mykey -- sh -c "ls"
當(dāng)我在另一個窗口更新mykey時,輸出:
Documentation README.md default.etcd etcd nohup.out README-etcdctl.md READMEv2-etcdctl.md docker-node1.etcd etcdctl
member list 列出etcd實例 add 添加etcd實例 remove 刪除etcd實例
查看列表:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl member list 8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true
刪除節(jié)點:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl member remove 8e9e05c52164694d Removed member 8e9e05c52164694d from cluster duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl member list Error: client: etcd cluster is unavailable or misconfigured error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused
向集群中新加節(jié)點,例如:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl member add etcd2 http://localhost:2380
感謝各位的閱讀,以上就是“怎么安裝使用etcd”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么安裝使用etcd這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。