(1)Consul在linux環境的集羣部署

1.Consul概念

1.1什麼是Consul?

Consul是一種服務網格解決方案,是HashiCorp公司推出的開源組件,由Go語言開發,部署起來很容易,只須要極少的可執行程序和配置。同時Consul也是一個分佈式的,高度可用的系統,它附帶了一個簡單的內置代理,開箱即用,也支持Envoy等第三方代理集成,它還提供了具備服務發現,配置和分段功能。node

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支持開箱即用的多數據中心。這意味着用戶不須要擔憂須要創建額外的抽象層讓業務擴展到多個區域。linux

1.3Consul架構

根據這幅圖能夠看到有兩個數據中心,分別爲DataCenter1和DataCenter2。Consul擁有對多個數據中心的一流支持,這是比較常見的狀況。
在每一個數據中心中,咱們都有客戶端和服務器。最好是有三到五臺服務器,這對於在故障狀況下的可用性和性能之間取得了平衡,由於隨着添加更多的機器,一致性會逐漸變慢。可是,客戶端的數量沒有限制,能夠很容易地擴展到數千或數萬。
Consul實現多個數據中心都依賴於gossip protocol協議。這樣作有幾個目的:首先,不須要使用服務器的地址來配置客戶端;服務發現是自動完成的。其次,健康檢查故障的工做不是放在服務器上,而是分佈式的。這使得故障檢測比單純的心跳模式更具可伸縮性。爲節點提供故障檢測;若是沒法訪問代理,則節點可能經歷了故障。
每一個數據中心中的服務器都是一個Raft對等集的一部分。這意味着它們一塊兒工做來選舉單個leader,一個被選中的服務器有額外的職責。領導負責處理全部的查詢和事務。事務還必須做爲協商一致協議的一部分複製到全部對等方。因爲這個需求,當非leader服務器接收到RPC請求時,它會將其轉發給集羣leader。shell

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

●服務發現場景中consul做爲註冊中心,服務地址被註冊到consul中之後,可使用consul提供的dns、http接口查詢,consul支持health check。
●服務隔離場景中consul支持以服務爲單位設置訪問策略,能同時支持經典的平臺和新興的平臺,支持tls證書分發,service-to-service加密。
●服務配置場景中consul提供key-value數據存儲功能,而且能將變更迅速地通知出去,藉助Consul能夠實現配置共享,須要讀取配置的服務能夠從Consul中讀取到準確的配置信息。
●Consul能夠幫助系統管理者更清晰的瞭解複雜系統內部的系統架構,運維人員能夠將Consul當作一種監控軟件,也能夠當作一種資產(資源)管理系統。bootstrap

2.Consul在linux上的集羣部署

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

2.1前期準備

在虛擬機上準備三臺CentOS:安全

CentOS 7-No.1192.168.113.128
CentOS 7-No.2192.168.113.129
CentOS 7-No.3192.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,因此須要在12八、129跟130服務器上之間指定一個爲leader。由於這裏我指定了128服務器爲leader,因此須要在12九、130服務器上輸入以下命令加入以128爲leader的Consul集羣:

./consul join 192.168.113.128

輸入命令後會看到以下信息:

這樣說明12九、130服務器的Consul組件加入集羣成功!如下再列舉下如何查看集羣成員跟情況的命令:
●查看集羣成員

./consul members

●查看集羣情況

./consul operator raft list-peers

在瀏覽器上輸入leader的Consul地址訪問:

經過上述示例圖片能夠看到,Consul集羣部署成功!

參考文獻:
Consul官網
5分鐘讓你看懂Consul特性及搭建

相關文章
相關標籤/搜索