濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 利用二進(jìn)制文件安裝etcd的教程詳解

利用二進(jìn)制文件安裝etcd的教程詳解

熱門標(biāo)簽:地圖標(biāo)注資源分享注冊(cè) 襄陽(yáng)外呼增值業(yè)務(wù)線路解決方案 慶陽(yáng)外呼系統(tǒng)定制開發(fā) 廊坊地圖標(biāo)注申請(qǐng)入口 北京外呼系統(tǒng)咨詢電話 怎么去掉地圖標(biāo)注文字 合肥阿里辦理400電話號(hào) 高德地圖標(biāo)注公司位置需要錢嗎 海南人工外呼系統(tǒng)哪家好

etcd組件作為一個(gè)高可用強(qiáng)一致性的服務(wù)發(fā)現(xiàn)存儲(chǔ)倉(cāng)庫(kù).

etcd作為一個(gè)受到ZooKeeper與doozer啟發(fā)而催生的項(xiàng)目,除了擁有與之類似的功能外,更專注于以下四點(diǎn)。

簡(jiǎn)單:基于HTTP+JSON的API讓你用curl就可以輕松使用。

安全:可選SSL客戶認(rèn)證機(jī)制。

快速:每個(gè)實(shí)例每秒支持一千次寫操作。

可信:使用Raft算法充分實(shí)現(xiàn)了分布式。

場(chǎng)景一:服務(wù)發(fā)現(xiàn)(Service Discovery)一個(gè)強(qiáng)一致性、高可用的服務(wù)存儲(chǔ)目錄。基于Raft算法的etcd天生就是這樣一個(gè)強(qiáng)一致性高可用的服務(wù)存儲(chǔ)目錄。一種注冊(cè)服務(wù)和監(jiān)控服務(wù)健康狀態(tài)的機(jī)制。用戶可以在etcd中注冊(cè)服務(wù),并且對(duì)注冊(cè)的服務(wù)設(shè)置key TTL,定時(shí)保持服務(wù)的心跳以達(dá)到監(jiān)控健康狀態(tài)的效果。一種查找和連接服務(wù)的機(jī)制。通過(guò)在etcd指定的主題下注冊(cè)的服務(wù)也能在對(duì)應(yīng)的主題下查找到。為了確保連接,我們可以在每個(gè)服務(wù)機(jī)器上都部署一個(gè)Proxy模式的etcd,這樣就可以確保能訪問(wèn)etcd集群的服務(wù)都能互相連接。

微服務(wù)協(xié)同工作架構(gòu)中,服務(wù)動(dòng)態(tài)添加。隨著Docker容器的流行,多種微服務(wù)共同協(xié)作,構(gòu)成一個(gè)相對(duì)功能強(qiáng)大的架構(gòu)的案例越來(lái)越多。透明化的動(dòng)態(tài)添加這些服務(wù)的需求也日益強(qiáng)烈。通過(guò)服務(wù)發(fā)現(xiàn)機(jī)制,在etcd中注冊(cè)某個(gè)服務(wù)名字的目錄,在該目錄下存儲(chǔ)可用的服務(wù)節(jié)點(diǎn)的IP。在使用服務(wù)的過(guò)程中,只要從服務(wù)目錄下查找可用的服務(wù)節(jié)點(diǎn)去使用即可。

PaaS平臺(tái)中應(yīng)用多實(shí)例與實(shí)例故障重啟透明化。PaaS平臺(tái)中的應(yīng)用一般都有多個(gè)實(shí)例,通過(guò)域名,不僅可以透明的對(duì)這多個(gè)實(shí)例進(jìn)行訪問(wèn),而且還可以做到負(fù)載均衡。但是應(yīng)用的某個(gè)實(shí)例隨時(shí)都有可能故障重啟,這時(shí)就需要?jiǎng)討B(tài)的配置域名解析(路由)中的信息。通過(guò)etcd的服務(wù)發(fā)現(xiàn)功能就可以輕松解決這個(gè)動(dòng)態(tài)配置的問(wèn)題。

場(chǎng)景二:消息發(fā)布與訂閱

在分布式系統(tǒng)中,最適用的一種組件間通信方式就是消息發(fā)布與訂閱。即構(gòu)建一個(gè)配置共享中心,數(shù)據(jù)提供者在這個(gè)配置中心發(fā)布消息,而消息使用者則訂閱他們關(guān)心的主題,一旦主題有消息發(fā)布,就會(huì)實(shí)時(shí)通知訂閱者。通過(guò)這種方式可以做到分布式系統(tǒng)配置的集中式管理與動(dòng)態(tài)更新。

