搭建consul 集群

2021-09-23 09:22:56 字數 3520 閱讀 1721

上圖是官網提供的乙個事例系統圖,圖中的server是consul服務端高可用集群,client是consul客戶端。consul客戶端不儲存資料,客戶端將接收到的請求**給響應的server端。server之間通過區域網或廣域網通訊實現資料一致性。每個server或client都是乙個consul agent。consul集群間使用了gossip協議通訊和raft一致性演算法。上面這張圖涉及到了很多術語:

agent——agent是一直執行在consul集群中每個成員上的守護程序。通過執行 consul agent 來啟動。agent可以執行在client或者server模式。指定節點作為client或者server是非常簡單的,除非有其他agent例項。所有的agent都能執行dns或者http介面,並負責執行時檢查和保持服務同步。

client——乙個client是乙個**所有rpc到server的**。這個client是相對無狀態的。client唯一執行的後台活動是加入lan gossip池。這有乙個最低的資源開銷並且僅消耗少量的網路頻寬。

server——乙個server是乙個有一組擴充套件功能的**,這些功能包括參與raft選舉,維護集群狀態,響應rpc查詢,與其他資料中心互動wan gossip和**查詢給leader或者遠端資料中心。

datacenter——雖然資料中心的定義是顯而易見的,但是有一些細微的細節必須考慮。例如,在ec2中,多個可用區域被認為組成乙個資料中心?我們定義資料中心為乙個私有的,低延遲和高頻寬的乙個網路環境。這不包括訪問公共網路,但是對於我們而言,同乙個ec2中的多個可用區域可以被認為是乙個資料中心的一部分。

consensus——在我們的文件中,我們使用consensus來表明就leader選舉和事務的順序達成一致。由於這些事務都被應用到有限狀態機上,consensus暗示複製狀態機的一致性。

gossip——consul建立在serf的基礎之上,它提供了乙個用於多播目的的完整的gossip協議。serf提供成員關係,故障檢測和事件廣播。更多的資訊在gossip文件中描述。這足以知道gossip使用基於udp的隨機的點到點通訊。

lan gossip——它包含所有位於同乙個區域網或者資料中心的所有節點。

wan gossip——它只包含server。這些server主要分布在不同的資料中心並且通常通過網際網路或者廣域網通訊。

rpc——遠端過程呼叫。這是乙個允許client請求server的請求/響應機制。

在每個資料中心,client和server是混合的。一般建議有3-5臺server。這是基於有故障情況下的可用性和效能之間的權衡結果,因為越多的機器加入達成共識越慢。然而,並不限制client的數量,它們可以很容易的擴充套件到數千或者數萬臺。

同乙個資料中心的所有節點都必須加入gossip協議。這意味著gossip協議包含乙個給定資料中心的所有節點。這服務於幾個目的:第一,不需要在client上配置server位址。發現都是自動完成的。第二,檢測節點故障的工作不是放在server上,而是分布式的。這是的故障檢測相比心跳機制有更高的可擴充套件性。第三:它用來作為乙個訊息層來通知事件,比如leader選舉發生時。

每個資料中心的server都是raft節點集合的一部分。這意味著它們一起工作並選出乙個leader,乙個有額外工作的server。leader負責處理所有的查詢和事務。作為一致性協議的一部分,事務也必須被複製到所有其他的節點。因為這一要求,當乙個非leader得server收到乙個rpc請求時,它將請求**給集群leader。

server節點也作為wan gossip pool的一部分。這個pool不同於lan pool,因為它是為了優化網際網路更高的延遲,並且它只包含其他consul server節點。這個pool的目的是為了允許資料中心能夠以low-touch的方式發現彼此。這使得乙個新的資料中心可以很容易的加入現存的wan gossip。因為server都執行在這個pool中,它也支援跨資料中心請求。當乙個server收到來自另乙個資料中心的請求時,它隨即**給正確資料中想乙個server。該server再**給本地leader。

這使得資料中心之間只有乙個很低的耦合,但是由於故障檢測,連線快取和復用,跨資料中心的請求都是相對快速和可靠的。

使用consul也非常簡單,基本可以做到開箱即用

1. 準備工作

a) 啟動三颱虛擬機器

s1:10.0.0.5

s2:10..0.0.6

s3:10..0.0.7

b) 每台機器上在 /usr/local 新建資料夾    

mkdir –p /usr/local/consul/data

sudo wget

2. 啟動server agent

a) 進入consul目錄中

b) 執行命令:

sudo ./consul agent -server -bootstrap-expect 2 -data-dir=data -node=n1 -bind=10.0.0.5 -client=0.0.0.0 &
注:

server: 以server身份啟動。

bootstrap-expect:集群要求的最少server數量,當低於這個數量,集群即失效。

node:節點id,在同一集群不能重複。

client 客戶端的ip位址

& :在後台執行,此為linux指令碼語法

更多引數及配置說明見consul官方說明文件

c) 修改node和bind資訊,分別在另外兩台機器中執行 上面命令。

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中分別執行:

./consul join 10.0.0.7
到這裡整個consul server 集群就算完成了,可以利用consul members檢視集群中包含的node資訊。使用consul info命令可以檢視當前節點狀態,包括是否在集群中,是否為leader(主)。

3. 搭建管理工具

consul自帶的web ui,web ui是consul提供的視覺化的服務web介面,可以對key/value和服務、節點進行操作

b) 在本機啟動consul,需要設定-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 &

開啟瀏覽器訪問8500 埠:

搭建Consul集群

wget unzip consul 1.6.3 linux amd64.zip解壓後,只有乙個consul可執行的檔案,將其拷貝到想要安裝的目錄中 mv consul opt 完成consul的安裝後,必須執行agent。agent可以執行為server或client模式。每個資料中心至少必須擁有一...

搭建consul 集群

consul 安裝 1 離線安裝 a 上傳consul檔案到 usr local bin 目錄 d 訪問ip 8080 e 訪問ip 8080 3 consul集群搭建 進入 192.168.1.9的機器 a cd usr local bin b consul agent server ui boo...

Consul 集群搭建

搭建集群 啟動node1機器上的consul node1機器上執行 consul agent data dir tmp node1 node node1 bind 192.168.0.11 datacenter dc1 ui client 192.168.0.11 server bootstrap ...