搭建consul 集群
上圖是官網(wǎng)提供的一個(gè)事例系統(tǒng)圖,圖中的Server是consul服務(wù)端高可用集群,Client是consul客戶(hù)端。consul客戶(hù)端不保存數(shù)據(jù),客戶(hù)端將接收到的請(qǐng)求轉(zhuǎn)發(fā)給響應(yīng)的Server端。Server之間通過(guò)局域網(wǎng)或廣域網(wǎng)通信實(shí)現(xiàn)數(shù)據(jù)一致性。每個(gè)Server或Client都是一個(gè)consul agent。Consul集群間使用了GOSSIP協(xié)議通信和raft一致性算法。上面這張圖涉及到了很多術(shù)語(yǔ):
- Agent——agent是一直運(yùn)行在Consul集群中每個(gè)成員上的守護(hù)進(jìn)程。通過(guò)運(yùn)行 consul agent 來(lái)啟動(dòng)。agent可以運(yùn)行在client或者server模式。指定節(jié)點(diǎn)作為client或者server是非常簡(jiǎn)單的,除非有其他agent實(shí)例。所有的agent都能運(yùn)行DNS或者HTTP接口,并負(fù)責(zé)運(yùn)行時(shí)檢查和保持服務(wù)同步。
- Client——一個(gè)Client是一個(gè)轉(zhuǎn)發(fā)所有RPC到server的代理。這個(gè)client是相對(duì)無(wú)狀態(tài)的。client唯一執(zhí)行的后臺(tái)活動(dòng)是加入LAN gossip池。這有一個(gè)最低的資源開(kāi)銷(xiāo)并且僅消耗少量的網(wǎng)絡(luò)帶寬。
- Server——一個(gè)server是一個(gè)有一組擴(kuò)展功能的代理,這些功能包括參與Raft選舉,維護(hù)集群狀態(tài),響應(yīng)RPC查詢(xún),與其他數(shù)據(jù)中心交互WAN gossip和轉(zhuǎn)發(fā)查詢(xún)給leader或者遠(yuǎn)程數(shù)據(jù)中心。
- DataCenter——雖然數(shù)據(jù)中心的定義是顯而易見(jiàn)的,但是有一些細(xì)微的細(xì)節(jié)必須考慮。例如,在EC2中,多個(gè)可用區(qū)域被認(rèn)為組成一個(gè)數(shù)據(jù)中心?我們定義數(shù)據(jù)中心為一個(gè)私有的,低延遲和高帶寬的一個(gè)網(wǎng)絡(luò)環(huán)境。這不包括訪(fǎng)問(wèn)公共網(wǎng)絡(luò),但是對(duì)于我們而言,同一個(gè)EC2中的多個(gè)可用區(qū)域可以被認(rèn)為是一個(gè)數(shù)據(jù)中心的一部分。
- Consensus——在我們的文檔中,我們使用Consensus來(lái)表明就leader選舉和事務(wù)的順序達(dá)成一致。由于這些事務(wù)都被應(yīng)用到有限狀態(tài)機(jī)上,Consensus暗示復(fù)制狀態(tài)機(jī)的一致性。
- Gossip——Consul建立在Serf的基礎(chǔ)之上,它提供了一個(gè)用于多播目的的完整的gossip協(xié)議。Serf提供成員關(guān)系,故障檢測(cè)和事件廣播。更多的信息在gossip文檔中描述。這足以知道gossip使用基于UDP的隨機(jī)的點(diǎn)到點(diǎn)通信。
- LAN Gossip——它包含所有位于同一個(gè)局域網(wǎng)或者數(shù)據(jù)中心的所有節(jié)點(diǎn)。
- WAN Gossip——它只包含Server。這些server主要分布在不同的數(shù)據(jù)中心并且通常通過(guò)因特網(wǎng)或者廣域網(wǎng)通信。
- RPC——遠(yuǎn)程過(guò)程調(diào)用。這是一個(gè)允許client請(qǐng)求server的請(qǐng)求/響應(yīng)機(jī)制。
在每個(gè)數(shù)據(jù)中心,client和server是混合的。一般建議有3-5臺(tái)server。這是基于有故障情況下的可用性和性能之間的權(quán)衡結(jié)果,因?yàn)樵蕉嗟臋C(jī)器加入達(dá)成共識(shí)越慢。然而,并不限制client的數(shù)量,它們可以很容易的擴(kuò)展到數(shù)千或者數(shù)萬(wàn)臺(tái)。
同一個(gè)數(shù)據(jù)中心的所有節(jié)點(diǎn)都必須加入gossip協(xié)議。這意味著gossip協(xié)議包含一個(gè)給定數(shù)據(jù)中心的所有節(jié)點(diǎn)。這服務(wù)于幾個(gè)目的:第一,不需要在client上配置server地址。發(fā)現(xiàn)都是自動(dòng)完成的。第二,檢測(cè)節(jié)點(diǎn)故障的工作不是放在server上,而是分布式的。這使得故障檢測(cè)相比心跳機(jī)制有更高的可擴(kuò)展性。第三:它用來(lái)作為一個(gè)消息層來(lái)通知事件,比如leader選舉發(fā)生時(shí)。
每個(gè)數(shù)據(jù)中心的server都是Raft節(jié)點(diǎn)集合的一部分。這意味著它們一起工作并選出一個(gè)leader,一個(gè)有額外工作的server。leader負(fù)責(zé)處理所有的查詢(xún)和事務(wù)。作為一致性協(xié)議的一部分,事務(wù)也必須被復(fù)制到所有其他的節(jié)點(diǎn)。因?yàn)檫@一要求,當(dāng)一個(gè)非leader的server收到一個(gè)RPC請(qǐng)求時(shí),它會(huì)將請(qǐng)求轉(zhuǎn)發(fā)給集群leader。
server節(jié)點(diǎn)也作為WAN gossip Pool的一部分。這個(gè)Pool不同于LAN Pool,因?yàn)樗菫榱藘?yōu)化互聯(lián)網(wǎng)更高的延遲,并且它只包含其他Consul server節(jié)點(diǎn)。這個(gè)Pool的目的是為了允許數(shù)據(jù)中心能夠以low-touch的方式發(fā)現(xiàn)彼此。這使得一個(gè)新的數(shù)據(jù)中心可以很容易的加入到現(xiàn)存的WAN gossip。因?yàn)閟erver都運(yùn)行在這個(gè)pool中,它也支持跨數(shù)據(jù)中心請(qǐng)求。當(dāng)一個(gè)server收到來(lái)自另一個(gè)數(shù)據(jù)中心的請(qǐng)求時(shí),它隨即轉(zhuǎn)發(fā)給正確數(shù)據(jù)中心的一個(gè)server。該server再轉(zhuǎn)發(fā)給本地leader。
這使得數(shù)據(jù)中心之間只有一個(gè)很低的耦合,但是由于故障檢測(cè),連接緩存和復(fù)用,跨數(shù)據(jù)中心的請(qǐng)求都是相對(duì)快速和可靠的。
使用Consul也非常簡(jiǎn)單,基本可以做到開(kāi)箱即用
這篇文章《使用C# 和Consul進(jìn)行分布式系統(tǒng)協(xié)調(diào)?》是在單機(jī)上做的, 我們現(xiàn)在要搭建一個(gè)3節(jié)點(diǎn)的集群,本文就是介紹如何搭建一個(gè)3節(jié)點(diǎn)的Consul集群:
1.?? 準(zhǔn)備工作
a)????? 啟動(dòng)三臺(tái)虛擬機(jī)
s1:10.0.0.5
s2:10..0.0.6
s3:10..0.0.7
b)????? 每臺(tái)機(jī)器上在 /usr/local 新建文件夾
mkdir?–p?/usr/local/consul/data
c)????? 下載consul,并將其考入到/usr/local/consul中
下載地址:https://www.consul.io/downloads.html
sudo wget?https://releases.hashicorp.com/consul/0.7.2/consul_0.7.2_linux_amd64.zip
unzip consul_0.7.2_linux_amd64.zip
2.?? 啟動(dòng)server agent
a)????? 進(jìn)入consul目錄中
?????? b)????? 執(zhí)行命令:
sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n1 -bind=10.0.0.5 -client=0.0.0.0 &
注:
i.? server: 以server身份啟動(dòng)。
ii.? bootstrap-expect:集群要求的最少server數(shù)量,當(dāng)?shù)陀谶@個(gè)數(shù)量,集群即失效。
iii.? data-dir:data存放的目錄,更多信息請(qǐng)參閱consul數(shù)據(jù)同步機(jī)制
iv.? node:節(jié)點(diǎn)id,在同一集群不能重復(fù)。
v.?? bind:監(jiān)聽(tīng)的ip地址。
vi.? client 客戶(hù)端的ip地址
vii.? &? :在后臺(tái)運(yùn)行,此為linux腳本語(yǔ)法
vii.? 更多參數(shù)及配置說(shuō)明見(jiàn)consul官方說(shuō)明文檔https://www.consul.io/docs/agent/options.html。
????? c)????? 修改node和bind信息,分別在另外兩臺(tái)機(jī)器中執(zhí)行 上面命令。
sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n2 -bind=10.0.0.6 -client=0.0.0.0 &
sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.5 -client=0.0.0.0 &
d)????? 在s2、s3中分別執(zhí)行:
./consul?join?10.0.0.7
到這里整個(gè)consul server 集群就算完成了,可以利用consul members查看集群中包含的node信息。使用consul info命令可以查看當(dāng)前節(jié)點(diǎn)狀態(tài),包括是否在集群中,是否為leader(主)。
3.?? 搭建管理工具
consul自帶的WEB UI,Web ui是consul提供的可視化的服務(wù)web界面,可以對(duì)key/value和服務(wù)、節(jié)點(diǎn)進(jìn)行操作
a)????? 下載consul web ui(包含一個(gè)html和一個(gè)static文件件),和本機(jī)中的consul放到同級(jí)目錄。
b)???? 在本機(jī)啟動(dòng)consul,需要設(shè)置-ui-dir ./webui
sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n3 -bind=10.0.0.7 -ui-dir=webui -client 0.0.0.0 &
打開(kāi)瀏覽器訪(fǎng)問(wèn)8500 端口:
總結(jié)
以上是生活随笔為你收集整理的搭建consul 集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 动态管理配置文件扩展接口Environm
- 下一篇: 【Consul】Consul架构-Gos