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

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM