《云計(jì)算與虛擬化技術(shù)叢書 Service Mesh實(shí)戰(zhàn)》—3.2.2服務(wù)發(fā)現(xiàn):Consul
3.2.2 服務(wù)發(fā)現(xiàn):Consul
1. Consul簡(jiǎn)介
第2章我們談到使用基于文件的服務(wù)發(fā)現(xiàn)方法,但是由于一些原因可能導(dǎo)致高CPU使用率,影響Linkerd的性能,因此不推薦在產(chǎn)線環(huán)境使用該方法。而本節(jié)我們將引入一個(gè)在產(chǎn)線被廣泛使用的服務(wù)發(fā)現(xiàn)工具Consul,Consul同Vagrant一樣也是Hashicorp公司旗下主要產(chǎn)品之一,集服務(wù)發(fā)現(xiàn)、服務(wù)健康監(jiān)測(cè)、鍵值對(duì)數(shù)據(jù)庫(kù),支持跨數(shù)據(jù)中心服務(wù)發(fā)現(xiàn)的高可用分布式系統(tǒng)。
Consul Agent
Consul Agent是Consul集群中每個(gè)機(jī)器上長(zhǎng)時(shí)間運(yùn)行的守護(hù)進(jìn)程,其運(yùn)行模式可分為server模式或client模式運(yùn)行,Consul Agent只能以一種模式運(yùn)行,要么server模式,要么client模式。
Consul Client(client模式)
Consul Client接收請(qǐng)求方發(fā)起的請(qǐng)求并轉(zhuǎn)發(fā)RPC請(qǐng)求到Consul Server(server模式),然后將Consul Server返回結(jié)果傳遞給請(qǐng)求方,此外,Consul Client加入局域網(wǎng)(LAN)Gossip池以提供成員關(guān)系管理、錯(cuò)誤檢測(cè)以及事件廣播。
Consul Server(server模式)
Consul Server維護(hù)整個(gè)Consul集群的運(yùn)行狀態(tài),選擇leader,響應(yīng)Consul Client的RPC請(qǐng)求,不同數(shù)據(jù)中心間萬(wàn)網(wǎng)(WAN)Gossip信息交換以及跨數(shù)據(jù)中心請(qǐng)求轉(zhuǎn)發(fā)。
數(shù)據(jù)中心
每個(gè)Consul集群對(duì)應(yīng)一個(gè)邏輯或者物理的數(shù)據(jù)中心。
Consul架構(gòu)(如圖3-2所示)
圖3-2 Consul架構(gòu)
由于本章重點(diǎn)介紹如何配置Linkerd,所以如果你需要了解更多關(guān)于Consul的知識(shí),可參考Consul官方文檔(https://www.consul.io/docs/index.html)。
2. 基于Docker部署Consul
根據(jù)上述內(nèi)容,演示環(huán)境中只有三臺(tái)虛擬機(jī),為此我們約定在其中一臺(tái)虛擬機(jī)部署Consul Server,另外兩臺(tái)部署Consul Client,為了方便后續(xù)講解,我們約定linkerd01部署Consul Server,linkerd02和linkerd03部署Consul Client,部署命令為:
# 部署Consul Server到linkerd01
# BIND_ADDR=$(ip addr show|grep eth1|grep inet|awk ‘{print }’|cut -d’/’ -f1);\
docker run -d \
--net=host \
--name server \
consul:1.0.5 agent -server -bootstrap -client=0.0.0.0 -bind=$BIND_ADDR
# 部署Consul Client到linkerd02和linkerd03,192.168.1.11為linkerd01的地址,也是Consul Leader地址
# BIND_ADDR=$(ip addr show|grep eth1|grep inet|awk ‘{print }’|cut -d’/’ -f1);\
docker run -d \
--net=host \
--name client \
consul:1.0.5 agent -bind=$BIND_ADDR -join=192.168.1.11
完成部署后,可查看Consul集群信息:
# docker exec server consul members
Node? ? ? ?Address? ? ? ? ? ? Status? Type? ? Build? Protocol? DC? ?Segment
Linkerd01? 192.168.1.11:8301? alive? ?server? 1.0.5? 2? ? ? ? ?dc1?
Linkerd02? 192.168.1.12:8301? alive? ?client? 1.0.5? 2? ? ? ? ?dc1?
Linkerd03? 192.168.1.13:8301? alive? ?client? 1.0.5? 2? ? ? ? ?dc1?
默認(rèn)Consul數(shù)據(jù)中心為dc1,所有注冊(cè)到Consul中服務(wù)DNS域?yàn)閟ervice.consul,比如注冊(cè)服務(wù)booking到Consul,則其DNS記錄為booking.service.consul。
注意
(1)演示環(huán)境中部署一臺(tái)Consul Server以作演示之用,而實(shí)際產(chǎn)線環(huán)境中至少需要部署三臺(tái)Consul Server以確保集群高可用。
(2)我們約定演示環(huán)境中Consul版本為1.0.5。
3. 部署Dnsmasq
另外,需要在每臺(tái)機(jī)器部署Dnsmasq,用作Consul DNS緩存,使得所有Consul服務(wù)域名的DNS請(qǐng)求轉(zhuǎn)發(fā)到本地Dnsmasq加速Consul服務(wù)域名解析。具體安裝命令及配置參考provision.sh,并且在啟動(dòng)虛擬機(jī)時(shí)自動(dòng)安裝。
虛擬化 Go 云計(jì)算
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。