您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么安裝使用etcd”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么安裝使用etcd”吧!
etcd是一個高可用的鍵值存儲系統,主要用于共享配置和服務發現。etcd是由CoreOS開發并維護的,靈感來自于 ZooKeeper 和 Doozer,它使用Go語言編寫,并通過Raft一致性算法處理日志復制以保證強一致性。Raft是一個新的一致性算法,適用于分布式系統的日志復制,Raft通過選舉的方式來實現一致性。Google的容器集群管理系統Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。在分布式系統中,如何管理節點間的狀態一直是一個難題,etcd像是專門為集群環境的服務發現和注冊而設計,它提供了數據TTL失效、數據改變監視、多值、目錄監聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節點的狀態。
etcd的特性如下:
簡單: 支持curl方式的用戶API(HTTP+JSON)
安全: 可選的SSL客戶端證書認證
快速: 單實例每秒 1000 次寫操作
可靠: 使用Raft保證一致性
etcd的安裝非常簡單,可以直接下載編譯后的可執行文件。
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表示節點名稱,默認為default。
2019-07-06 04:05:14.972560 I | etcdserver: data dir = default.etcd
data-dir 保存日志和快照的目錄,默認為當前工作目錄default.etcd/目錄下。
2019-07-06 04:05:14.974055 I | etcdserver: heartbeat = 100ms
heartbeat為100ms,該參數的作用是leader多久發送一次心跳到followers,默認值是100ms。
2019-07-06 04:05:14.974406 I | etcdserver: election = 1000ms
election為1000ms,該參數的作用是重新投票的超時時間,如果follow在該時間間隔沒有收到心跳包,會觸發重新投票,默認為1000ms。
2019-07-06 04:05:14.974802 I | etcdserver: snapshot count = 10000
snapshot count為10000,該參數的作用是指定有多少事務被提交時,觸發截取快照保存到磁盤。
2019-07-06 04:05:14.975163 I | etcdserver: advertise client URLs = http://localhost:2379
在http://localhost:2379提供HTTP API服務,供客戶端交互。
2019-07-06 04:05:14.975985 I | etcdserver: initial cluster = default=http://localhost:2380
在http://localhost:2380和集群中其他節點通信。
集群和每個節點都會生成一個uuid。
啟動的時候會運行raft,選舉出leader。
采用這種方式啟動的etcd只是一個程序,如果啟動etcd的窗口被關閉的話則etcd便會被關閉
,所以如果要長期使用的話最好是為etcd開啟一個服務,此處便不提供開啟服務的方法,如果有需要讀者可以自行百度。
./etcdctl -h 可以查看用法
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl -h
etcd在鍵的組織上采用了層次化的空間結構(類似于文件系統中目錄的概念),用戶指定的鍵可以為單獨的名字,如:testkey,此時實際上放在根目錄/下面,也可以為指定目錄結構,如/cluster1/node2/testkey,則將創建相應的目錄結構。
set 指定某個鍵的值。 -ttl ‘0’ 該鍵值的超時時間(單位為秒),不配置(默認為0)則永不超時 –swap-with-value value 若該鍵現在的值是value,則進行設置操作 –swap-with-index ‘0’ 若該鍵現在的索引值是指定索引,則進行設置操作 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秒之后請求的,已經請求不到key了,因為已經超時。
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 檢查現有的值是否匹配 –with-index ‘0’檢查現有的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 如果給定的鍵不存在,則創建一個新的鍵值。 –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)則永不超時。 如果給定的鍵目錄不存在,則創建一個新的鍵目錄。 如果給定的鍵目錄存在,則報錯
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 創建一個鍵目錄。如果目錄不存在就創建,如果目錄存在更新目錄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 列出目錄(默認為根目錄)下的鍵或者子目錄,默認不顯示子目錄中內容。 –sort 將輸出結果排序 –recursive 如果目錄下有子目錄,則遞歸輸出其中的內容 -p 對于輸出為目錄,在最后添加/進行區分
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl ls /message /test /testdir /dir2
backup 備份etcd的數據。 –data-dir etcd的數據目錄 –backup-dir 備份到指定路徑
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl backup --data-dir default.etcd/ --backup-dir ~/
watch 監測一個鍵值的變化,一旦鍵值發生更新,就會輸出最新的值并退出。 –forever 一直監測直到用戶按CTRL+C退出 –after-index ‘0’ 在指定index之前一直監測 –recursive 返回所有的鍵值和子鍵值
先設置mykey="hello world",然后監測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
之前的監控界面便打印出test,然后退出:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl watch mykey test
exec-watch 監測一個鍵值的變化,一旦鍵值發生更新,就執行給定命令。 –after-index ‘0’ 在指定 index 之前一直監測 –recursive 返回所有的鍵值和子鍵值
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl exec-watch mykey -- sh -c "ls"
當我在另一個窗口更新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
刪除節點:
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
向集群中新加節點,例如:
duandingyang@ubuntu:~/etcd-v3.0.12-linux-amd64$ ./etcdctl member add etcd2 http://localhost:2380
感謝各位的閱讀,以上就是“怎么安裝使用etcd”的內容了,經過本文的學習后,相信大家對怎么安裝使用etcd這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。