windows下搭建Consul分散式系統和叢集
隨著大資料時代的到來,分散式是解決大資料問題的一個主要手段,隨著越來越多的分散式的服務,如何在分散式的系統中對這些服務做協調變成了一個很棘手的問題。我們在一個專案上註冊了很多服務,在進行運維時,需要時刻關注服務的執行狀態,統一管理。統一配置。今天我們就來看看如何使用C# ,利用開源對分散式服務做協調。
在對分散式的應用做協調的時候,主要會碰到以下的應用場景:
- 業務發現(service discovery)
找到分散式系統中存在那些可用的服務和節點
- 名字服務 (name service)
通過給定的名字知道到對應的資源
- 配置管理 (configuration management)
如何在分散式的節點中共享配置檔案,保證一致性。
- 故障發現和故障轉移 (failure detection and failover)
當某一個節點出故障的時候,如何檢測到並通知其它節點, 或者把想用的服務轉移到其它的可用節點
- 領導選舉(leader election)
如何在眾多的節點中選舉一個領導者,來協調所有的節點
- 分散式的鎖 (distributed exclusive lock)
如何通過鎖在分散式的服務中進行同步
- 訊息和通知服務 (message queue and notification)
如何在分散式的服務中傳遞訊息,以通知的形式對事件作出主動的響應
Consul
Consul是用Go開發的分散式服務協調管理的工具,它提供了服務發現,健康檢查,Key/Value儲存等功能,並且支援跨資料中心的功能。consul提供的一些關鍵特性:
- service discovery:consul通過DNS或者HTTP介面使服務註冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣註冊。
-
health checking:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的整合,可以防止服務轉發到故障的服務上面。
- key/value storage:一個用來儲存動態配置的系統。提供簡單的HTTP介面,可以在任何地方操作。
- multi-datacenter:無需複雜的配置,即可支援任意數量的區域。
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的存在。
WEB UI
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叢集:搭建叢集最好使用三臺以上搭建叢集。但現在為了測試叢集,我們只使用了兩臺機器搭建叢集。一臺是本機,另一臺則是伺服器。
1、首先遠端登陸伺服器:以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 &
2、本機啟動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
隨著大資料時代的到來,分散式是解決大資料問題的一個主要手段,隨著越來越多的分散式的服務,如何在分散式的系統中對這些服務做協調變成了一個很棘手的問題。我們在一個專案上註冊了很多服務,在進行運維時,需要時刻關注服務的執行狀態,統一管理。統一配置。今天我們就來看看如何使用C# ,利用開源對分散式服務做協調。
在對分散式的應用做協調的時候,主要會碰到以下的應用場景:
- 業務發現(service discovery)
找到分散式系統中存在那些可用的服務和節點
- 名字服務 (name service)
通過給定的名字知道到對應的資源
- 配置管理 (configuration management)
如何在分散式的節點中共享配置檔案,保證一致性。
- 故障發現和故障轉移 (failure detection and failover)
當某一個節點出故障的時候,如何檢測到並通知其它節點, 或者把想用的服務轉移到其它的可用節點
- 領導選舉(leader election)
如何在眾多的節點中選舉一個領導者,來協調所有的節點
- 分散式的鎖 (distributed exclusive lock)
如何通過鎖在分散式的服務中進行同步
- 訊息和通知服務 (message queue and notification)
如何在分散式的服務中傳遞訊息,以通知的形式對事件作出主動的響應
Consul
Consul是用Go開發的分散式服務協調管理的工具,它提供了服務發現,健康檢查,Key/Value儲存等功能,並且支援跨資料中心的功能。consul提供的一些關鍵特性:
- service discovery:consul通過DNS或者HTTP介面使服務註冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣註冊。
- health checking:健康檢測使consul可以快速的告警在叢集中的操作。和服務發現的整合,可以防止服務轉發到故障的服務上面。
- key/value storage:一個用來儲存動態配置的系統。提供簡單的HTTP介面,可以在任何地方操作。
- multi-datacenter:無需複雜的配置,即可支援任意數量的區域。
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的存在。
WEB UI
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叢集:搭建叢集最好使用三臺以上搭建叢集。但現在為了測試叢集,我們只使用了兩臺機器搭建叢集。一臺是本機,另一臺則是伺服器。
1、首先遠端登陸伺服器:以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 &
2、本機啟動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