Consul是什么
Consul 是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语音开发
Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。
中文文档:https://www.springcloud.cc/spring-cloud-consul.html
安装教程:https://learn.hashicorp.com/consul/getting-started/install.html
配置文档:https://www.consul.io/docs/agent/options.html
Consul的几个概念
图来自于consul官方文档
我们只看数据中心1,可以看出consul的集群是由N个SERVER,加上M个CLIENT组成的。而不管是SERVER还是CLIENT,都是consul的一个节点,所有的服务都可以注册到这些节点上,正是通过这些节点实现服务注册信息的共享。除了这两个,还有一些小细节,一一简单介绍。
CLIENT
CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。
SERVER
SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。
SERVER-LEADER
中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。
其它信息其它信息包括它们之间的通信方式,还有一些协议信息,算法。它们是用于保证节点之间的数据同步,实时性要求等等一系列集群问题的解决。这些有兴趣的自己看看官方文档(https://www.consul.io/docs/internals/index.html)。
安装Consul
环境:CentOS 7.4
1、下载二进制包
命令:wget https://releases.hashicorp.com/consul/1.7.2/consul_1.7.2_linux_amd64.zip
2、解压得到一个可执行文件
命令:unzip consul_1.7.2_linux_amd64.zip -d /data/soft/consul_1.7.2
3、配置环境变量,编辑/etc/profile 文件,内容如下:
编辑命令:vim /etc/profile
1 export CONSUL_HOME=/data/soft/consul_1.7.2 2 export PATH=$CONSUL_HOME:$PATH
使用环境变量配置生效
命令:source /etc/profile
4、验证 Consul 安装是否成功
命令:consul -v
运行Agent
安装Consul后必须运行Agent,可以选择服务器或客户端模式。每个数据中心至少有一个服务器(推荐3~5个服务器集群)。
简单起见,先启动一个Agent的开发模式:
前台启动命令:consul agent -dev
后台启动命令:nohup consul agent -dev > /dev/null 2>&1 &
1 # Agent的开发模式 2 [root@H__D consul_1.7.2]# consul agent -dev 3 ==> Starting Consul agent... 4 5 # 查看集群成员 6 [root@H__D consul_1.7.2]# consul members 7 Node Address Status Type Build Protocol DC Segment 8 H__D 127.0.0.1:8301 alive server 1.7.2 2 dc1 <all> 9 10 # 使用 HTTP API 查看 11 [root@H__D consul_1.7.2]# curl localhost:8500/v1/catalog/nodes 12 [ 13 { 14 "ID": "864e18ee-1311-7990-a0b0-16d0567dfb19", 15 "Node": "H__D", 16 "Address": "127.0.0.1", 17 "Datacenter": "dc1", 18 "TaggedAddresses": { 19 "lan": "127.0.0.1", 20 "lan_ipv4": "127.0.0.1", 21 "wan": "127.0.0.1", 22 "wan_ipv4": "127.0.0.1" 23 }, 24 "Meta": { 25 "consul-network-segment": "" 26 }, 27 "CreateIndex": 10, 28 "ModifyIndex": 11 29 } 30 ]
打开浏览器使用地址:http://127.0.0.1:8500,访问
Agent常用的参数
参数名称 | 用途 |
---|---|
-server | 此标志用于控制代理是运行于服务器/客户端模式,每个 Consul 集群至少有一个服务器,正常情况下不超过5个,使用此标记的服务器参与 Raft一致性算法、选举等事务性工作 |
-client | 表示 Consul 绑定客户端接口的IP地址,默认值为:127.0.0.1,当你有多块网卡的时候,最好指定IP地址,不要使用默认值 |
-bootstrap-expect | 预期的服务器集群的数量,整数,如 -bootstrap-expect=3,表示集群服务器数量为3台,设置该参数后,Consul将等待指定数量的服务器全部加入集群可用后,才开始引导集群正式开始工作,此参数必须与 -server 一起使用 |
-data-dir | 存储数据的目录,该目录在 Consul 程序重启后数据不会丢失,指定此目录时,应确保运行 Consul 程序的用户对该目录具有读写权限 |
-node | 当前服务器在集群中的名称,该值在整个 Consul 集群中必须唯一,默认值为当前主机名称 |
-bind | Consul 在当前服务器侦听的地址,如果您有多块网卡,请务必指定一个IP地址(IPv4/IPv6),默认值为:0.0.0.0,也可用使用[::] |
-datacenter | 代理服务器运行的数据中心的名称,同一个数据中心中的 Consul 节点必须位于同一个 LAN 网络上 |
-ui | 启用当前服务器内部的 WebUI 服务器和控制台界面 |
-join | 该参数指定当前服务器启动时,加入另外一个代理服务器的地址,在默认情况下,如果不指定该参数,则当前代理服务器不会加入任何节点。可以多次指定该参数,以加入多个代理服务器, |
-retry-join | 用途和 -join 一致,当第一次加入失败后进行重试,每次加入失败后等待时间为 30秒 |
-syslog | 指定此标志意味着将记录 syslog,该参数在 Windows 平台不支持 |