etcd安裝簡介

etcd的簡介請參考https://blog.csdn.net/chinawangfei/article/details/95046120

本篇主要介紹etcd的安裝。

etcd 是用 go 語言編寫的,安裝過程簡單,只需要下載對應的二進制文件,並放到合適的路徑即可。

1.單點安裝

如果在測試環境,啓動一個單點的 etcd 服務,只需要運行 etcd 命令就行。

2019-07-03 17:00:50.443272 I | etcdmain: etcd Version: 3.3.13
2019-07-03 17:00:50.443414 I | etcdmain: Git SHA: GitNotFound
2019-07-03 17:00:50.443422 I | etcdmain: Go Version: go1.12.4
2019-07-03 17:00:50.443437 I | etcdmain: Go OS/Arch: darwin/amd64
2019-07-03 17:00:50.443447 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2019-07-03 17:00:50.443460 N | etcdmain: failed to detect default host (default host not supported on darwin_amd64)
2019-07-03 17:00:50.443474 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2019-07-03 17:00:50.445897 I | embed: listening for peers on http://localhost:2380
2019-07-03 17:00:50.446235 I | embed: listening for client requests on localhost:2379
2019-07-03 17:00:50.455582 I | etcdserver: name = default
2019-07-03 17:00:50.455622 I | etcdserver: data dir = default.etcd
2019-07-03 17:00:50.455640 I | etcdserver: member dir = default.etcd/member
2019-07-03 17:00:50.455664 I | etcdserver: heartbeat = 100ms
2019-07-03 17:00:50.455676 I | etcdserver: election = 1000ms
2019-07-03 17:00:50.455691 I | etcdserver: snapshot count = 100000
2019-07-03 17:00:50.455725 I | etcdserver: advertise client URLs = http://localhost:2379
2019-07-03 17:00:50.455793 I | etcdserver: initial advertise peer URLs = http://localhost:2380
2019-07-03 17:00:50.455853 I | etcdserver: initial cluster = default=http://localhost:2380
2019-07-03 17:00:50.549110 I | etcdserver: starting member 8e9e05c52164694d in cluster cdf818194e3a8c32
2019-07-03 17:00:50.549334 I | raft: 8e9e05c52164694d became follower at term 0
2019-07-03 17:00:50.549380 I | raft: newRaft 8e9e05c52164694d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2019-07-03 17:00:50.549393 I | raft: 8e9e05c52164694d became follower at term 1
2019-07-03 17:00:50.583394 W | auth: simple token is not cryptographically signed
2019-07-03 17:00:50.599580 I | etcdserver: starting server... [version: 3.3.13, cluster version: to_be_decided]
2019-07-03 17:00:50.599843 I | etcdserver: 8e9e05c52164694d as single-node; fast-forwarding 9 ticks (election ticks 10)
2019-07-03 17:00:50.599884 E | etcdserver: cannot monitor file descriptor usage (cannot get FDUsage on darwin)
2019-07-03 17:00:50.601119 I | etcdserver/membership: added member 8e9e05c52164694d [http://localhost:2380] to cluster cdf818194e3a8c32
2019-07-03 17:00:51.354949 I | raft: 8e9e05c52164694d is starting a new election at term 1
2019-07-03 17:00:51.356658 I | raft: 8e9e05c52164694d became candidate at term 2
2019-07-03 17:00:51.356929 I | raft: 8e9e05c52164694d received MsgVoteResp from 8e9e05c52164694d at term 2
2019-07-03 17:00:51.356957 I | raft: 8e9e05c52164694d became leader at term 2
2019-07-03 17:00:51.356967 I | raft: raft.node: 8e9e05c52164694d elected leader 8e9e05c52164694d at term 2
2019-07-03 17:00:51.357503 I | etcdserver: setting up the initial cluster version to 3.3
2019-07-03 17:00:51.362463 N | etcdserver/membership: set the initial cluster version to 3.3
2019-07-03 17:00:51.362787 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379]} to cluster cdf818194e3a8c32
2019-07-03 17:00:51.362879 I | embed: ready to serve client requests
2019-07-03 17:00:51.362938 I | etcdserver/api: enabled capabilities for version 3.3
2019-07-03 17:00:51.367846 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!

