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