.netcore consul實現服務註冊與發現-叢集部署

來源:互聯網
上載者:User

標籤:exp   data   cas   需要   一半   協助   lis   啟動   兩台   

一、Consul的叢集介紹

   Consul Agent有兩種運行模式:ServerClient。這裡的Server和Client只是Consul叢集層面的區分,與搭建在Cluster之上的應用服務無關, 以Server模式啟動並執行Consul Agent節點用於維護Consul叢集的狀態,官方建議每個Consul Cluster至少有3個或以上的運行在Server Mode的Agent,Client節點不限。

 

1、Server節點需要三台或以上機器

2、Client節點不限

 

二、Consul環境準備

準備了三台Linux(CentOS)虛擬機器(Consul Server)二台Linux(CentOS)虛擬機器(Consul Client

Consul Server服務IP分別為:

192.168.31.175

192.168.31.176

192.168.31.177

Consul Client服務IP分別為:

192.168.31.178

192.168.31.179

 

其中,192.168.31.175會作為leader角色,其餘兩台192.168.31.176和192.168.31.177會作為follower角色。當然,實際環境中leader角色不會是一個固定的,會隨著環境的變化(比如Leader宕機或失聯)由演算法選出新的leader。在進行下面的操作會前,請確保三台節點能夠相互ping通,並能夠和宿主機也ping通。另外,192.168.31.178和192.168.31.179會作為client角色,並且和其餘三台虛擬機器互相ping通。

三、Consul正式安裝

可以參考上一篇文章的安裝方法:.netcore consul實現服務註冊與發現-單台節點

一定保證以上五台安裝成功

1、測試Consul是否安裝成功

> consul

如表示成功:

?

2、Consul Server服務端安裝(啟動與配置Consul服務

服務端192.168.31.175執行

> consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul  -node=consul-175 -client=0.0.0.0  -bind=192.168.31.175 -datacenter=dc1

服務端192.168.31.176執行

> consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul  -node=consul-176 -client=0.0.0.0  -bind=192.168.31.176 -datacenter=dc1 -join 192.168.31.175

服務端192.168.31.177執行

> consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul  -node=consul-177 -client=0.0.0.0  -bind=192.168.31.177 -datacenter=dc1 -join 192.168.31.175

註:因為是叢集安裝,bootstrap-expect=3,以服務端的數量為準

       datacenter=dc1,三台必須在一個資料中心

 

      176和177的啟動命令中,有一句 -join 192.168.31.175 => 有了這一句,就把176和177加入到了175所在的叢集中。

  啟動之後,叢集就開始了Vote(投票選Leader)的過程

 

命令:查看各個server的情況:

> consul members

?

命令:查看目前全部的consul的角色狀態:

> consul operator raft list-peers

?

 

3、通過UI查看叢集狀態

 Consul不僅提供了豐富的命令查看叢集情況,還提供了一個WebUI,預設連接埠8500,我們可以通過訪問這個URL(eg. http://192.168.31.175:8500)得到如所示的WebUI:

?

3、類比Leader掛掉,查看Consul叢集的新選舉Leader

直接停止192.168.31.175的服務,或者暴力直接關機

輸入命令查看服務狀態

> consul members

?

?

查看其餘兩個節點的日誌或者命令可以發現,consul-176被選為了新的leader

我們也可以在次通過UI介面來查看狀態:

?

雖然這裡192.168.31.175這個原leader節點掛掉了,但是只要超過一半的Server(這裡是2/3還活著)還活著,叢集是可以正常工作的,這也是為什麼像Consul、ZooKeeper這樣的分布式管理組件推薦我們使用3個或5個節點來部署的原因。

 

註:以上也可以將.netcore項目部署在Consul Server上,但官方建議用Consul Client來關聯,分別做各自的事情,互不影響。

 

4、Consul Client安裝

為了節約虛擬機器,目前在192.168.31.178部署.netcore項目

> mkdir /data/mvc> mkdir /data/api> cd /data/mvc/> dotnet new mvc> cd /data/api/> dotnet new webapi>dotnet run

 

啟動並運行mvc,webapi兩個項目,保證能正常訪問,正常訪問

?

5、將.netcore服務註冊到Consul(通過設定檔來註冊服務

vi /etc/consul/services_config.json{    "services":[        {            "id": "CLIENT_SERVICE_01",            "name" : "MVCClientService",            "tags": [                "urlprefix-/MVCClientService01"            ],            "address": "192.168.31.178",            "port": 5000,            "checks": [                {                    "name": "clientservice_check",                    "http": "http://192.168.31.178:5000",                    "interval": "10s",                    "timeout": "5s"                }            ]        },         {            "id": "CLIENT_SERVICE_02",            "name" : "APIClientService",            "tags": [                "urlprefix-/APIClientService02"            ],            "address": "192.168.31.178",            "port": 5000,            "checks": [                {                    "name": "clientservice_check",                    "http": "http://192.168.31.178/api/values",                    "interval": "10s",                    "timeout": "5s"                }            ]        }     ]}

在Consul Client 192.168.31.178運行命令:

consul agent -config-dir=/etc/consul -data-dir=/tmp/consul -node=consul-178 -client=0.0.0.0 -bind=192.168.31.178 -datacenter=dc1 -join 192.168.31.175

 

如表示正常啟動,並將192.168.31.178加入到服務叢集192.168.31.175中

?

6、查看Consul叢集狀態

可以看到192.168.31.178加入到了叢集中,表示正常,還能看到.netcore的兩個服務哦,也表示正常

?

 

?

Consul不僅僅提供了服務註冊,還提供了服務發現,我們可以通過調用其提供的API來探索服務的IP和Port。

?

 

四、總結與後續工作

    本篇主要基於一個最小化的叢集搭建了一個Consul服務治理組件,並將ASP.NET Core API程式註冊到了Consul(通過設定檔註冊),並嘗試通過Consul進行服務發現。希望整理這篇文章對大家有一些協助,同時希望大家把.NET Core應用起來,將來能夠跑在Linux和Docker上,希望大家早日實現目標。

 

    後續我會繼續嘗試基於Ocelot構建API Gateway,到時會結合Consul進行進一步的整合。另外,還會嘗試Polly進行熔斷降級、Identity Server進行驗證

Exceptionless作分布式日誌開源架構,Log4net,NLog,Autofac屬性注入,Consul API介面服務註冊執行個體等開源地址:https://github.com/hailang2ll/DMS

?

 

.netcore consul實現服務註冊與發現-叢集部署

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.