网站web建设/百度口碑官网

网站web建设,百度口碑官网,wordpress 添加关键字,萧山好的做网站的公司一、Consul的集群介绍Consul Agent有两种运行模式:Server和Client。这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关, 以Server模式运行的Consul Agent节点用于维护Consul集群的状态,官方建议每…

一、Consul的集群介绍

   Consul Agent有两种运行模式:ServerClient。这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关, 以Server模式运行的Consul Agent节点用于维护Consul集群的状态,官方建议每个Consul Cluster至少有3个或以上的运行在Server Mode的Agent,Client节点不限。

1、Server节点需要三台或以上机器

2、Client节点不限

640?wx_fmt=png

二、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

如下图表示成功:

640?wx_fmt=png

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

640?wx_fmt=png

命令:查看目前全部的consul的角色状态:

> consul operator raft list-peers

640?wx_fmt=png

 

3、通过UI查看集群状态

 Consul不仅提供了丰富的命令查看集群情况,还提供了一个WebUI,默认端口8500,我们可以通过访问这个URL(eg. http://192.168.31.175:8500)得到如下图所示的WebUI:

640?wx_fmt=png

4、模拟Leader挂掉,查看Consul集群的新选举Leader

直接停止192.168.31.175的服务,或者暴力直接关机

输入命令查看服务状态

> consul members

640?wx_fmt=png


查看其余两个节点的日志或者命令可以发现,consul-176被选为了新的leader

我们也可以在次通过UI界面来查看状态:

640?wx_fmt=png

虽然这里192.168.31.175这个原leader节点挂掉了,但是只要超过一半的Server(这里是2/3还活着)还活着,集群是可以正常工作的,这也是为什么像Consul、ZooKeeper这样的分布式管理组件推荐我们使用3个或5个节点来部署的原因。 

注:以上也可以将.netcore项目部署在Consul Server上,但官方建议用Consul Client来关联,分别做各自的事情,互不影响。 

5、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两个项目,保证能正常访问,如图正常访问

640?wx_fmt=png

6、将.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中

640?wx_fmt=png

7、查看Consul集群状态

可以看到192.168.31.178加入到了集群中,表示正常,还能看到.netcore的两个服务哦,也表示正常

640?wx_fmt=png


Consul不仅仅提供了服务注册,还提供了服务发现,我们可以通过调用其提供的API来发现服务的IP和Port。

640?wx_fmt=png

8、通过consul api 接口注册服务

  • 创建一个ASP.NET Core WebAPI程序            

640?wx_fmt=png

  • 创建一个HealthController用于Consul的健康检查    

[Produces("application/json")]

[Route("api/Health")]

public class HealthController : Controller

{


[HttpGet]

public IActionResult Get() => Ok("ok");


}

注:Consul会通过call这个API来确认Service的健康状态。 

  • 基于IApplicationBuilder写一个扩展方法,用于调用Consul API

  • 在nuge管理器中引入Consul包 

public static class ConsulBuilderExtensions

{


// 服务注册

public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IApplicationLifetime lifetime, HealthService healthService, ConsulService consulService)

{


var consulClient = new ConsulClient(x => x.Address = new Uri($"http://{consulService.IP}:{consulService.Port}"));//请求注册的 Consul 地址

var httpCheck = new AgentServiceCheck()

{


DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册

Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔,或者称为心跳间隔

HTTP = $"http://{healthService.IP}:{healthService.Port}/api/health",//健康检查地址

Timeout = TimeSpan.FromSeconds(5)


};


// Register service with consul


var registration = new AgentServiceRegistration()

{


Checks = new[] { httpCheck },

ID = healthService.Name + "_" + healthService.Port,

Name = healthService.Name,

Address = healthService.IP,

Port = healthService.Port,

Tags = new[] { $"urlprefix-/{healthService.Name}" }//添加 urlprefix-/servicename 格式的 tag 标签,以便 Fabio 识别


};


consulClient.Agent.ServiceRegister(registration).Wait();//服务启动时注册,内部实现其实就是使用 Consul API 进行注册(HttpClient发起)

lifetime.ApplicationStopping.Register(() =>

{


consulClient.Agent.ServiceDeregister(registration.ID).Wait();//服务停止时取消注册


});


return app;


}


}


  • 在Starup类的Configure方法中,调用此扩展方法

