隨着大數據時代的到來,分佈式是解決大數據問題的一個主要手段,隨着愈來愈多的分佈式的服務,如何在分佈式的系統中對這些服務作協調變成了一個很棘手的問題。咱們在一個項目上註冊了不少服務,在進行運維時,須要時刻關注服務的運行狀態,統一管理。統一配置。今天咱們就來看看如何使用C# ,利用開源對分佈式服務作協調。html
在對分佈式的應用作協調的時候,主要會碰到如下的應用場景:node
找到分佈式系統中存在那些可用的服務和節點linux
經過給定的名字知道到對應的資源git
如何在分佈式的節點中共享配置文件,保證一致性。github
當某一個節點出故障的時候,如何檢測到並通知其它節點, 或者把想用的服務轉移到其它的可用節點web
如何在衆多的節點中選舉一個領導者,來協調全部的節點json
如何經過鎖在分佈式的服務中進行同步bootstrap
如何在分佈式的服務中傳遞消息,以通知的形式對事件做出主動的響應windows
Consul瀏覽器
Consul是用Go開發的分佈式服務協調管理的工具,它提供了服務發現,健康檢查,Key/Value存儲等功能,而且支持跨數據中心的功能。consul提供的一些關鍵特性:
Consul基於HTTP的API能夠方便的和各類語言進行綁定,C# 語言綁定https://github.com/PlayFab/consuldotnet
Consul在Cluster上的每個節點都運行一個Agent,這個Agent可使用Server或者Client模式。Client負責到Server的高效通訊,相對爲無狀態的。 Server負責包括選舉領導節點,維護cluster的狀態,對全部的查詢作出響應,跨數據中心的通訊等等。
consul官網已經有編譯好的二進制包,支持各類平臺:win、linux等等,下載符合你平臺的軟件包:https://www.consul.io/,下載包:0.5.2_windows_386.zip。解壓完畢後只有一個consul文件。
我解壓到桌面,而後用命令行進行安裝,執行命令:C:\Users\Administrator\Desktop\consul>consul.exe
安裝完成後,agent就能夠啓動了。agent能夠運行在server或者client模式,每一個數據中心至少有一個agent運行在server模式,通常建議是3或者5個server。部署單個server是很是很差的,由於在失敗場景中出現數據丟失是不可避免的。本文涵蓋的是建立一個新的數據中心,全部其餘的agents都運行在client模式,這是一個很是輕量級的服務註冊進程,它會運行健康監測,並將查詢結果轉發到服務。agent必須運行在集羣中的每個節點上。
咱們在consul目錄下輸入:consul agent -server -bootstrap-expect 2 -data-dir C:\Users\Administrator\Desktop\consul -node=n1 -bind=10.7.19.148
其中:-bootstrap-expect 2(表示在兩個集羣中選擇一個leader,改成1的話,那就是默認本身爲leader);
-server (表示agent是以服務器的方式進行啓動)
-bind=10.7.19.148(綁定的是本機的地址)
-node=n1(表示啓動時設置的節點名稱,這裏節點名爲n1)
-data-dir C:\Users\Administrator\Desktop\consul(表示consul的文件路徑)
若是去掉-server,也就是啓動命令改成:consul agent -data-dir C:\Users\Administrator\Desktop\consul -node=n3 -bind=10.7.19.148 -dc=dc1 即是也client的方式進行啓動。
在日誌中咱們會發現它會提示沒有發現 Consul servers的存在。
consul一樣也支持web界面,這個UI能夠用來查看全部的服務和節點,全部的健康檢測和它們當前的狀態,讀取設置K/V系統的值。UI默認自動支持多datacenter。這些UI是靜態html你不須要單獨運行一個web服務器,consul agent自己能夠配置一個web服務。
下載UI組件:WEB UI
下載完成後是一個0.5.2_WEB_UI.zip壓縮文件,解壓後是一個dist目錄。而後添加-ui-dir參數和以-server方式進行啓動agent。
ui加載到配置命令:
C:\Users\Administrator\Desktop\consul>consul agent -server -data-dir C:\Users\Administrator\Desktop\consul -node=n3 -bind=10.7.19.148 -dc=dc1 -config-file=web.json -ui-dir C:\Users\Administrator\Desktop\consul\dist
其中-config-file對應的配置文件是web.json,(是以配置文件的方式註冊服務)內容格式以下:
{ "log_level": "TRACE", "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==", "service": { "name": "web4", "tags": ["master"], "address": "127.0.0.1", "port": 8500, "checks": [ { "http": "http://127.0.0.1:8500/healthcheck", "interval": "10s" } ] } }
在瀏覽器中輸入http://127.0.0.1:8500,便可訪問UI了,其中consul服務,是他自帶的服務。
搭建Consul集羣:搭建集羣最好使用三臺以上搭建集羣。但如今爲了測試集羣,咱們只使用了兩臺機器搭建集羣。一臺是本機,另外一臺則是服務器。
一、首先遠程登錄服務器:以Server模式並指定本身爲leader進行啓動服務器。我將consul文件拷貝到服務器的c:\consul根目錄下。執行命令:
consul agent -server -bootstrap-expect 1 -data-dir C:\consul -node=n1 -bind=10.8.101.6 -ui-dir C:\consul\dist -dc=dc1 -client=0.0.0.0 &
二、本機啓動consul,執行命令:
consul agent -server -bootstrap-expect 2 -data-dir C:\Users\Administrator\Desktop\consul -node=n4 -bind=10.7.19.148 -ui-dir C:\Users\Administrator\Desktop\consul\dist -dc=dc1 -client=0.0.0.0 &
在服務器上再開啓一個命令窗口,切換到consul文件路徑下。執行命令:
consul join 10.7.19.148
成功後,再執行命令:
consul members
會顯示兩個成員,以下:
原本是打算用兩臺服務器搭建集羣的,可是他們join會失敗,顯示遠程機器拒絕它,入站規則添加了也沒有用。由於這是雲服務器。因此多是一些設置問題。
集羣搭建起來之後,經過http://127.0.0.1:8500/ui/,咱們能夠看到兩個node節點,分別表明本機和服務器。
從nuget上下載consul包,裏面包含consul的全部操做。下載下來進行調試測試。裏面的服務註冊,服務發現,健康檢查,key-value 等全部操做都有對應的方法。
源碼地址:https://github.com/PlayFab/consuldotnet/。
參考文獻:http://www.cnblogs.com/ruanyifeng/p/5550102.html
http://www.cnblogs.com/ylsforever/p/6110481.html
Consul中文翻譯計劃:http://consul.la/intro/getting-started/checks