溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么安裝使用etcd

發(fā)布時間:2021-11-16 15:27:02 來源:億速云 閱讀:141 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“怎么安裝使用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ù)的方法,如果有需要讀者可以自行百度。

etcd命令行接口使用

./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 get

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

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

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

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

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

setdir 
創(chuàng)建一個鍵目錄。如果目錄不存在就創(chuàng)建,如果目錄存在更新目錄TTL。 
–ttl ‘0’ 超時時間(單位為秒),不配置(默認為0)則永不超時。
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl setdir dir3

rmdir

rmdir 
刪除一個空目錄,或者鍵值對。
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl rmdir dir3

ls

ls 
列出目錄(默認為根目錄)下的鍵或者子目錄,默認不顯示子目錄中內(nèi)容。 
–sort 將輸出結(jié)果排序 
–recursive 如果目錄下有子目錄,則遞歸輸出其中的內(nèi)容 
-p 對于輸出為目錄,在最后添加/進行區(qū)分
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl ls
/message
/test
/testdir
/dir2

非數(shù)據(jù)庫操作,非數(shù)據(jù)庫操作包括:備份、監(jiān)測、節(jié)點管理等

backup

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

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 

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

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)注!

向AI問一下細節(jié)

免責(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)容。

AI