#region register this service


ConsulService consulService = new ConsulService()


IP = Configuration["Consul:IP"],


Port = Convert.ToInt32(Configuration["Consul:Port"])


};


HealthService healthService = new HealthService()


{


IP = Configuration["Service:IP"],


Port = Convert.ToInt32(Configuration["Service:Port"]),


Name = Configuration["Service:Name"],


};


app.RegisterConsul(lifetime, healthService, consulService);


#endregion

 

  • 其中用到了appSettings.json配置文件,其定义如下:

"Service": {


"Name": "DMSWebAPITest",


"IP": "localhost",


"Port": "5001"


},


"Consul": {


"IP": "localhost",


"Port": "8500"


}

 

  • 其中ConsulService类定义如下:

public class ConsulService

{


public string IP { get; set; }


public int Port { get; set; }


}

  • 其中HealthService类定义如下:

 

public class HealthService


{


public string Name { get; set; }


public string IP { get; set; }


public int Port { get; set; }



}

 

  • 确保HealthController的API能正常访问,以便做健康检查

640?wx_fmt=png

  • 成功运行后,查看Consul集群的状态,UI界面

640?wx_fmt=png

 

四、总结与后续工作

    本篇主要基于一个最小化的集群搭建了一个Consul服务治理组件,并将ASP.NET Core API程序注册到了Consul(通过配置文件注册),并尝试通过Consul进行服务发现。希望整理这篇文章对大家有一些帮助,同时希望大家把.NET Core应用起来,将来能够跑在Linux和Docker上,希望大家早日实现目标。 

    后续我会继续尝试基于Ocelot构建API网关,到时会结合Consul进行进一步的集成。另外,还会尝试Polly进行熔断降级、Identity Server进行验证

Exceptionless作分布式日志开源框架,Log4net,NLog,Autofac属性注入,Consul API接口服务注册实例等开源地址:https://github.com/hailang2ll/DMS

相关文章:

  • .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

  • winserver的consul部署实践与.net core客户端使用(附demo源码)

  • .netcore consul实现服务注册与发现-单节点部署

原文地址: https://blog.csdn.net/hailang2ll/article/details/82079192


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎,而这篇将介绍浅谈surging服务引擎中的rabbi…

csp-j/s总结

文章目录csp-jcsp-s总结csp-j T1傻逼题(我是傻逼),手残把&打成整除了(大样例还对了gg) T2乱推,然后打了个O(n)O(n)O(n),却WA了15分? T3看了看,修改不会相互影响?那不…

.net core实践系列之短信服务-架构设计

前言上篇《.net core实践系列之短信服务-为什么选择.net core(开篇)》简单的介绍了(水了一篇).net core。这次针对短信服务的架构设计和技术栈的简析。源码地址:https://github.com/SkyChenSky/Sikiro.SMS为什么需要架…

CAP 2.3版本发布,支持 MongoDB

前言经过2个月的调整及测试,CAP 2.3 版本终于发布了,这个版本最大的特性就是对于 MongoDB 的支持,感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR,相信随着博客园的使用,CAP 会越来越多的帮助到更多的人。CAP …

.NETCore 实现容器化Docker与私有镜像仓库管理

一、Docker介绍Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖。相较于虚拟机而言,Docker共享的是…

记一次.net core 集成vue 实践

简介以前我们总是喜欢用服务端渲染前端(虽然也有htmlajax这种做法),后来node诞生了,前端工具链(不如说生态)诞生了,大家都开始了前端的重构之路,本文将以一简单案例介绍下我们是如何…

AspNetCore中使用Ocelot之 IdentityServer4

前言:Ocelot网关是基于AspNetCore开发的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本升级,在使用AspNetCore 开发的时候可以使用2.0版本了,开源项目Ocelot 张大队长是主力的参与人员,以前提起张大队前面都…

Nginx主配置文件详解【笔记】