應(yīng)用中用到的一些配置信息放到etcd上進(jìn)行集中管理。這類場(chǎng)景的使用方式通常是這樣:應(yīng)用在啟動(dòng)的時(shí)候主動(dòng)從etcd獲取一次配置信息,同時(shí),在etcd節(jié)點(diǎn)上注冊(cè)一個(gè)Watcher并等待,以后每次配置有更新的時(shí)候,etcd都會(huì)實(shí)時(shí)通知訂閱者,以此達(dá)到獲取最新配置信息的目的。

  • 分布式搜索服務(wù)中,索引的元信息和服務(wù)器集群機(jī)器的節(jié)點(diǎn)狀態(tài)存放在etcd中,供各個(gè)客戶端訂閱使用。使用etcd的key TTL功能可以確保機(jī)器狀態(tài)是實(shí)時(shí)更新的。
  • 分布式日志收集系統(tǒng)。這個(gè)系統(tǒng)的核心工作是收集分布在不同機(jī)器的日志。收集器通常是按照應(yīng)用(或主題)來(lái)分配收集任務(wù)單元,因此可以在etcd上創(chuàng)建一個(gè)以應(yīng)用(主題)命名的目錄P,并將這個(gè)應(yīng)用(主題相關(guān))的所有機(jī)器ip,以子目錄的形式存儲(chǔ)到目錄P上,然后設(shè)置一個(gè)etcd遞歸的Watcher,遞歸式的監(jiān)控應(yīng)用(主題)目錄下所有信息的變動(dòng)。這樣就實(shí)現(xiàn)了機(jī)器IP(消息)變動(dòng)的時(shí)候,能夠?qū)崟r(shí)通知到收集器調(diào)整任務(wù)分配。
  • 系統(tǒng)中信息需要?jiǎng)討B(tài)自動(dòng)獲取與人工干預(yù)修改信息請(qǐng)求內(nèi)容的情況。通常是暴露出接口,例如JMX接口,來(lái)獲取一些運(yùn)行時(shí)的信息。引入etcd之后,就不用自己實(shí)現(xiàn)一套方案了,只要將這些信息存放到指定的etcd目錄中即可,etcd的這些目錄就可以通過(guò)HTTP的接口在外部訪問(wèn)

場(chǎng)景三:負(fù)載均衡

場(chǎng)景一中也提到了負(fù)載均衡,本文所指的負(fù)載均衡均為軟負(fù)載均衡。分布式系統(tǒng)中,為了保證服務(wù)的高可用以及數(shù)據(jù)的一致性,通常都會(huì)把數(shù)據(jù)和服務(wù)部署多份,以此達(dá)到對(duì)等服務(wù),即使其中的某一個(gè)服務(wù)失效了,也不影響使用。由此帶來(lái)的壞處是數(shù)據(jù)寫入性能下降,而好處則是數(shù)據(jù)訪問(wèn)時(shí)的負(fù)載均衡。因?yàn)槊總€(gè)對(duì)等服務(wù)節(jié)點(diǎn)上都存有完整的數(shù)據(jù),所以用戶的訪問(wèn)流量就可以分流到不同的機(jī)器上。

etcd本身分布式架構(gòu)存儲(chǔ)的信息訪問(wèn)支持負(fù)載均衡。etcd集群化以后,每個(gè)etcd的核心節(jié)點(diǎn)都可以處理用戶的請(qǐng)求。所以,把數(shù)據(jù)量小但是訪問(wèn)頻繁的消息數(shù)據(jù)直接存儲(chǔ)到etcd中也是個(gè)不錯(cuò)的選擇,如業(yè)務(wù)系統(tǒng)中常用的二級(jí)代碼表(在表中存儲(chǔ)代碼,在etcd中存儲(chǔ)代碼所代表的具體含義,業(yè)務(wù)系統(tǒng)調(diào)用查表的過(guò)程,就需要查找表中代碼的含義)。

