etcd集群搭建


一、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
View Code

默認的端口為 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
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM