SpringCloud框架Consul一站式注册与发现

版权声明:技术交流群:758191639 作者支付宝18696232390喜欢的可以打钱! https://blog.csdn.net/u014131617/article/details/85989897

1. Consul介绍

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配
置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务
注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心
方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。
Consul使用Go语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS
X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合

下面以Consul 在CentOS 7系统下为例,讲解Consul的安装及使用,其他平台的安
装也是类似的,所使用的Consul 版本为v0.7.0。
Consul下载页面:https://www.consul.io/downloads.html

2.Consul安装与使用

准备工作
一台CentOS 7 机器,输入 ifconfig ,查看网卡信息如下:

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 150
0
	inet 192.168.11.143 netmask 255.255.255.0 broadcast 19
	2.168.11.255
	inet6 fe80::20c:29ff:fe89:6b91 prefixlen 64 scopeid 0x
	20<link>
	ether 00:0c:29:89:6b:91 txqueuelen 1000 (Ethernet)
	RX packets 752526 bytes 705406371 (672.7 MiB)
	RX errors 0 dropped 0 overruns 0 frame 0
	TX packets 142062 bytes 18646825 (17.7 MiB)
	TX errors 0 dropped 0 overruns 0 carrier 0 collisions
0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
	inet 127.0.0.1 netmask 255.0.0.0
	inet6 ::1 prefixlen 128 scopeid 0x10<host>
	loop txqueuelen 0 (Local Loopback)
	RX packets 172 bytes 1003766 (980.2 KiB)
	RX errors 0 dropped 0 overruns 0 frame 0
	TX packets 172 bytes 1003766 (980.2 KiB)
	TX errors 0 dropped 0 overruns 0 carrier 0 collisions
0

我们可以看到,该机器有两个IP:

192.168.11.143
127.0.0.1

安装Consul(以CentOS7为例):

cd /usr/local/bin/
wget https://releases.hashicorp.com/consul/0.7.0/consul_0.7.0_linux_amd64.zip
unzip consul0.7.0linux_amd64.zip

得到 consul 文件,这样就完成了安装。

./consul agent -dev # -dev表示开发模式运行,另外还有-server表示服务模式运行

输入 http://127.0.0.1:8500/ui/ 访问Consul,可查看到如下界面:
在这里插入图片描述

我们尝试访问 http://192.168.11.143/ui/ ,会发现无法访问。说明Consul
还不能被远程访问。那么如何设置才能被远程访问呢?Consul如何高可用呢?

3.Consul常用命令

在这里插入图片描述

consul agent 命令详解

consul agent 命令的常用选项,如下:

-data-dir
	作用:指定agent储存状态的数据目录
	这是所有agent都必须的
	对于server尤其重要,因为他们必须持久化集群的状态
-config-dir
	作用:指定service的配置文件和检查定义所在的位置
	通常会指定为"某一个路径/consul.d"(通常情况下,.d表示一系列配置文
	件存放的目录)
-config-file
	作用:指定一个要装载的配置文件
	该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相
	同的值覆盖)
-dev
	作用:创建一个开发环境下的server节点
	该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
	这种模式不能用于生产环境(因为第二条)
-bootstrap-expect
	作用:该命令通知consul server我们现在准备加入的server节点个数,该
	2.1.5 Consul常用命令
	参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加
	入后启动。
-node
	作用:指定节点在集群中的名称
	该名称在集群中必须是唯一的(默认采用机器的host)
	推荐:直接采用机器的IP
-bind
	作用:指明节点的IP地址
	有时候不指定绑定IP,会报 Failed to get advertise address:
	Multiple private IPs found. Please configure one. 的异常
-server
	作用:指定节点为server
	每个数据中心(DC)的server数推荐至少为1,至多为5
	所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修
	改了集群的状态,且集群的状态保存在每一台server上保证可用性
	server也是与其他DC交互的门面(gateway)
-client
	作用:指定节点为client,指定客户端接口的绑定地址,包括:HTTP、
	DNS、RPC
	默认是127.0.0.1,只允许回环接口访问
	若不指定为-server,其实就是-client
-join
	作用:将节点加入到集群
-datacenter(老版本叫-dc,-dc已经失效)
	作用:指定机器加入到哪一个数据中心中

如上,大家应该可以猜到,
使用 -client 参数可指定允许客户端使用什么ip去访问,例如 -client
192.168.11.143 表示可以使用 http://192.168.11.143:8500/ui 去访问。
我们尝试一下:
consul agent -dev -client 192.168.11.143
发现果然可以使用 http://192.168.11.143:8500/ui 访问了。

参考文档
官方文档:https://www.consul.io/docs/agent/options.html
Consul系列博客:http://www.cnblogs.com/java-zhao/p/5378876.html

扫描二维码关注公众号,回复: 4842385 查看本文章

4.Consul 的高可用

在这里插入图片描述

这边准备了三台CentOS 7的虚拟机,主机规划如下,供参考:
在这里插入图片描述

搭建步骤:

  • 启动node0机器上的Consul(node0机器上执行):
consul agent 
-data-dir /tmp/node0 
-node=node0 
-bind=192.168.11.143 
-datacenter=dc1 -ui 
-client=192.168.11.143 
-server -bootstrap
-expect 1
  • 启动node1机器上的Consul(node1机器上执行):
consul agent -data-dir /tmp/node1 
-node=node1 -bind=192.168.11.144 
-datacenter=dc1 -ui
  • 启动node2机器上的Consul(node2机器上执行):
consul agent -data-dir /tmp/node2 -node=node2 
-bind=192.168.11.145 -datacenter=dc1 -ui -client=192.168.11.145
  • 将node1节点加入到node0上(node1机器上执行):
consul join 192.168.11.143
  • 将node2节点加入到node0上(node2机器上执行):
consul join -rpc-addr=192.168.11.145:8400 192.168.11.143
  • 这样一个简单的Consul集群就搭建完成了,在node1上查看当前集群节点:
consul members -rpc-addr=192.168.11.143:8400

结果如下:

Node Address Status Type Build Protocol DC
node0 192.168.11.143:8301 alive server 0.7.0 2 dc1
node1 192.168.11.144:8301 alive client 0.7.0 2 dc1
node2 192.168.11.145:8301 alive client 0.7.0 2 dc1

说明集群已经搭建成功了。
我们分析一下,为什么第5步和第6步需要加 -rpc-addr 选项,而第4步不需要加
任何选项呢?原因是-client指定了客户端接口的绑定地址,包括:HTTP、
DNS、RPC,而 consul joinconsul members 都是通过RPC与Consul交
互的。

访问集群

如上,我们三个节点都加了 -ui 参数启动了内建的界面。我们可以通
过: http://192.168.11.143:8500/ui/
http://192.168.11.145:8500/ui/ 进行访问,也可以在node1机器上通
http://127.0.0.1:8500/ui/ 进行访问,原因是node1没有开启远程访问 ,
三种访问方式结果是一致的,如下:
在这里插入图片描述

参考文档:
Consul官方文档:https://www.consul.io/intro/getting-started/install.html
Consul 系列博文:http://www.cnblogs.com/javazhao/
archive/2016/04/13/5387105.html
使用consul实现分布式服务注册和发
现:http://www.tuicool.com/articles/M3QFven

猜你喜欢

转载自blog.csdn.net/u014131617/article/details/85989897