一、etcd介紹
1)etcd 是一個分布式一致性鍵值存儲系統,用於共享配置和服務發現
etcd是一個分布式一致性鍵值存儲系統,用於共享配置和服務發現, 專注於: 簡單:良好定義的,面向用戶的API (gRPC)· 安全: 帶有可選客戶端證書認證的自動TLS· 快速:測試驗證,每秒10000寫入· 可靠:使用Raft適當分布etcd是Go編寫,並使用Raft一致性算法來管理高可用復制日志 etcd可實現的功能,Zookeeper都能實現,那么為什么要用etcd而非直接使用Zookeeper呢?相較之下, Zookeeper有如下缺點: 1.復雜。Zookeeper的部署維護復雜,管理員需要掌握一系列的知識和技能;而Paxos強一致性算法也是素來以復雜難懂而聞名於世; 另外,Zookeeper的使用也比較復雜,需要安裝客戶端,官方只提供了java和C兩種語言的接口。 2.Java編寫。這里不是對Java有偏見,而是Java本身就偏向於重型應用,它會引入大量的依賴。而運維人員則普遍希望機器集群盡可能簡單,維護起來也不易出錯。 etcd作為一個后起之秀,其優點也很明顯。 1.簡單。使用Go語言編寫部署簡單;使用HTTP作為接口使用簡單;使用Raft算法保證強一致性讓用戶易於理解。 2.數據持久化。etcd默認數據一更新就進行持久化。 3.安全。etcd支持SSL客戶端安全認證。
2) etcd的架構圖
從etcd的架構圖中我們可以看到,etcd主要分為四個部分
HTTP Server: 用於處理用戶發送的API請求以及其它etcd節點的同步與心跳信息請求。
Store:用於處理etcd支持的各類功能的事務,包括數據索引、節點狀態變更、監控與反饋、事件處理與執行等等,是etcd對用戶提供的大多數API功能的具體實現。
Raft:Raft強一致性算法的具體實現,是etcd的核心。
WAL:Write Ahead Log(預寫式日志),是etcd的數據存儲方式。除了在內存中存有所有數據的狀態以及節點的索引以外,etcd就通過WAL進行持久化存儲。
WAL中,所有的數據提交前都會事先記錄日志。Snapshot是為了防止數據過多而進行的狀態快照;Entry表示存儲的具體日志內容。
通常,一個用戶的請求發送過來,會經由HTTP Server轉發給Store進行具體的事務處理
如果涉及到節點的修改,則交給Raft模塊進行狀態的變更、日志的記錄,然后再同步給別的etcd節點以確認數據提交
最后進行數據的提交,再次同步。
3)etcd概念詞匯表
Raft:etcd所采用的保證分布式系統強一致性的算法。
Node:一個Raft狀態機實例。
Member: 一個etcd實例。它管理着一個Node,並且可以為客戶端請求提供服務。
Cluster:由多個Member構成可以協同工作的etcd集群。
Peer:對同一個etcd集群中另外一個Member的稱呼。
Client: 向etcd集群發送HTTP請求的客戶端。
WAL:預寫式日志,etcd用於持久化存儲的日志格式。
snapshot:etcd防止WAL文件過多而設置的快照,存儲etcd數據狀態。
Proxy:etcd的一種模式,為etcd集群提供反向代理服務。
Leader:Raft算法中通過競選而產生的處理所有數據提交的節點。
Follower:競選失敗的節點作為Raft中的從屬節點,為算法提供強一致性保證。
Candidate:當Follower超過一定時間接收不到Leader的心跳時轉變為Candidate開始競選。
Term:某個節點成為Leader到下一次競選時間,稱為一個Term。
Index:數據項編號。Raft中通過Term和Index來定位數據。
4)etcd官方下載
下載地址:https://github.com/coreos/etcd/releases選擇合適的版本進行下載。
二、etcd 集群安裝。(准備3台機器)
1)第一步。下載etcd命令
wget https://github.com/etcd-io/etcd/releases/download/v3.3.13/etcd-v3.3.13-linux-amd64.tar.gz tar xf etcd-v3.3.13-linux-amd64.tar.gz [root@master tools]# ls etcd-v3.3.13-linux-amd64/etcd* etcd-v3.3.13-linux-amd64/etcd etcd-v3.3.13-linux-amd64/etcdctl [root@master tools]# cp etcd-v3.3.13-linux-amd64/etcd* /usr/bin/ [root@master tools]# ls /usr/bin/etcd* /usr/bin/etcd /usr/bin/etcdctl [root@master tools]# chown root:root /usr/bin/etcd*
2)第二步。修改配置文件
2.1)默認端口下在配置(對於健康檢查不需要添加--endpoints=http://127.0.0.1:8083參數)

vi /etc/etcd.conf name: node01 initial-advertise-peer-urls: http://192.168.1.5:2380 listen-peer-urls: http://192.168.1.5:2380 listen-client-urls: http://192.168.1.5:2379,http://127.0.0.1:2379 advertise-client-urls: http://192.168.1.5:2379 initial-cluster-token: etcd-cluster-0 initial-cluster: node01=http://192.168.1.5:2380,node02=http://192.168.1.6:2380,node03=http://192.168.1.7:2380 initial-cluster-state: new data-dir: /var/lib/etcd
默認的端口為 2380和2379
測試時修改了端口
2.2)將端口改為8083和8084
vi /etc/etcd.conf name: node01 initial-advertise-peer-urls: http://192.168.1.5:8084 listen-peer-urls: http://192.168.1.5:8084 listen-client-urls: http://192.168.1.5:8083,http://127.0.0.1:8083 advertise-client-urls: http://192.168.1.5:8083 initial-cluster-token: etcd-cluster-0 initial-cluster: node01=http://192.168.1.5:8084,node02=http://192.168.1.6:8084,node03=http://192.168.1.7:8084 initial-cluster-state: new data-dir: /var/lib/etcd
mkdir /var/lib/etcd
3)第三步,加載etcd到系統程序
vi /usr/lib/systemd/system/etcd.service [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target Documentation=https://github.com/coreos [Service] Type=notify ExecStart=/usr/bin/etcd --config-file=/etc/etcd.conf Restart=on-failure RestartSec=5 LimitCORE=infinity LimitNOFILE=655360 LimitNPROC=655350 [Install] WantedBy=multi-user.target
4)第四步。設置開機自啟動
systemctl daemon-reload(重新加載模塊)
systemctl enable etcd(開機啟動)
systemctl start etcd(啟動服務) 最后一起啟動
5)其他節點執行同樣的操作
[root@master tools]# scp etcd-v3.3.13-linux-amd64/etcd root@192.168.1.6:/usr/bin/ etcd 100% 16MB 103.9MB/s 00:00 [root@master tools]# scp /etc/etcd.conf root@192.168.1.6:/etc/ etcd.conf 100% 422 244.9KB/s 00:00 [root@master tools]# scp etcd-v3.3.13-linux-amd64/etcd root@192.168.1.7:/usr/bin/ etcd 100% 16MB 130.4MB/s 00:00 [root@master tools]# scp /etc/etcd.conf root@192.168.1.7:/etc/ etcd.conf 100% 422 148.4KB/s 00:00 [root@master tools]# scp /usr/lib/systemd/system/etcd.service root@192.168.1.6:/usr/lib/systemd/system/ etcd.service 100% 352 33.9KB/s 00:00 [root@master tools]# scp /usr/lib/systemd/system/etcd.service root@192.168.1.7:/usr/lib/systemd/system/ etcd.service 100% 352 136.2KB/s 00:00
修改好對應的配置
systemctl start etcd 啟動
6)健康檢查
[root@master etcd]# etcdctl --endpoints=http://127.0.0.1:8083 cluster-health member 19f45ab624e135d5 is healthy: got healthy result from http://192.168.1.7:8083 member 8b1773c5c1edc4a3 is healthy: got healthy result from http://192.168.1.5:8083 member be69fc1f2a25ca22 is healthy: got healthy result from http://192.168.1.6:8083 cluster is healthy [root@master etcd]# curl http://192.168.1.5:8083/v2/members
7)etcdctl的相關命令操作

https://www.jianshu.com/p/d63265949e52 https://www.cnblogs.com/breg/p/5728237.html