利用etcd維護(hù)一個(gè)負(fù)載均衡節(jié)點(diǎn)表。etcd可以監(jiān)控一個(gè)集群中多個(gè)節(jié)點(diǎn)的狀態(tài),當(dāng)有一個(gè)請(qǐng)求發(fā)過(guò)來(lái)后,可以輪詢式的把請(qǐng)求轉(zhuǎn)發(fā)給存活著的多個(gè)狀態(tài)。類似KafkaMQ,通過(guò)ZooKeeper來(lái)維護(hù)生產(chǎn)者和消費(fèi)者的負(fù)載均衡。同樣也可以用etcd來(lái)做ZooKeeper的工作。

場(chǎng)景四:分布式通知與協(xié)調(diào)

這里說(shuō)到的分布式通知與協(xié)調(diào),與消息發(fā)布和訂閱有些相似。都用到了etcd中的Watcher機(jī)制,通過(guò)注冊(cè)與異步通知機(jī)制,實(shí)現(xiàn)分布式環(huán)境下不同系統(tǒng)之間的通知與協(xié)調(diào),從而對(duì)數(shù)據(jù)變更做到實(shí)時(shí)處理。實(shí)現(xiàn)方式通常是這樣:不同系統(tǒng)都在etcd上對(duì)同一個(gè)目錄進(jìn)行注冊(cè),同時(shí)設(shè)置Watcher觀測(cè)該目錄的變化(如果對(duì)子目錄的變化也有需要,可以設(shè)置遞歸模式),當(dāng)某個(gè)系統(tǒng)更新了etcd的目錄,那么設(shè)置了Watcher的系統(tǒng)就會(huì)收到通知,并作出相應(yīng)處理。

通過(guò)etcd進(jìn)行低耦合的心跳檢測(cè)。檢測(cè)系統(tǒng)和被檢測(cè)系統(tǒng)通過(guò)etcd上某個(gè)目錄關(guān)聯(lián)而非直接關(guān)聯(lián)起來(lái),這樣可以大大減少系統(tǒng)的耦合性。

通過(guò)etcd完成系統(tǒng)調(diào)度。某系統(tǒng)有控制臺(tái)和推送系統(tǒng)兩部分組成,控制臺(tái)的職責(zé)是控制推送系統(tǒng)進(jìn)行相應(yīng)的推送工作。管理人員在控制臺(tái)作的一些操作,實(shí)際上是修改了etcd上某些目錄節(jié)點(diǎn)的狀態(tài),而etcd就把這些變化通知給注冊(cè)了Watcher的推送系統(tǒng)客戶端,推送系統(tǒng)再作出相應(yīng)的推送任務(wù)。

通過(guò)etcd完成工作匯報(bào)。大部分類似的任務(wù)分發(fā)系統(tǒng),子任務(wù)啟動(dòng)后,到etcd來(lái)注冊(cè)一個(gè)臨時(shí)工作目錄,并且定時(shí)將自己的進(jìn)度進(jìn)行匯報(bào)(將進(jìn)度寫入到這個(gè)臨時(shí)目錄),這樣任務(wù)管理者就能夠?qū)崟r(shí)知道任務(wù)進(jìn)度。

場(chǎng)景五:分布式鎖

因?yàn)閑tcd使用Raft算法保持了數(shù)據(jù)的強(qiáng)一致性,某次操作存儲(chǔ)到集群中的值必然是全局一致的,所以很容易實(shí)現(xiàn)分布式鎖。鎖服務(wù)有兩種使用方式,一是保持獨(dú)占,二是控制時(shí)序。

保持獨(dú)占即所有獲取鎖的用戶最終只有一個(gè)可以得到。etcd為此提供了一套實(shí)現(xiàn)分布式鎖原子操作CAS(CompareAndSwap)的API。通過(guò)設(shè)置prevExist值,可以保證在多個(gè)節(jié)點(diǎn)同時(shí)去創(chuàng)建某個(gè)目錄時(shí),只有一個(gè)成功。而創(chuàng)建成功的用戶就可以認(rèn)為是獲得了鎖。

控制時(shí)序,即所有想要獲得鎖的用戶都會(huì)被安排執(zhí)行,但是獲得鎖的順序也是全局唯一的,同時(shí)決定了執(zhí)行順序。etcd為此也提供了一套API(自動(dòng)創(chuàng)建有序鍵),對(duì)一個(gè)目錄建值時(shí)指定為POST動(dòng)作,這樣etcd會(huì)自動(dòng)在目錄下生成一個(gè)當(dāng)前最大的值為鍵,存儲(chǔ)這個(gè)新的值(客戶端編號(hào))。同時(shí)還可以使用API按順序列出所有當(dāng)前目錄下的鍵值。此時(shí)這些鍵的值就是客戶端的時(shí)序,而這些鍵中存儲(chǔ)的值可以是代表客戶端的編號(hào)。

