实战中的asp.net core结合Consul集群Docker实现服务治理

一、前言


 

在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群,一旦把命令工具关掉,则consul无法再后台启动,尤其是在linux系统中。

如果在window系统中,采用bat文件到时可以做成开机自启,或者在linux中把命令做成一个service 服务文件来启动就可以实现后台运行。

因此为了社区能更好的发展技术,且能把consul应用在生产环境中,我认真回顾了在公司项目中的应用,特此把我开发及总结的分享给大家,此篇文章采用docker引擎,并且只涉及到consul集群部署以及结合asp.net core微服务注册。

当然如果内容有涉及安全隐患的,大家可以积极留言,共同进步。

 注:以下所涉及到部署过程全部经过楼主我反复的验证,总结得来。大家在应用的过程中如果出现问题,可以留言咨询。

二、部署consul集群


 

1、介绍一下Consul

consul 关键特性
  服务发现:支持服务发现。你可以通过 DNS 或 HTTP 的方式获取服务信息。
  健康检查:支持健康检查。可以提供与给定服务相关联的任何数量的健康检查(如 web 状态码或 cpu 使用率)。
  K/V 存储:键/值对存储。你可用通过 consul 存储如动态配置之类的相关信息。
  多数据中心:支持多数据中心,开箱即用。
  WEB UI:支持 WEB UI。点点点,你就能够了解你的服务现在的运行情况,一目了然,对开发运维是非常友好的。 

说明:

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

Consul支持多数据中心,每个数据中心的Consul Cluster都会在运行于Server模式下的Agent节点中选出一个Leader节点,这个选举过程通过Consul实现的raft协议保证,多个 Server节点上的Consul数据信息是强一致的。处于Client Mode的Consul Agent节点比较简单,无状态,仅仅负责将请求转发给Server Agent节点。

 

Consul与其他工具的比较

640?wx_fmt=png

 

consul的端口解释

640?wx_fmt=png

好了,该介绍的已经介绍了,接下来就是正式部署吧

 

2、Docker上运行Consul

第一步:安全配置,适用授权和数据加密传输(生产环境是必须的)

为了consul的安全,需要进行gossip加密以及RPC加密结合TLS。
Gossip加密:主要用于节点间的接收发送集群信息安全。
RPC加密:主要用于Agent之间调用RPC授权的安全性。

 

此处大家可以参考官网或者一下资料:

https://www.jianshu.com/p/3d074ed76a68
https://www.consul.io/docs/agent/encryption.html

 

第二步:consul集群部署

准备服务器(可以采用虚拟机部署)


名称IP
CentOS7-1server1192.168.216.160
CentOS7-2server2192.168.216.161
CentOS7-3server3192.168.216.162
CentOS7-4client1192.168.216.163
vs 2017project部署在docker上192.168.216.163

部署server1

docker run -d --net=host -v $PWD/data:/consul/data -v $PWD/config:/consul/config --restart always --name consulServer1 consul agent -server -bind=192.168.216.160 -node=server1 -bootstrap-expect 3 -data-dir=/consul/data -config-file=/consul/config -client 0.0.0.0 -ui

 

部署server2
docker run -d --net=host -v $PWD/data:/consul/data -v $PWD/config:/consul/config --restart always --name cs2 consul agent -server -bind=192.168.216.161 -node=server2 -bootstrap-expect 3 -data-dir=/consul/data -config-file=/consul/config -client 0.0.0.0 -ui -retry-join=192.168.216.160

 

部署server3
docker run -d --net=host -v $PWD/data:/consul/data -v $PWD/config:/consul/config --restart always --name cs3 consul agent -server -bind=192.168.216.162 -node=server3 -bootstrap-expect 3 -data-dir=/consul/data -config-file=/consul/config -client 0.0.0.0 -ui -retry-join=192.168.216.160


部署client-连接server
docker run -d --net=host -v $PWD/data:/consul/data -v $PWD/config:/consul/config --restart always --name cc1 consul agent -bind=192.168.216.163 -node=client1 -data-dir=/consul/data -config-file=/consul/config -client 0.0.0.0 -retry-join=192.168.216.160

 

注:(针对以上的参数以及配置解释)
1、此处的数据挂载就是把容器内的data以及配置挂载到外部地址,$PWD代表当前目录即你运行docker命令时的目录,当然$PWD可以替换为具体的路径
2、-data-dir=/consul/consul -config-file=/consul/config :这两个地方代表在consul启动后会把数据以及配置文件放到指定的目录下,这个对于在服务器模式下运行的代理尤其重要,因为它们必须能够保持群集状态。
3、总结,以上两点结合就是说明 consul产生的数据然后挂载在外部地址进行持久化存储。
4、server端 的-client 参数可以不用,官方推荐是 服务注册到client端,由client端再把数据统一提交到server端。

 