從執行結果中可以看出:

etcdserver: name = default, name表示節點名稱,默認爲default。
etcdserver: data dir = default.etcd,data-dir保存日誌和快照的目錄,默認爲當前工作目錄“./default.etcd/”
etcdserver: initial advertise peer URLs = http://localhost:2380,通過http://localhost:2380,和集羣中其他節點通信。
etcdserver: advertise client URLs = http://localhost:2379,通過http://localhost:2379,對外提供HTTP API服務,供客戶端交互。如果配置webui,就使用這個地址。
etcdserver: heartbeat = 100ms leader發送心跳到followers的間隔時間。
etcdserver: election = 1000ms 重新投票的超時時間,如果follow在該時間間隔沒有收到心跳包,會觸發重新投票,默認爲1000ms
集羣和每個節點都會生成一個 uuid。
啓動的時候,會運行 raft協議,選舉出 leader。

 

2.集羣安裝

在安裝和啓動 etcd 服務的時候,各個節點需要知道集羣中其他節點的信息(一般是 ip 和 port 信息)。根據你是否可以提前知道每個節點的 ip,有幾種不同的啓動方案:

  • 靜態配置:在啓動 etcd server 的時候,通過 --initial-cluster 參數配置好所有的節點信息
  • 使用已有的 etcd cluster 來註冊和啓動,比如官方提供的 discovery.etcd.io
  • 使用 DNS 啓動,

etcd 的安裝文檔官網已經給出了,這裏不再贅述。當然,你也可以通過 docker 來安裝 etcd,具體的文檔可以看這裏。

啓動參數中,peer-urls是一組,client-url是一組,cluster是一組。

下面給出可以常用配置的參數和它們的解釋,方便理解:

  • --name:方便理解的節點名稱,默認爲 default,在集羣中應該保持唯一,可以使用 hostname
  • --data-dir:服務運行數據保存的路徑,默認爲 ${name}.etcd
  • --snapshot-count:指定有多少事務(transaction)被提交時,觸發截取快照保存到磁盤
  • --heartbeat-interval:leader 多久發送一次心跳到 followers。默認值是 100ms
  • --eletion-timeout:重新投票的超時時間,如果 follow 在該時間間隔沒有收到心跳包,會觸發重新投票,默認爲 1000 ms
  • --listen-peer-urls:和同伴通信的地址,比如 http://ip:2380,如果有多個,使用逗號分隔。需要所有節點都能夠訪問,所以不要使用 localhost!
  • --listen-client-urls:對外提供服務的地址:比如 http://ip:2379,http://127.0.0.1:2379,客戶端會連接到這裏和 etcd 交互
  • --advertise-client-urls:對外公告的該節點客戶端監聽地址,這個值會告訴集羣中其他節點
  • --initial-advertise-peer-urls:該節點同伴監聽地址,這個值會告訴集羣中其他節點
  • --initial-cluster:集羣中所有節點的信息,格式爲 node1=http://ip1:2380,node2=http://ip2:2380,…。注意:這裏的 node1 是節點的 --name 指定的名字;後面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
  • --initial-cluster-state:新建集羣的時候,這個值爲 new;假如已經存在的集羣,這個值爲 existing
  • --initial-cluster-token:創建集羣的 token,這個值每個集羣保持唯一。這樣的話,如果你要重新創建集羣,即使配置和之前一樣,也會再次生成新的集羣和節點 uuid;否則會導致多個集羣之間的衝突,造成未知的錯誤

所有以 --init 開頭的配置,都是在 bootstrap 集羣的時候纔會用到,後續節點的重啓會被忽略。

NOTE:所有的參數也可以通過環境變量進行設置,--my-flag 對應環境變量的 ETCD_MY_FLAG;但是命令行指定的參數會覆蓋環境變量對應的值。

爲了簡單起見,在演示時一般採用單點的 etcd server。但是,在生產環境中配置 etcd 集羣,並使用 SSL 安全機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章