場(chǎng)景六:分布式隊(duì)列

分布式隊(duì)列的常規(guī)用法與場(chǎng)景五中所描述的分布式鎖的控制時(shí)序用法類似,即創(chuàng)建一個(gè)先進(jìn)先出的隊(duì)列,保證順序。

另一種比較有意思的實(shí)現(xiàn)是在保證隊(duì)列達(dá)到某個(gè)條件時(shí)再統(tǒng)一按順序執(zhí)行。這種方法的實(shí)現(xiàn)可以在/queue這個(gè)目錄中另外建立一個(gè)/queue/condition節(jié)點(diǎn)。

condition可以表示隊(duì)列大小。比如一個(gè)大的任務(wù)需要很多小任務(wù)就緒的情況下才能執(zhí)行,每次有一個(gè)小任務(wù)就緒,就給這個(gè)condition數(shù)字加1,直到達(dá)到大任務(wù)規(guī)定的數(shù)字,再開始執(zhí)行隊(duì)列里的一系列小任務(wù),最終執(zhí)行大任務(wù)。

condition可以表示某個(gè)任務(wù)在不在隊(duì)列。這個(gè)任務(wù)可以是所有排序任務(wù)的首個(gè)執(zhí)行程序,也可以是拓?fù)浣Y(jié)構(gòu)中沒(méi)有依賴的點(diǎn)。通常,必須執(zhí)行這些任務(wù)后才能執(zhí)行隊(duì)列中的其他任務(wù)。

condition還可以表示其它的一類開始執(zhí)行任務(wù)的通知??梢杂煽刂瞥绦蛑付ǎ?dāng)condition出現(xiàn)變化時(shí),開始執(zhí)行隊(duì)列任務(wù)。

場(chǎng)景七:集群監(jiān)控與Leader競(jìng)選

通過(guò)etcd來(lái)進(jìn)行監(jiān)控實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單并且實(shí)時(shí)性強(qiáng)。

前面幾個(gè)場(chǎng)景已經(jīng)提到Watcher機(jī)制,當(dāng)某個(gè)節(jié)點(diǎn)消失或有變動(dòng)時(shí),Watcher會(huì)第一時(shí)間發(fā)現(xiàn)并告知用戶。

節(jié)點(diǎn)可以設(shè)置TTL key,比如每隔30s發(fā)送一次心跳使代表該機(jī)器存活的節(jié)點(diǎn)繼續(xù)存在,否則節(jié)點(diǎn)消失。

這樣就可以第一時(shí)間檢測(cè)到各節(jié)點(diǎn)的健康狀態(tài),以完成集群的監(jiān)控要求。

另外,使用分布式鎖,可以完成Leader競(jìng)選。這種場(chǎng)景通常是一些長(zhǎng)時(shí)間CPU計(jì)算或者使用IO操作的機(jī)器,只需要競(jìng)選出的Leader計(jì)算或處理一次,就可以把結(jié)果復(fù)制給其他的Follower。從而避免重復(fù)勞動(dòng),節(jié)省計(jì)算資源。

這個(gè)的經(jīng)典場(chǎng)景是搜索系統(tǒng)中建立全量索引。如果每個(gè)機(jī)器都進(jìn)行一遍索引的建立,不但耗時(shí)而且建立索引的一致性不能保證。通過(guò)在etcd的CAS機(jī)制同時(shí)創(chuàng)建一個(gè)節(jié)點(diǎn),創(chuàng)建成功的機(jī)器作為L(zhǎng)eader,進(jìn)行索引計(jì)算,然后把計(jì)算結(jié)果分發(fā)到其它節(jié)點(diǎn)。

場(chǎng)景八:為什么用etcd而不用ZooKeeper?

ZooKeeper的部署維護(hù)復(fù)雜,管理員需要掌握一系列的知識(shí)和技能;

而etcd其優(yōu)點(diǎn)也很明顯

簡(jiǎn)單。使用Go語(yǔ)言編寫部署簡(jiǎn)單;使用HTTP作為接口使用簡(jiǎn)單;使用Raft算法保證強(qiáng)一致性讓用戶易于理解。

