首頁 > 軟體

Linux環境下部署Consul叢集

2022-04-08 19:01:23

1.Consul概念

1.1什麼是Consul?

Consul是一種服務網格解決方案,是HashiCorp公司推出的開源元件,由Go語言開發,部署起來很容易,只需要極少的可執行程式和設定。同時Consul也是一個分散式的,高度可用的系統,它附帶了一個簡單的內建代理,開箱即用,也支援Envoy等第三方代理整合,它還提供了具有服務發現,設定和分段功能。

1.2Consul的特點

  • 服務發現(Service Discovery):Consul提供了通過DNS或者HTTP介面的方式來註冊服務和發現服務。一些應用程式通過Consul很容易的找到它所依賴的服務。
  • 健康檢查(Health Checking):Consul的Client可以提供任何數量的健康檢查,這些健康檢查與應用服務(“ Web伺服器是否返回200 OK”)或本地節點(“記憶體利用率低於90%”)相關聯。操作員可以使用此資訊來監視叢集的健康狀況,通過服務發現元件監控,避免流量路由到健康狀況不佳的應用主機中。
  • Key/Value儲存(Key/Value Store):應用程式可以根據自己的需求使用Consul提供的Key/Value儲存。Consul提供了簡單易用的HTTP介面,結合其他工具可以實現動態設定(dynamic configuration)、功能標記(feature flagging)、協調(coordination)、領袖選舉( leader election)等等功能。
  • 安全的服務通訊(Secure Service Communication):Consul可以為服務生成和分發TLS證書,以建立相互的TLS連線。意圖可用於定義允許哪些服務通訊。服務分割可以很容易地進行管理,其目的是可以實時更改的,而不是使用複雜的網路拓撲和靜態防火牆規則。
  • 多資料中心(Multi Datacenter):Consul支援開箱即用的多資料中心。這意味著使用者不需要擔心需要建立額外的抽象層讓業務擴充套件到多個區域。

1.3Consul架構

根據這幅圖可以看到有兩個資料中心,分別為DataCenter1和DataCenter2。Consul擁有對多個資料中心的一流支援,這是比較常見的情況。

在每個資料中心中,我們都有使用者端和伺服器。最好是有三到五臺伺服器,這對於在故障情況下的可用性和效能之間取得了平衡,因為隨著新增更多的機器,一致性會逐漸變慢。但是,使用者端的數量沒有限制,可以很容易地擴充套件到數千或數萬。

Consul實現多個資料中心都依賴於gossip protocol協定。這樣做有幾個目的:首先,不需要使用伺服器的地址來設定使用者端;服務發現是自動完成的。其次,健康檢查故障的工作不是放在伺服器上,而是分散式的。這使得故障檢測比單純的心跳模式更具可伸縮性。為節點提供故障檢測;如果無法存取代理,則節點可能經歷了故障。

每個資料中心中的伺服器都是一個Raft對等集的一部分。這意味著它們一起工作來選舉單個leader,一個被選中的伺服器有額外的職責。領導負責處理所有的查詢和事務。事務還必須作為協商一致協定的一部分複製到所有對等方。由於這個需求,當非leader伺服器接收到RPC請求時,它會將其轉發給叢集leader。

1.4Consul的應用場景包括服務發現、服務隔離與服務設定

  • 服務發現場景中consul作為註冊中心,服務地址被註冊到consul中以後,可以使用consul提供的dns、http介面查詢,consul支援health check。
  • 服務隔離場景中consul支援以服務為單位設定存取策略,能同時支援經典的平臺和新興的平臺,支援tls證書分發,service-to-service加密。
  • 服務設定場景中consul提供key-value資料儲存功能,並且能將變動迅速地通知出去,藉助Consul可以實現設定共用,需要讀取設定的服務可以從Consul中讀取到準確的設定資訊。
  • Consul可以幫助系統管理者更清晰的瞭解複雜系統內部的系統架構,運維人員可以將Consul看成一種監控軟體,也可以看成一種資產(資源)管理系統。

2.Consul在linux上的叢集部署

在consul官網(https://www.consul.io/downloads)上下載linux系統元件的最新版本,範例版本是1.8.5:

2.1前期準備

在虛擬機器器上準備三臺CentOS:

CentOS 7-No.1:192.168.113.128
CentOS 7-No.2:192.168.113.129
CentOS 7-No.3:192.168.113.130

通過Xftp(或者其他工具)把解壓好的consul元件分別上傳到三臺linux伺服器裡面,元件安裝目錄隨自己喜好,我是放在/root目錄裡面的:

2.2叢集部署

通過Xshell(或者其他工具)輸入命令安裝叢集,先在三臺伺服器上切換到安裝目錄:

cd /root/consul_1.8.5_linux_amd64

然後分別在三臺伺服器上輸入如下命令啟動對應的Consul元件:

192.168.113.128:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server1 -bind=192.168.113.128 -client=0.0.0.0 -datacenter=myservicedc1 -ui
192.168.113.129:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server2 -bind=192.168.113.129 -client=0.0.0.0 -datacenter myservicedc1
192.168.113.130:./consul agent -server -bootstrap-expect=3 -data-dir=/root/consul_1.8.5_linux_amd64 -node=server3 -bind=192.168.113.130 -client=0.0.0.0 -datacenter myservicedc1

如果報執行許可權不夠(Permission denied),執行如下命令授予執行許可權:

//授予執行許可權
chmod +x consul

代理設定引數如下,想要了解更加詳細設定引數也可以到官網檔案(https://www.consul.io/docs/agent/options)查詢:

  • -server:此標誌用於控制代理是處於伺服器還是使用者端模式。提供後,代理將充當Consul伺服器。
  • -bootstrap-expect:叢集要求的最少server數量,當低於這個數量,叢集即失效。
  • -data-dir:data儲存目錄路徑。
  • -node:節點id,叢集中的每個node必須有一個唯一的名稱。預設情況下,Consul使用機器的hostname。
  • -bind:監聽的ip地址。預設繫結0.0.0.0,可以不指定。表示Consul監聽的地址,而且它必須能夠被叢集中的其他節點存取。Consul預設會監聽第一個Private IP,但最好還是提供一個。生產裝置上的伺服器通常有好幾個網路卡,所以指定一個不會出錯。
  • -client:使用者端的ip地址,0.0.0.0是指誰都可以存取(不加這個,下面的ui :8500無法存取)。
  • -ui:可以存取Consul UI管理介面。
  • -config-dir:指定組態檔夾,Consul會載入其中的所有檔案。
  • -datacenter:指定資料中心名稱,預設是dc1。

啟動Consul叢集元件後,會看到如下資訊(No cluster leader):

這是因為叢集沒有指定一個leader,所以需要在128、129跟130伺服器上之間指定一個為leader。因為這裡我指定了128伺服器為leader,所以需要在129、130伺服器上輸入如下命令加入以128為leader的Consul叢集:

./consul join 192.168.113.128

輸入命令後會看到如下資訊:

這樣說明129、130伺服器的Consul元件加入叢整合功!以下再列舉下如何檢視叢整合員跟狀況的命令:

  • 檢視叢整合員
./consul members
  • 檢視叢集狀況
./consul operator raft list-peers

在瀏覽器上輸入leader的Consul地址存取:

通過上述範例圖片可以看到,Consul叢集部署成功!

到此這篇關於Linux環境下部署Consul叢集的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com