日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Docker的Consul服务发现集群搭建

發(fā)布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Docker的Consul服务发现集群搭建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在去年的.NET Core微服務(wù)系列文章中,初步學(xué)習(xí)了一下Consul服務(wù)發(fā)現(xiàn),總結(jié)了兩篇文章。本次基于Docker部署的方式,以一個Demo示例來搭建一個Consul的示例集群,最后給出一個HA的架構(gòu)示范,也會更加貼近于實際應(yīng)用環(huán)境。

一、示例整體架構(gòu)

  此示例會由一個API Gateway, 一個Consul Client以及三個Consul Server組成,有關(guān)Consul的Client和Server這兩種模式的Agent的背景知識,請移步我之前的文章加以了解:《.NET Core微服務(wù)之基于Consul實現(xiàn)服務(wù)治理》。其中,Consul的Client和Server節(jié)點共同構(gòu)成一個Data Center,而API Gateway則從Consul中獲取到服務(wù)的IP和端口號,并返回給服務(wù)消費者。這里的API Gateway是基于Ocelot來實現(xiàn)的,它不是這里的重點,也就不過多說明了,不了解的朋友請移步我的另一篇:《.NET Core微服務(wù)之基于Ocelot實現(xiàn)API網(wǎng)關(guān)服務(wù)》。

二、Consul集群搭建

2.1 Consul鏡像拉取

docker pull consul:1.4.4

  驗證:docker images

  

2.2 Consul Server實例創(chuàng)建

  以下我的實踐是在一臺機器上(CentOS 7)操作的,因此將三個實例分別使用了不同的端口號(區(qū)別于默認端口號8500)。實際環(huán)境中,建議多臺機器部署。

  (1)Consul實例1

docker run -d -p 8510:8500 --restart=always -v /XiLife/consul/data/server1:/consul/data -v /XiLife/consul/conf/server1:/consul/config -e CONSUL_BIND_INTERFACE='eth0' --privileged=true --name=consul_server_1 consul:1.4.4 agent -server -bootstrap-expect=3 -ui -node=consul_server_1 -client='0.0.0.0' -data-dir /consul/data -config-dir /consul/config -datacenter=xdp_dc;

  

(2)Consul實例2

  為了讓Consul實例2加入集群,首先獲取一下Consul實例1的IP地址:

JOIN_IP="$(docker inspect -f '{{.NetworkSettings.IPAddress}}' consul_server_1)";docker run -d -p 8520:8500 --restart=always -v /XiLife/consul/data/server2:/consul/data -v /XiLife/consul/conf/server2:/consul/config -e CONSUL_BIND_INTERFACE='eth0' --privileged=true --name=consul_server_2 consul:1.4.4 agent -server -ui -node=consul_server_2 -client='0.0.0.0' -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=$JOIN_IP;

  (3)Consul實例3

docker run -d -p 8530:8500 --restart=always -v /XiLife/consul/data/server3:/consul/data -v /XiLife/consul/conf/server3:/consul/config -e CONSUL_BIND_INTERFACE='eth0' --privileged=true --name=consul_server_3 consul:1.4.4 agent -server -ui -node=consul_server_3 -client='0.0.0.0' -datacenter=xdp_dc -data-dir /consul/data -config-dir /consul/config -join=$JOIN_IP;

  驗證1:docker exec consul_server_1 consul operator raft list-peers

  

  驗證2:http://192.168.16.170:8500/

  

2.3 Consul Client實例創(chuàng)建

  (1)準備services.json配置文件,向Consul注冊兩個同樣的Product API服務(wù)

{ "services": [ { "id": "core.product-/192.168.16.170:8000", "name": "core.product", "tags": [ "xdp-/core.product" ], "address": "192.168.16.170", "port": 8000, "checks": [ { "name": "core.product.check", "http": "http://192.168.16.170:8000/api/health", "interval": "10s", "timeout": "5s" } ] }, { "id": "core.product-/192.168.16.170:8001", "name": "core.product", "tags": [ "xdp-/core.product" ], "address": "192.168.16.170", "port": 8001, "checks": [ { "name": "core.product.check", "http": "http://192.168.16.170:8001/api/health", "interval": "10s", "timeout": "5s" } ] } ] }????有關(guān)配置文件的細節(jié),請移步另一篇文章:《.NET Core微服務(wù)之基于Consul實現(xiàn)服務(wù)治理(續(xù))

  (2)Consul Client實例

