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节点。
集群搭建
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
安装consul
节点1
./consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=192.168.0.115 -datacenter=dc1
节点2
./consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-2 -client=0.0.0.0 -bind=192.168.0.114 -datacenter=dc1 -join 192.168.0.115
节点3
./consul agent -server -ui -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-3 -client=0.0.0.0 -bind=192.168.0.113 -datacenter=dc1 -join 192.168.0.115
客户端
./consul agent -bind 192.168.0.112 -client 192.168.0.112 -data-dir=C:\Counsul\tempdata -node LZZ.DEV.WebServer -join 192.168.0.115
- -node:节点的名称
- -bind:绑定的一个地址,用于节点之间通信的地址,可以是内外网,必须是可以访问到的地址
- -server:这个就是表示这个节点是个server
- -client:这个表示这个节点是个client
- -bootstrap-expect:这个就是表示期望提供的SERVER节点数目,数目一达到,它就会被激活,然后就是LEADER了
查看所有consul成员
./consul members
查看服务成员
./consul operator raft list-peers
关闭一台服务,测试leader状态
但是只要超过一半的Server(这里是2/3还活着)还活着,集群是可以正常工作的,这也是为什么像Consul、ZooKeeper这样的分布式管理组件推荐我们使用3个或5个节点来部署的原因。
查看服务状态
创建ASP.NET Core程序
安装consul包