参数说明

-client : 0.0.0.0 代表绑定到所有接口的选项,如果没有此选项,则asp.net core无法进行服务注册使用

-bind :该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的

--net=host 使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤

-retry-join 允许你在第一次失败后进行尝试,加入一个已经启动的agent的ip地址

-bootstrap-expect 提供的server节点数目

-ui 启动自有主机的界面

-data-dir :提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在

CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}:在0.7版本之后默认是true,因此不是必须的。

CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}:在0.7版本之后默认是true,因此不是必须的。如果启用,当代理收到TERM信号时,它将向Leave群集的其余部分发送消息并正常离开

 

打开浏览器器查看 consul :

640?wx_fmt=png

看所有consul节点情况
docker exec -t cs1 consul members

640?wx_fmt=png

 

查看server的状态,以及哪一个节点是leader

docker exec -t cs1 consul operator raft list-peers

640?wx_fmt=png

注:

如果其中一台或者多台server端挂掉,则Consul集群就会重新选举新的Leader,
但是一旦挂掉阿的节点数量超过一半,则Consul集群就无法工作了。

三、asp.net core微服务进行服务注册

1、新建一个项目asp.net core webapi项目

引入 consul ,nuget包

2、在控制器中新建一个控制器Health,代表健康检查

640?wx_fmt=png

3、然后在appsetting.json中添加配置文件

需要手动配置一下地址和端口号。

640?wx_fmt=png

4、这一步是服务注册的类

ServiceRegisterOptions.cs

640?wx_fmt=png

RegisterOptions.cs

public class RegisterOptions{        public string HttpEndpoint { get; set; }}

 

 5、在startup.cs 中的服务注册

640?wx_fmt=png

在Configure 方法中配置代码

640?wx_fmt=png

自此,可以把我们的项目部署到163服务器上面的docker上啦。

我们看一下效果,成功注册到了

640?wx_fmt=png

640?wx_fmt=png

 

 

参考资料:

Conusl TLS配置:

https://www.jianshu.com/p/3d074ed76a68
https://www.consul.io/docs/agent/encryption.html

consul 参数配置: 

https://blog.csdn.net/zl1zl2zl3/article/details/79622476

consul服务治理:

http://michaco.net/blog/ServiceDiscoveryAndHealthChecksInAspNetCoreWithConsul
https://www.cnblogs.com/myzony/p/9168851.html
https://www.cnblogs.com/edisonchou/p/9124985.html

原文地址:https://www.cnblogs.com/guolianyu/p/9614050.html

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

640?wx_fmt=jpeg

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

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

相关文章

POJ3177 Redundant Paths

POJ3177 Redundant Paths 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21945 Accepted: 9056Description In order to get from one of the F (1 < F < 5,000) grazing fields (…

【最小生成树】路线规划(nowcoder 217603)

路线规划 nowcoder 217603 题目大意 给一个无向连通图&#xff0c;问你在经过的边最少的前提下&#xff0c;从1走过所有点&#xff0c;再走回1的最短距离 样例#1 输入样例#1 5 5 5 4 3 4 3 5 2 3 7 1 2 4 2 4 1输出样例#1 26样例解释#1 最少时间的路径: 1 →2 →…

计算几何学习小记

文章目录前言正题平面运算加减乘积常见问题直线/线段规范交点求垂线/点问题判断点在多边形的内/外求两个圆的交点前言 因为懒得画图理解计算几何所以要来这里鼓励一下自己 以后新学的应该也会写在这里。就当我是水博客 应该都是二维的计算几何&#xff0c;三维的有生之年再学 …

Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记&#xff0c;在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

Network POJ-3694

Network POJ-3694 文章目录Description题意&#xff1a;样例分析&#xff1a;题解&#xff1a;代码&#xff1a;Description A network administrator manages a large network. The network consists of N computers and M links between pairs of computers. Any pair of com…

使用.NET Core 2.1的Azure WebJobs

WebJobs不是Azure和.NET中的新事物。 Visual Studio 2017中甚至还有一个默认的Azure WebJob模板&#xff0c;用于完整的.NET Framework。 但是&#xff0c;Visual Studio中以某种方式遗漏了.NET Core中WebJobs的类似模板。 在这篇文章中&#xff0c;我使用的是.NET Core 2.1来创…

.NET Core中的CSV解析库

感谢本篇首先特别感谢从此启程兄的《.NetCore外国一些高质量博客分享》, 发现很多国外的.NET Core技术博客资源, 我会不定期从中选择一些有意思的文章翻译总结一下。.NET Core中的CSV解析库本篇博客来源于.NET Core Totorials的《CSV Parsing In .NET Core》。背景介绍对于初级…

为什么要使用Entity Framework

本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF)&#xff0c;同时也看出类似Drapper之类的简陋ORM不足的地方。设想业务都是大家知晓的权限管理&#xff0c;实体类如下。读到这里&#xff0c;请先思考一下&…

