1. 程式人生 > >windows下搭建Consul分散式系統和叢集

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