docker run -d -p 8550:8500 --restart=always -v /XiLife/consul/conf/client1:/consul/config -e CONSUL_BIND_INTERFACE='eth0' --name=consul_client_1 consul:1.4.4 agent -node=consul_client_1 -join=$JOIN_IP -client='0.0.0.0' -datacenter=xdp_dc -config-dir /consul/config

  (3)驗證

  

  

  

2.4 服務(wù)檢查監(jiān)控郵件提箱

  (1)為Client添加watches.json

{ "watches": [ { "type": "checks", "handler_type": "http", "state": "critical", "http_handler_config": { "path": "http://192.168.16.170:6030/api/Notifications/consul", "method": "POST", "timeout": "10s", "header": { "Authorization": [ "token" ] } } } ] }

  *.這里的api接口?http://192.168.16.170:6030/api/Notifications/consul是我的一個通知服務(wù)發(fā)送Email的接口。

  (2)驗證

  

三、Ocelot網(wǎng)關(guān)配置

3.1 為Ocelot增加Consul支持

  (1)增加Nuget包:Ocelot.Provider.Consul

Nuget>>?Install-Package?Ocelot.Provider.Consul 

  (2)修改StartUp.cs,增加Consul支持

s.AddOcelot() ????

? ? .AddConsul();

  更多內(nèi)容,請移步:Ocelot官方文檔-服務(wù)發(fā)現(xiàn)

3.2 修改Ocelot配置文件增加Consul配置

"GlobalConfiguration": { "BaseUrl": "http://api.xique.com", "ServiceDiscoveryProvider": { "Host": "192.168.16.170", "Port": 8550, "Type": "Consul" } }

  *.這里指向的是Consul Client實例的地址

  此外,Ocelot默認策略是每次請求都去Consul中獲取服務(wù)地址列表,如果想要提高性能,也可以使用PollConsul的策略,即Ocelot自己維護一份列表,然后定期從Consul中獲取刷新,就不再是每次請求都去Consul中拿一趟了。例如下面的配置,它告訴Ocelot每2秒鐘去Consul中拿一次。

"Type": "PollConsul", "PollingInterval": 2000

3.3 Service配置

// -- Service { "UseServiceDiscovery": true, "DownstreamPathTemplate": "/api/{url}", "DownstreamScheme": "http", "ServiceName": "core.product", "LoadBalancerOptions": { "Type": "RoundRobin" }, "UpstreamPathTemplate": "/product/{url}", "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ] }

  這里配置了在Consul中配置的服務(wù)名(ServiceName),以及告訴Ocelot我們使用輪詢策略(RoundRobin)做負載均衡。

3.4 驗證

  第一次訪問:

  

  第二次訪問:

  

四、HA示例整體架構(gòu)

  對于實際應(yīng)用中,我們往往會考慮單點問題,因此會借助一些負載均衡技術(shù)來做高可用的架構(gòu),這里給出一個建議的HA示例的整體架構(gòu):

  對于一個API請求,首先會經(jīng)歷一個Load Balancer才會到達API Gateway,這個Load Balancer可以是基于硬件的F5,也可以是基于軟件的Nginx或LVS再搭配Keepalived,一般來說大部分團隊都會選擇Nginx。然后API Gateway通過部署多個,來解決單點問題,也達到負載均衡的效果。而對于API Gateway和Consul Client之間的連接,我們往往也會增加一個Load Balancer來實現(xiàn)服務(wù)發(fā)現(xiàn)的高可用,這個Load Balancer也一般會基于Nginx/LVS搭配Keepalived,API Gateway只需要訪問一個Virtual IP即可。而在Consul Data Center中,Consul Server會選擇3或5個,Consul Client也會部署多個,剛剛提到的Virtual IP則會指向多個Consul Client,從而防止了Consul Client的單點問題。


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結(jié)

以上是生活随笔為你收集整理的基于Docker的Consul服务发现集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。