文章出處

consulcluster

上圖是官網提供的一個事例系統圖,圖中的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也非常簡單,基本可以做到開箱即用

這篇文章《使用C# 和Consul進行分布式系統協調 》是在單機上做的, 我們現在要大家一個3節點的集群,本文就是介紹如何搭建一個3節點的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

  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.   啟動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 &

注:
i.  server: 以server身份啟動。
ii.  bootstrap-expect:集群要求的最少server數量,當低于這個數量,集群即失效。
iii.  data-dir:data存放的目錄,更多信息請參閱consul數據同步機制
iv.  node:節點id,在同一集群不能重復。
v.   bind:監聽的ip地址。
vi.  client 客戶端的ip地址
vii.  &  :在后臺運行,此為linux腳本語法
vii.  更多參數及配置說明見consul官方說明文檔https://www.consul.io/docs/agent/options.html

      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和服務、節點進行操作

  a)      下載consul web ui(包含一個html和一個static文件件),和本機中的consul放到同級目錄。

  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 端口:

image


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()