數(shù)據(jù)持久化。etcd默認(rèn)數(shù)據(jù)一更新就進(jìn)行持久化。

安全。etcd支持SSL客戶端安全認(rèn)證

# 安裝etcd master node01 node02執(zhí)行
mkdir -p /opt/kubernetes/{bin,cfg,ssl}
vim /opt/kubernetes/cfg/etcd.conf
復(fù)制代碼
#[menmber]
ETCD_NAME="etcd01" #分別修改為修改為master node01 ndoe02的名稱
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.1.251:2380" #分別修改為修改為master node01 ndoe02的IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.251:2379" #分別修改為修改為master node01 ndoe02的IP
#[clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.251:2380" #分別修改為修改為master node01 ndoe02的IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.251:2379" #分別修改為修改為master node01 ndoe02的IP
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.1.251:2380,etcd02=https://192.168.1.252:2380,etcd03=https://192.168.1.253:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
復(fù)制代碼
vim /opt/kubernetes/cfg/etcd.service
復(fù)制代碼
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=-/opt/kubernetes/cfg/etcd.conf
ExecStart=/opt/kubernetes/bin/etcd \

--name=${ETCD_NAME} \

--data-dir=${ETCD_DATA_DIR} \

--listen-client-urls=${ETCD_LISTEN_CLIENT_URLS} \

--listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \

--advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \

--initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \

--initial-cluster=${ETCD_INITIAL_CLUSTER} \

--initial-cluster-token=${ETCD_INITIAL_CLUSTER} \

--initial-cluster-state=new \

--cert-file=/opt/kubernetes/ssl/server.pem \

--key-file=/opt/kubernetes/ssl/server-key.pem \

--peer-cert-file=/opt/kubernetes/ssl/server.pem \

--peer-key-file=/opt/kubernetes/ssl/server-key.pem \

--trusted-ca-file=/opt/kubernetes/ssl/ca.pem \

--peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
復(fù)制代碼
#添加免密登錄
ssh-keygen -t rsa
ssh-copy-id root@node01
ssh-copy-id root@node02
#添加啟動(dòng)文件
cp /opt/kubernetes/cfg/etcd.service /usr/lib/systemd/system/etcd.service
#安裝etcd
tar zxvf etcd-v3.2.24-linux-amd64.tar.gz
cp etcd-v3.2.24-linux-amd64/etcd* /opt/kubernetes/bin
#復(fù)制證書文件到指定目錄
cp ca-key.pem server.pem ca.pem server-key.pem /opt/kubernetes/ssl
#啟動(dòng)etcd
systemctl start etcd
systemctl enable etcd
#查看日志
tail -f /var/log/messages
#測(cè)試
etcdctl --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/server.pem --key-file=/opt/kubernetes/ssl/server-key.pem --endpoints="https://192.168.1.251:2379,https://192.168.1.252:2379,https://192.168.1.253:2379" cluster-health

總結(jié)

以上所述是小編給大家介紹的利用二進(jìn)制文件安裝etcd的教程詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

您可能感興趣的文章:
  • Node.js Windows Binary二進(jìn)制文件安裝方法
  • Linux下MySQL5.7.18二進(jìn)制包安裝教程(無(wú)默認(rèn)配置文件my_default.cnf)

標(biāo)簽:商丘 鶴崗 臺(tái)州 哈密 綿陽(yáng) 平頂山 株洲 鎮(zhèn)江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《利用二進(jìn)制文件安裝etcd的教程詳解》,本文關(guān)鍵詞  利用,二進(jìn)制,文件,安裝,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用二進(jìn)制文件安裝etcd的教程詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于利用二進(jìn)制文件安裝etcd的教程詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    雷山县| 伊宁市| 高台县| 黄浦区| 苏尼特左旗| 广州市| 桐乡市| 湟源县| 烟台市| 舒城县| 察隅县| 吴川市| 绥芬河市| 宁河县| 额敏县| 来宾市| 疏勒县| 锡林浩特市| 中宁县| 浙江省| 阿坝县| 读书| 东光县| 哈尔滨市| 永丰县| 邵武市| 武汉市| 沅陵县| 赣州市| 莱芜市| 昌邑市| 买车| 龙门县| 大丰市| 华宁县| 临泉县| 甘泉县| 无棣县| 浪卡子县| 台州市| 驻马店市|