微服务Consul简介

微服务Consul简介

概述

Consul是一个服务管理软件。支持多数据中心下,分布式高可用的,服务发现和配置共享。采用 Raft 算法,用来保证服务的高可用。

Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。

 

服务注册/发现是微服务架构中不可或缺的重要组件,起初服务都是单节点的甚至是单体服务,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问(HttpClient/RestTemplate),直到后面出现了多个节点的分布式架构,起初的解决手段是在服务端负载均衡,同时在网关层收束接口,使不同的请求转发到对应不同端口上,这也是前后分离防止前端跨域的手段之一:

1 Consul组成部分

Consul是一个用来实现分布式系统的服务发现与配置的开源工具。他主要由多个组成部分:

服务发现:客户端通过Consul提供服务,类似于API,MySQL,或者其他客户端可以使用Consul发现服务的提供者。使用类似DNS或者HTTP,应用程序和可以很轻松的发现他们依赖的服务。

检查健康:Consul客户端可以提供与给定服务相关的健康检查(Web服务器返回200 ok)或者本地节点(“内存利用率低于90%”)。这些信息可以监控集群的运行情况,并且使访问远离不健康的主机组件。

键值对存储:应用程序可以使用Cousul的层级键值对。

多数据中心:Consul有开箱及用的多数据中心。

1.1 Consul 的角色

client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.

agent

组成 consul 集群的每个成员上都要运行一个 agent,可以通过 consul agent 命令来启动。agent 可以运行在 server 状态或者 client 状态。自然的,运行在 server 状态的节点被称为 server 节点;运行在 client 状态的节点被称为 client 节点。

client 节点

负责转发所有的 RPC 到 server 节点。本身无状态,且轻量级,因此,可以部署大量的 client 节点。

server 节点

负责组成 cluster 的复杂工作(选举、状态维护、转发请求到 lead),以及 consul 提供的服务(响应 RCP 请求)。考虑到容错和收敛,一般部署 3 ~ 5 个比较合适。

1.2 Consul内幕术语

代理(agent):代理是Consul集群上每个成员的守护进程,它是由consul agent开始运行。代理能够以客户端或服务器模式运行。由于所有节点都必须运行代理,所以将节点引用为客户端或服务器更为简单,但还有其他实例的代理。所有代理可以运行DNS或HTTP接口,并负责运行检查和保持服务同步。

客户端:客户端可以将所有RPC请求转发到服务器的代理。客户端是相对无状态的。客户端执行的唯一后台活动是LANgossip池。它消耗最小的资源开销和少量的网络带宽。

服务器端:服务器端是具有扩展的功能的代理,它主要参与维护集群状态,响应RPC查询,与其他数据中心交换WAN gossip ,以及向上级或远程数据中心转发查询。

数据中心:虽然数据中心的定义似乎很明显,但仍有一些细微的细节必须考虑。我们将一个数据中心定义为一个私有、低延迟和高带宽的网络环境。这不包括通过公共互联网的通信,但是为了我们的目的,单个EC2区域内的多个可用区域将被视为单个数据中心的一部分

Gossip:consul是建立在serf之上的,它提供了一个完整的gossip协议,用在很多地方。Serf提供了成员,故障检测和事件广播。Gossip的节点到节点之间的通信使用了UDP协议。

LAN Gossip:指在同一局域网或数据中心的节点上的LAN Gossip池。

WAN Gossip:指包含服务器的WAN Gossip池,这些服务器在不同的数据中心,通过网络进行通信。

一致性协议采用 Raft 算法,用来保证服务的高可用.

成员管理和消息广播 采用GOSSIP协议,支持ACL访问控制。

ACL技术在路由器中被广泛采用,它是一种基于包过滤的流控制技术。控制列表通过把源地址、目的地址及端口号作为数据包检查的基本元素,并可以规定符合条件的数据包是否允许通过。

gossip就是p2p协议。他主要要做的事情是,去中心化。 

这个协议就是模拟人类中传播谣言的行为而来。首先要传播谣言就要有种子节点。种子节点每秒都会随机向其他节点发送自己所拥有的节点列表,以及需要传播的消息。任何新加入的节点,就在这种传播方式下很快地被全网所知道。

1.2 Consul白话介绍

CLIENT

CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

SERVER

SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

SERVER-LEADER

中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

其它信息

其它信息包括它们之间的通信方式,还有一些协议信息,算法。它们是用于保证节点之间的数据同步,实时性要求等等一系列集群问题的解决。

 

 

1.4 Consul-Web页面介绍

Consul 的 Web 管理界面有一些菜单,我们这里做一下简单的介绍:

Services,管理界面的默认页面,用来展示注册到 Consul 的服务,启动后默认会有一个 consul 服务,也就是它本身。

Nodes,在 Services 界面双击服务名就会来到 Services 对于的 Nodes 界面,Services 是按照服务的抽象来展示的,Nodes 展示的是此服务的具体节点信息。比如启动了两个订单服务实例,Services 界面会出现一个订单服务,Nodes 界面会展示两个订单服务的节点。

Key/Value ,如果有用到 Key/Value 存储,可以在界面进行配置、查询。

ACL,全称 Access Control List,为访问控制列表的展示信息。

Intentions,可以在页面配置请求权限。

 

2安装consul

2.1在官网下载安装包,选择linux64版本的

