.netcore consul实现服务注册与发现-集群部署
一、Consul的集群介绍
Consul Agent有两种运行模式:Server和Client。这里的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网关,到时会结合Consul进行进一步的集成。另外,还会尝试Polly进行熔断降级、Identity Server进行验证
Exceptionless作分布式日志开源框架,Log4net,NLog,Autofac属性注入,Consul API接口服务注册实例等开源地址:https://github.com/hailang2ll/DMS
.netcore consul实现服务注册与发现-集群部署的更多相关文章
- .netcore consul实现服务注册与发现-集群完整版
原文:.netcore consul实现服务注册与发现-集群完整版 一.Consul的集群介绍 Consul Agent有两种运行模式:Server和Client.这里的Server和Clien ...
- .netcore consul实现服务注册与发现-单节点部署
原文:.netcore consul实现服务注册与发现-单节点部署 一.Consul的基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分 ...
- spring Cloud服务注册中心Eureka集群
spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...
- Consul初探-服务注册和发现
前言 经过上一篇的学习,现在已经来到了服务注册发现环节:Consul 的核心功能就是服务注册和发现,Consul 客户端通过将自己注册到 Consul 服务器集群,然后等待调用方去发现服务,实现代理转 ...
- Spring Cloud Consul 实现服务注册和发现
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为基于 JVM 的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布 ...
- 一个故事,一段代码告诉你如何使用不同语言(Golang&C#)提供相同的能力基于Consul做服务注册与发现
目录 引言 什么是微服务 传统服务 微服务 什么是服务注册与服务发现 为什么要使用不同的语言提供相同的服务能力 服务协调器 服务注册 Golang C#(.NetCore3.1) 服务发现 通过Htt ...
- python使用consul进行服务注册和发现
阅读目录 一.安装启动consul 二.python服务注册 三.golang服务注册 四.通过API的方式获取信息 回到顶部 一.安装启动consul 1.通过docker快速安装 #获取docke ...
- 简单RPC框架-基于Consul的服务注册与发现
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Spring Cloud Consul使用——服务注册与发现(注册中心)
整理自该文章 一.Consul 服务端接下来我们开发 Consul 的服务端,创建一个 spring-cloud-consul-producer 项目 1.添加依赖包 <dependencies ...
随机推荐
- Guid几种格式及之间的互换,以及利用Base64缩短guid的长度到22个字符和还原
1.Guid.NewGuid().ToString("N") 结果为: 38bddf48f43c48588e0d78761eaa1ce6 2.Guid.NewGuid().ToSt ...
- python 之 并发编程(守护进程、互斥锁、IPC通信机制)
9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...
- PJzhang:python基础入门的7个疗程-five
猫宁!!! 参考链接:易灵微课-21天轻松掌握零基础python入门必修课 https://www.liaoxuefeng.com/wiki/1016959663602400 第十三天:代码组织 类是 ...
- 个人永久性免费-Excel催化剂功能第51波-聚光灯功能,长宽工作表不看错位使用
Excel的聚光灯功能,笔者是有点看不上,也曾经写文吐槽过这些类似的功能的实用性,但现实可能真的很多小白很需要,大家Excel水平参差不齐,大量的不规范做表习惯,致使此功能使用场景仍然非常广阔.很怀疑 ...
- 2015.11.27---Java
public class star{ public static void main(String[] args) { System.out.print("ha"); } }
- SpringMVC表单对象绑定到@ModelAttribute
支持绑定表单对象 jsp: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/fo ...
- spring-boot-plus后台快速开发脚手架之代码生成器使用
Generator 代码生成 _ _ _ _ (_) | | | | | | ___ _ __ _ __ _ _ __ __ _ ______| |__ ___ ___ | |_ ______ _ _ ...
- Linu基础之权限管理
二十二.权限管理 22.1)什么是权限 针对某些文件或者进程,对用户进行限制,权限可以理解为用于约束用户能对系统所做的操作. 22.2)权限和用户的关系 [root@centos7 ~]# ll ...
- 物联网网关MQTT应用与配置测试介绍
1.MQTT介绍: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),作为除Modbus外最常用的协议之一,因其基于发布/订阅的模式,具有资源消 ...
- poj 3253 Fence Repair(优先队列+huffman树)
一个很长的英文背景,其他不说了,就是告诉你锯一个长度为多少的木板就要花多少的零钱,把一块足够长(不是无限长)的木板锯成n段,每段长度都告诉你了,让你求最小花费. 明显的huffman树,优先队列是个很 ...