網站發(fā)產品ps怎么做產品圖友情貼吧
目錄
一 簡介
1.1 etcd是什么
1.2. 特點
1.3. 使用場景
1.4 關鍵字
1.5 工作原理
二 安裝
2.1 etcd安裝前介紹
2.2 安裝
2.3 啟動
2.4 創(chuàng)建一個etcd服務
三 常用操作
一 簡介
1.1 etcd是什么
? ? ? etcd是CoreOS團隊于2013年6月發(fā)起的開源項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫。
官網上的一段描述:
A distributed, reliable key-value store for the most critical data of a distributed system
etcd是一個分布式,鍵值對存儲系統(tǒng),用于分布式的關鍵數據的存儲。
1.2. 特點
-
簡單的接口,通過標準的HTTP API進行調用,也可以使用官方提供的 etcdctl 操作存儲的數據
-
鍵值對存儲
-
有監(jiān)聽機制,可以監(jiān)聽特定鍵的變化,并作出響應
-
1.3. 使用場景
- 服務發(fā)現(Service Discovery)
- 消息發(fā)布與訂閱
- 負載均衡
- 分布式通知與協(xié)調
- 分布式鎖
1.4 關鍵字
Raft:etcd所采用的保證分布式系統(tǒng)強一致性的算法。
Node:一個Raft狀態(tài)機實例。
Member: 一個etcd實例。它管理著一個Node,并且可以為客戶端請求提供服務。
Cluster:由多個Member構成可以協(xié)同工作的etcd集群。
Peer:對同一個etcd集群中另外一個Member的稱呼。
Client: 向etcd集群發(fā)送HTTP請求的客戶端。
WAL:預寫式日志,etcd用于持久化存儲的日志格式。
snapshot:etcd防止WAL文件過多而設置的快照,存儲etcd數據狀態(tài)。
Proxy:etcd的一種模式,為etcd集群提供反向代理服務。
Leader(領導者):Raft算法中通過競選而產生的處理所有數據提交的節(jié)點。
Follower(跟隨者):競選失敗的節(jié)點作為Raft中的從屬節(jié)點,為算法提供強一致性保證。
Candidate:當Follower超過一定時間接收不到Leader的心跳時轉變?yōu)镃andidate開始Leader競選。
Term:某個節(jié)點成為Leader到下一次競選開始的時間周期,稱為一個Term。
Index:數據項編號。Raft中通過Term和Index來定位數據
1.5 工作原理
第1部分是HTTP Server: 用于處理用戶發(fā)送的API請求,以及其它etcd節(jié)點的同步與心跳信息請求
第2部分是Store:用于處理etcd支持的各類功能的事務,包括數據索引、節(jié)點狀態(tài)變更、監(jiān)控與反饋、事件處理與執(zhí)行等等,是etcd對用戶提供的大多數API功能的具體實現
第3部分是Raft:Raft強一致性算法的具體實現,是etcd的核心
第4部分是WAL:Write Ahead Log(預寫式日志),是etcd的數據存儲方式。除了在內存中存有所有數據的狀態(tài)以及節(jié)點的索引以外,etcd就通過WAL進行持久化存儲。
在WAL中,所有的數據提交前都會事先記錄日志。Snapshot是為了防止數據過多而進行的狀態(tài)快照;Entry表示存儲的具體日志內容
二 安裝
2.1 etcd安裝前介紹
- etcd在生產環(huán)境中一般推薦集群方式部署
- etcd使用的2個默認端口號:2379和2380
2379:用于客戶端通信(類似于sqlserver的1433/oracle的1521/mysql的3306)
2380:用于與集群中的Peer通信 - 因為etcd是go語言編寫的,安裝只需要下載對應的二進制文件,并放到合適的路徑就行
2.2 安裝
1) 創(chuàng)建并切換到下載目錄
創(chuàng)建一個存儲etcd的文件目錄并且進入該目錄中
mkdir /usr/local/mytools && cd /usr/local/mytools
?2)下載
下載的etcd的話可能有點慢,小編這就已經下載好了上傳即可
wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz
3)解壓文件到當前目錄
tar xzvf etcd-v3.4.3-linux-amd64.tar.gz
4)切換至etcd根目錄中,運行查看命令ls,里面會有一些文檔和2個二進制文件etcd和etcdctl
etcd是server端,etcdctl是客戶端
cd etcd-v3.4.3-linux-amd64 && ls
5)將這etcd和etcdctl兩個二進制文件復制到/usr/local/bin目錄, 這樣系統(tǒng)中可以直接調用etcd/etcdctl這兩個程序
cp etcd etcdctl /usr/local/bin
6)查看etcd版本
etcd --version
7)設置etcdctl版本(v2/v3)
注意:etct3.4.3默認使用v3命令所以步驟7可省略,之前版本此步驟不可少,例如:v3.3.10
vi /etc/profile
# 按鍵盤i鍵,最后一行指定etcdctl命令的版本為v3
export ETCDCTL_API=3
環(huán)境變量配置示意圖:
按ESC,輸入:wq保存并退出
# 刷新環(huán)境變量
source /etc/profile
#查看當前etcdctl的版本信息
#v3查看版本號
etcdctl version
# 更多命令幫助可以查詢
etcdctl --help ?
2.3 啟動
輸入命令etcd,即可啟動一個單節(jié)點的etcd服務,ctrl+c即可停止服務
etcd
輸入后如果出現下圖樣子證明etcd服務就沒問題?
1.name表示節(jié)點名稱,默認為default。2.data-dir 保存日志和快照的目錄,默認為當前工作目錄default.etcd/目錄下。3.在http://localhost:2380和集群中其他節(jié)點通信。4.在http://localhost:2379提供客戶端交互。5.heartbeat為100ms,該參數的作用是leader多久發(fā)送一次心跳到followers,默認值是100ms。6.election為1000ms,該參數的作用是重新投票的超時時間,如果follow在該時間間隔沒有收到心跳包,會觸發(fā)重新投票,默認為1000ms。7.snapshot count為10000,該參數的作用是指定有多少事務被提交時,觸發(fā)截取快照保存到磁盤。8.集群和每個節(jié)點都會生成一個uuid。9.啟動的時候會運行raft,選舉出leader
2.4 創(chuàng)建一個etcd服務
1)建立etcd相關目錄(即數據文件和配置文件的保存位置)
/etc目錄是整個Linux系統(tǒng)的中心,其中包含所有系統(tǒng)管理和維護方面的配置文件,所以etcd的配置也放在這里
mkdir -p /var/lib/etcd/ && mkdir -p /etc/etcd/
2)創(chuàng)建etcd.conf配置文件并編輯
vim /etc/etcd/etcd.conf
etcd.conf內容:
# 節(jié)點名稱ETCD_NAME="etcd0"# 指定數據文件存放位置ETCD_DATA_DIR="/var/lib/etcd/"
3)創(chuàng)建systemd配置文件并編輯
vim /etc/systemd/system/etcd.service
systemd內容:
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target## 對于那些嚴格要求 必須存在真實可用的網絡連接的單元, ## 應該在其單元文件中包含 Wants=network-online.target ## 與 After=network-online.target 指令[Service]
User=root
Type=notify
WorkingDirectory=/var/lib/etcd/## 根據實際情況修改EnvironmentFile和ExecStart這兩個參數值## 1.EnvironmentFile即配置文件的位置,注意“-”不能少EnvironmentFile=-/etc/etcd/etcd.conf## 2.ExecStart即etcd啟動程序位置ExecStart=/usr/local/bin/etcd
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
4) 啟動/停止/查看etcd服務
## 1.重新加載systemd服務
systemctl daemon-reload## 2.設置開機自啟動
systemctl enable etcd ## 3.查看etcd運行狀態(tài)
systemctl status etcd## 4.啟動etcd
systemctl start etcd
借鑒,可不操作
## 5.停止服務
systemctl stop etcd
## 6.重啟etcd
systemctl restart etcd
三 常用操作
1) 如何獲取幫助
etcdctl -h
2)put
etcdctl put /testdir/testkey "Hello world"
前面說了,etcd是一種分布式鍵值對關系,如上命令進行解釋
etcdctl: 這是 etcd 的命令行工具,用于與 etcd 集群進行交互。通過 etcdctl,用戶可以執(zhí)行各種操作,如設置鍵值對、獲取鍵值對、監(jiān)聽鍵的變化等。
put: 這是 etcdctl 的一個子命令,用于在 etcd 中創(chuàng)建或更新一個鍵值對。
/testdir/testkey: 這是鍵(key)的部分。在 etcd 中,鍵是唯一的,并且可以使用斜杠(/)來創(chuàng)建層次結構或目錄。在這個例子中,testdir
?可以被看作是一個目錄,而?testkey
?是該目錄下的一個鍵。
"Hello world": 這是值(value)的部分。在這個例子中,與鍵?/testdir/testkey
?關聯的值是字符串 "Hello world"。
3)get? (獲取鍵與值)
etcdctl get /testdir/testkey
--sort 對結果進行排序
--consistent 將請求發(fā)給主節(jié)點,保證獲取內容的一致性。
4)del? ?(刪除清空)
# 清空數據
etcdctl del / --prefix#刪除所有/test前綴的節(jié)點
etcdctl del /test --prefix
5)watch? (監(jiān)聽)
#1. 增加一個key,值為hello(客戶端窗口1)
etcdctl put key1 "hello"#2. 打開一個新的客戶端窗口2,監(jiān)聽key1的變化
etcdctl watch key1#3. 回到窗口1,向key1 中刪除原有的值put新值為hello work
etcdctl put key1 "hello work"# 4. 此時可以在窗口2中看到監(jiān)聽輸出# 查看版本信息
curl http://127.0.0.1:2379/version
?如下的動態(tài)圖,當我開了兩個窗口,另一個窗口監(jiān)聽到了另一個窗口的鍵與值