1 Nginx配置文件目录结构 最近使用Nginx做负载均衡,顺便整理Nginx配置文件笔记如下所述,本文主要梳理主配置文件各属性的作用。使用yum安装好Nginx后,可以在默认路径(/etc/nginx)看到如下配置文件。 /etc/nginx/ ├─…

微服务介绍及Asp.net Core实战项目系列之微服务介绍

0、目录整体架构目录:ASP.NET Core分布式项目实战-目录一、微服务选型在做微服务架构的技术选型的时候,以“无侵入”和“社区活跃”为主要的考量点,将来升级为原子服务架构、量子服务架构的时候、甚至恢复成单体架构的时候,代价最…

【矩阵乘法】生成树计数(luogu 2109/NOI 2007)

生成树计数 luogu 2109 题目大意 有n个排成一列的点,把距离不超过k的点之间连边,问这个图的生成树个数 输入样例 3 5输出样例 75样例说明 样例对应的图如下: 数据范围 解题思路 因为n十分大,不能直接2^m暴力枚举&#x…

你需要知道的这几种 asp.net core 修改默认端口的方式

一般情况下,aspnetcore发布后的默认端口是5000,这个大家都知道,而且默认骨架代码中没有看到任何让你输入的ip地址和端口号,但作为程序员的我们,不希望被框架所管制,那如何实现默认端口的修改呢?…

牛客网【每日一题】5月18日 「土」秘法地震

链接: 文章目录题目描述题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld题目描述 帕秋莉掌握了一种土属性魔法 这种魔法可以在一片kk大小…

AspNetCore 中使用 InentityServer4(2)

基于上一篇文章 实现对IdnetityServer4 服务的使用1:添加接口解决方案,并且使接口受认证服务的保护:首先在解决方案中添加Api项目如下图所示:在API项目中添加Nuget 引用 如下图所示:Install-Package IdentityServer4.A…

Visual Studio 2017 15.8概览

Microsoft正式发布VS2017的第八次更新,即15.8。15.8提供了今年夏天预览的大量新特性,包括Code Cleanup、IDE支持多重查补(Multiple Caret)、Visual Studio Code和ReSharper快捷键设置等。各类开发人员均可受益于这些已供使用的新特…

利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop

Aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的Spring.NET,当然,.NET Core社区新秀AspectCore在性能与功能上都非常优秀,已经逐渐被社区推崇和有越来越多的人使用。感谢柠檬同学的礼物&#x…

当我们谈高性能时,我们谈些什么?(送书活动)

网站越快,用户的黏性就越高;网站越快,用户忠诚度更高;网站越快,用户转化率越高。简言之,速度是关键。——《Web 性能权威指南》显然,高性能意味着“快”。但对快的定义,在不同的系统…

Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

什么是Generic Host ?这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host。Web Host –适用于托管Web程序的Host,就是我们所熟悉的在Asp.Net Core应用程序的Mai函数中用CreateWebHostBuilder创建出来的常用的We…

520 钻石争霸赛 题解

说好的钻石难度,结果本人菜的一地。。只有88分。。。。 文章目录7-1 考试周7-2 真的恭喜你7-3 平均成绩7-4 古风AB难度开始上升7-5 猜近似数字7-6 随机输一次7-7 阶乘的非零尾数7-8 三足鼎立前四题十分钟AC后两题二十分钟自闭第五题玄学卡点不知为何7-1 考试周 模拟…

.NET Core 跨平台物联网框架 ServerSuperIO.Core,一套设备驱动通吃嵌入式、上位机、云服务...

一、概述我们的大数据平台(云)平台的数据接收服务基于ServerSuperIO开发,因为集成的功能比较多,无法实现跨平台,现在跑在Windows下。但是云端体系化、标准化建设,跨平台是必走的技术路线。在ServerSuperIO基…

asp.net core添加全局异常处理及log4net、Nlog应用

一、介绍此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知,一旦自己的项目报错,如果没有进行处理都是显示不友好的,有得甚至直接爆出错误页面,看的也是很奇怪。为了避免出现这样的错误以及在错误出现的时…