Tarjan算法

Tarjan算法可以应用在求解 强连通分量&#xff0c;缩点&#xff0c;桥&#xff0c;割点&#xff0c;双连通分量&#xff0c;LCA等 关于文章目录强连通分量代码题目tarjan求割点割点概念流程代码&#xff1a;求无向图的割边&#xff0f;桥理解&#xff1a;代码&#xff1a;强连通…

Ocelot简易教程(一)之Ocelot是什么

简单的说Ocelot是一个用.NET Core实现并且开源的API网关技术。可能你又要问了&#xff0c;什么是API网关技术呢&#xff1f;Ocelot又有什么特别呢&#xff1f;我们又该如何集成到我们的asp.net core程序中呢&#xff1f;下面我会通过一些列通俗易懂的教程来为大家讲解。今天的这…

如何在你的项目中集成 CAP【手把手视频教程】

前言之前录制过一期关于CAP的视频&#xff0c;但是由于当时是直播时录制的视频&#xff0c;背景音比较杂所以质量有点差。这次的视频没有直播&#xff0c;直接录制的&#xff0c;视频质量会好很多&#xff0c;第一遍录制完成之后发现播放到一半没有声音&#xff0c;所以又重新录…

【Splay】文艺平衡树(金牌导航 Splay-2)

#文艺平衡树 金牌导航 Splay-2 题目大意 给你一个1~n的序列&#xff0c;然后对序列的区间做若干次翻转&#xff0c;问你最后的序列 输入样例 5 3 1 3 1 3 1 4输出样例 4 3 2 1 5数据范围 1⩽n,m⩽105,1⩽l⩽r⩽n1\leqslant n,m\leqslant 10^5,1\leqslant l\leqslant r \l…

.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

前言本篇会继续讲解Sikiro.SMS.Job服务的实现&#xff0c;在我写第一篇的时候&#xff0c;我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要&#xff0c;而使用MQ代替。但是为了说明调度任务使用实现也坚持写了下。后面会一篇针对架构、实现优化的讲解。源码地址&a…

Drainage Ditches POJ1273

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 93263 Accepted: 36174试题链接 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Dinic做法EK做法Description Every time it rains on Farmer John’s fields, a pond forms over Bessie’…

P2756 飞行员配对方案问题【网络流24题】

P2756 飞行员配对方案问题 文章目录题目背景题解&#xff1a;代码&#xff1a;题目背景 第二次世界大战期间&#xff0c;英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的两名飞行员&#xff0c;其中一名是英国…

大数据分析中使用关系型数据库的关键点

相当一部分大数据分析处理的原始数据来自关系型数据库&#xff0c;处理结果也存放在关系型数据库中。原因在于超过99%的软件系统采用传统的关系型数据库&#xff0c;大家对它们很熟悉&#xff0c;用起来得心应手。在我们正式的大数据团队&#xff0c;数仓&#xff08;数据仓库H…

图论复习——最小生成树MST

知识点 MST的构造 Boruvka算法常用于解决这类问题&#xff1a;给你n个点&#xff0c;每个点有点权&#xff0c;任意两个点之间有边权&#xff0c;边权为两个点权用过某种计算方式得出&#xff0c;求最小生成树。动图 MST上的确定性和存在性问题 最小生成树的两个性质&#xf…

Ocelot简易教程(二)之快速开始1

Ocelot是为.net core量身定做的&#xff0c;目前是基于 netstandard2.0进行构建的。.NET Core 2.1中如何使用呢&#xff1f;安装NuGet package使用nuget安装Ocelot及其依赖项。您需要创建一个netstandard2.0项目并将其Package安装到项目中。然后按照下面的“启动”和“ 配置”节…

P2761 软件补丁问题

文章目录题目描述题解&#xff1a;代码&#xff1a;添加链接描述题目描述 T 公司发现其研制的一个软件中有 n 个错误&#xff0c;随即为该软件发放了一批共 m 个补丁程序。每一个补丁程序都有其特定的适用环境&#xff0c;某个补丁只有在软件中包含某些错误而同时又不包含另一些…

Xamarin中国技术社区及BXUG官网上线啦

Xamarin中国技术社区及BXUG官网为.NET开发者提供移动跨平台技术学习的园地&#xff0c;为Xamarin及.NET技术达人提供展示分享的舞台&#xff0c; 为企业CTO等技术负责人提供跨平台移动应用解决方案的交流平台&#xff01;网址链接&#xff1a;http://bxug.bopoda.cn/Xamarin中国…