NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(一)

本文介绍了如何使用Consul搭建最小化集群,并通过.NET Core创建微服务进行服务注册与发现。详细步骤包括Consul集群的搭建、服务器和客户端配置,以及在ASP.NET Core程序中注册服务。文中还探讨了Consul的架构和领导节点的选举机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Consul介绍

  Consul是HashiCorp公司推出的开源工具[开源地址:https://github.com/hashicorp/consul],用于实现分布式系统的服务发现与配置。

 

  与市面上其他系统比较如下:

 

  总体而言, Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

此外,关于Consul的架构以及相关的角色,如下图所示:

  以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节点。

 

集群搭建

  笔者打算通过五台Centos7来搭建Consul集群,借助VMware Workstation搭建,当然,最主要的是这台虚拟主机一定要相互ping通,最好关闭防火墙,而且,虚拟机也需要和宿主机(实比如笔者的Windows10操作系统)ping通,具体问题和配置可搜索一下,图片如下:

 

  其中130作为leader角色,129和131作为follower角色,当然,在实际环境中,leader的角色不一定是固定的,会随着环境变化而变化(比如网络断了、宕机了等等)这个我们后续来验证。132和133作为客户端,并安装NET Core 2.1环境,再次提示,一定要保证在这个环境中的所有系统相互之间均能Ping通。

 

 

step1:关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

 

step2:安装consul

wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip
unzip consul_1.3.0_linux_amd64.zip

 

step3:节点1

./consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=192.168.153.129 -datacenter=dc1 #设置129为服务器

复制代码

bootstrap_expect > 0: expecting 3 servers
==> Starting Consul agent...
==> Consul agent running!
           Version: 'v1.3.0'
           Node ID: 'c612a043-8906-d6e1-8f4b-ef1c8afb371b'
         Node name: 'consul-1'
        Datacenter: 'dc1' (Segment: '<all>')
            Server: true (Bootstrap: false)
       Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
      Cluster Addr: 192.168.153.129 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false

==> Log data will now stream in as it occurs:

    2018/10/15 04:53:30 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb3777 Address:192.168.153.131:8300} {Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb371a Address:192.168.153.130:8300} {Suffrage:Voter ID:c612a043-8906-d6e1-8f4b-ef1c8afb371b Address:192.168.153.129:8300}]
    2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-1.dc1 192.168.153.129
    2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-1 192.168.153.129
    2018/10/15 04:53:30 [WARN] agent: Service name "LZZ.DEV.ClientService" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
    2018/10/15 04:53:30 [WARN] agent: Service name "LZZ.PRO.ClientService" will not be discoverable via DNS due to invalid characters. Valid characters include all alpha-numerics and dashes.
    2018/10/15 04:53:30 [WARN] agent: check 'service:17947fbe-24ee-40e1-8e49-ea42415ada23' has deregister interval below minimum of 1m0s
    2018/10/15 04:53:30 [WARN] agent: check 'service:81d5b247-73d1-4ae5-9d1a-208770ca4e6a' has deregister interval below minimum of 1m0s
    2018/10/15 04:53:30 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp)
    2018/10/15 04:53:30 [INFO] raft: Node at 192.168.153.129:8300 [Follower] entering Follower state (Leader: "")
    2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: consul-3.dc1: 192.168.153.131:8302
    2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: LZZ.PRODUCTS.WebServer: 192.168.153.133:8301
    2018/10/15 04:53:30 [INFO] consul: Adding LAN server consul-1 (Addr: tcp/192.168.153.129:8300) (DC: dc1)
    2018/10/15 04:53:30 [INFO] consul: Raft data found, disabling bootstrap mode
    2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-1.dc1" in area "wan"
    2018/10/15 04:53:30 [WARN] agent/proxy: running as root, will not start managed proxies
    2018/10/15 04:53:30 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp)
    2018/10/15 04:53:30 [INFO] agent: Started HTTP server on [::]:8500 (tcp)
    2018/10/15 04:53:30 [INFO] agent: started state syncer
    2018/10/15 04:53:30 [INFO] serf: Attempting re-join to previously known node: consul-3: 192.168.153.131:8301
    2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-3.dc1 192.168.153.131
    2018/10/15 04:53:30 [WARN] memberlist: Refuting an alive message
    2018/10/15 04:53:30 [INFO] serf: EventMemberJoin: consul-2.dc1 192.168.153.130
    2018/10/15 04:53:30 [INFO] serf: Re-joined to previously known node: consul-3.dc1: 192.168.153.131:8302
    2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-3.dc1" in area "wan"
    2018/10/15 04:53:30 [INFO] consul: Handled member-join event for server "consul-2.dc1" in area "wan"
    20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值