192.168.80.102>consul agent -server -ui -bootstrap-expect=3 -data-dir=http://www.likecs.com/tmp/consul -node=consul-3 -client=0.0.0.0 -bind=192.168.80.102 -datacenter=dc1 -join 192.168.80.100
注意101和102的启动命令中,有一句 -join 192.168.80.100 => 有了这一句,就把101和102加入到了100所在的集群中。
启动之后,集群就开始了Vote(投票选Leader)的过程,通过下面的命令可以看到集群的情况:
在Windows Server虚拟机上启动:
> consul agent -bind 0.0.0.0 -client 192.168.80.71 -data-dir=C:\Counsul\tempdata -node EDC.DEV.WebServer -join 192.168.80.100
启动后会有如下提示:
4.通过UI查看集群
Consul不仅提供了丰富的命令查看集群情况,还提供了一个WebUI,默认端口8500,我们可以通过访问这个URL(eg. :8500)得到如下图所示的WebUI:
可以看到三个节点都正常启动,下面我们就来试试向Consul注册一下我们基于ASP.NET Core的WebAPI服务。
5.模拟Leader挂掉,查看Consul集群的新选举Leader这里我暴力一点直接将Leader节点关机:shutdown -h now,可以看到我们的80.100已经挂了。
查看其余两个节点的日志可以发现,consul-3 (80.102)被选为了新的leader:
当然,也可以通过80.101或102的WebUI查看:
也可以通过以下命令查看目前的各个Server的角色状态:
> consul operator raft list-peers
虽然这里80.100这个原leader节点挂掉了,但是只要超过一半的Server(这里是2/3还活着)还活着,集群是可以正常工作的,这也是为什么像Consul、ZooKeeper这样的分布式管理组件推荐我们使用3个或5个节点来部署的原因。
三、ASP.NET Core WebAPI服务注册 3.1 准备一个ASP.NET Core WebAPI程序Step1.创建一个ASP.NET Core WebAPI程序
Step2.创建一个HealthController用于Consul的健康检查
[Produces("application/json")] [Route("api/Health")] public class HealthController : Controller { [HttpGet] public IActionResult Get() => Ok("ok"); }