安装包为consul_1.4.4_linux_amd64.zip。

2.2 安装以三台服务器为例

10.11.176.67

10.11.176.67

10.11.176.67

2.3在Linux新建以下目录

mkdir /var/data

mkdir -p /var/data/consuldata

mkdir /home/app-services/consul

mkdir /etc/consul.d

2.4 解压安装包值安装目录

cd /home

unzip consul_1.6.1_linux_amd64.zip -d /home/app-services/consul

创建快速命令:

cp /home/app-services/consul/consul /usr/local/bin/

2.5测试是否安装完成

consul  -v

安装完成的效果:

3 启动Consul

3.1 启动命令

  1. 启动第一台服务器上的consul
  2. consul agent -server -bind=10.11.108.3 -dev -client=0.0.0.0 -ui -data-dir=/var/data/consuldata/ -node=server-3 -datacenter jkun >>/var/data/consuldata/consul.log 2>&1 &
  3. 启动第二台服务器上的consul

consul agent -server -bind=10.11.108.4 -client=0.0.0.0 -ui -bootstrap-expect 3 -data-dir=/var/data/consuldata/ -join=10.11.108.3 -node=server-4 -datacenter jkun >>/var/data/consuldata/consul.log 2>&1 &

  1. 启动第三台服务器上的consul

consul agent -server -bind=10.11.108.5 -client=0.0.0.0 -ui -bootstrap-expect 3 -data-dir=/var/data/consuldata/ -join=10.11.108.3 -node=server-5 -datacenter jkun >>/var/data/consuldata/consul.log 2>&1 &

  1. 创建完成以后三台服务会选举3服务器上的consul为leader

 

3.2 命令说明

运行cosnul agent以server模式,

-server : 定义agent运行在server模式

-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用

-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0

-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名

-ui-dir: 提供存放web ui资源的路径,该目录必须是可读的

-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。

-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载

-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0

-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址

-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。

-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用

-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0

-client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1

-config-file:明确的指定要加载哪个配置文件

-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载

-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在

-dc:该标记控制agent允许的datacenter的名称,默认是dc1

-encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key

-join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。

-retry-join:和join类似,但是允许你在第一次失败后进行尝试。

-retry-interval:两次join之间的时间间隔,默认是30s

-retry-max:尝试重复join的次数,默认是0,也就是无限次尝试

-log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。

-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名

-protocol:consul使用的协议版本

-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。

-server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个

-syslog:开启系统日志功能,只在linux/osx上生效

-ui-dir:提供存放web ui资源的路径,该目录必须是可读的

-pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent

 

 

4 Consul操作

4.1删除无效节点

1. 在Consul的web管理界面找到需要删除的无效节点的名称

 

2. 查找无效节点的服务ID

curl  http://192.168.9.252:8500/v1/health/service/consul-producer1?passing=false

consul-producer1为服务名称

结果:

3. 执行删除操作

curl  http://192.168.9.252:8500/v1/agent/service/deregister/yxy-ms-consul  -X  PUT

yxy-ms-consul为Service的ID。

4.2 查看版本

consul  -v

安装完成的效果:

4.2 查看集群成员

consul members

4.3 查看集群成员身份

consul operator raft list-peers

5 目前公司主要应用

Consul分为Client和Server两种节点(所有的节点也被称为Agent),Server节点保存数据,Client负责健康检查及转发数据请求到Server;Server节点有一个Leader和多个Follower,Leader节点会将数据同步到Follower,Server的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader。

consul在Java开发者眼中只有一个会被用到的功能:服务注册与发现,即Service Discovery。

在我公司项目中就是简单的服务注册与发现,奇怪的事,我公司没有配置文件,没有提前注册,都是先启动Consul服务,在启动程序,程序内写入注册Consul。

5.1 服务注册

1 通过HTTP API注册服务

注册一个ID为“test001”,name为“test”的服务:curl -X PUT -d '{"id": "test001","name": "test","address": "127.0.0.1","port": 8080,"tags": ["dev"]}' http://192.168.78.131:8500/v1/agent/service/register

2 配置文件生效

在目录/etc/consul.d下建立一个文件web.json,内容如下:

{ "service":  {"name": "web", "tags": ["rails"], "port": 80} }

$consul agent -dev -config-dir /etc/consul.d

consul agent -config-file=/data/consul/config/server.json > /data/logs/consul/consul.log 2>&1 &

# 等待server2与server3启动后,去除server1的bootstrap,然后leave,最后重启server1

consul leave

{

  "datacenter": "dc1",

  "node_name": "server1",

  "server": true,

  "data_dir": "/data/consul/data",

  "addresses": {"http": "0.0.0.0"},

  "retry_join" : ["***.***.***.***:8301", "**********:8302"]

}

consul agent -config-file=/data/consul/config/server.json > /data/logs/consul/consul.log 2>&1 &

 

extend config

{

  "reconnect_timeout": "72h",

  "retry_interval": "30s",

  "session_ttl_min": "10s"

}


 

5.2 查看服务是否注册成功


2.1 curl http://192.168.78.131:8500/v1/catalog/service/test 查看服务信息
2.2 curl http://192.168.78.131:8500/v1/health/service/test?passing 健康检查
2.3 http://192.168.78.131:8500打开管理页面查看已注册的服务


 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值