专栏首页品茗ITWeb基础配置篇(十五): Consul单机、集群的安装使用及作为配置中心使用

Web基础配置篇(十五): Consul单机、集群的安装使用及作为配置中心使用

Web基础配置篇(十五): Consul单机、集群的安装使用及作为配置中心使用

一、概述

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

consul之所以广为JAVA开发知,要归功于SpringCloud,SpringCloud可以基于Consul实现服务注册发现,也可以基于Consul实现配置中心动态配置功能。

《SpringCloud技术指南系列(四)服务注册发现之Consul服务注册》《SpringCloud技术指南系列(八)配置管理之Consul配置中心》一文中,已经介绍了SpringCloud如何使用consul做注册中心和配置中心。

本篇重点介绍下consul的安装、配置、集群建立方式,并介绍Consul的接口,教你如何脱离SpringCloud使用consul。

**如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以<a

href="https://jq.qq.com/?_wv=1027&k=52sgH1J"

target="_blank">

加入我们的java学习圈,点击即可加入

</a>

,共同学习,节约学习时间,减少很多在学习中遇到的难题。**

二、准备工作

2.1 Consul下载

在这里插入图片描述

2.2 解压

  • windows解压后就一个consul.exe文件;
  • Linux解压后就一个consul文件;
  • 文件可以直接运行。

三、Consul单机

3.1 开发者模式

运行命令:

consul agent -dev然后就启动了,就这么简单,可以通过http://127.0.0.1:8500 来访问这个consul的ui界面。但是,这种模式一般是自己开发的时候用的,因为它不带记忆功能,也不能与其他consul互通。3.3 Client模式Consul 的 Client模式,就是客户端模式。是 Consul 节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到 Server,本身是不持久化这些信息。Client模式不能脱离Server单独运行,因此无法实现单机模式3.3 Server模式Consul 的 Server 模式,表明这个 Consul 是个 Server ,这种模式下,功能和 Client 都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。运行命令:consul agent -server -bootstrap-expect 1 -data-dir /soft/data/consul -node=consulServer1 -bind=10.247.63.210 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0

然后就启动了,就这么简单。

可以通过http://10.247.63.210:8500 来访问这个consul的ui界面。

  • -server : 定义agent运行在server模式
  • -bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
  • -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
  • -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
  • -ui: 开启consul的界面;
  • -rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
  • -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
  • -client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0

Server模式可以单独运行,实现单机模式,bootstrap-expect为1即可。

四、Consul集群

集群和单机的启动方式是一样的,只需要指定并接入到其他Server即可。

4.1 集群Server

我这里使用3台机器作为集群测试,两台在linux上,一台在windows上。

Server1:

consul agent -server -bootstrap-expect 3 -data-dir /soft/data/consul -node=consulServer1 -bind=10.247.63.210 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0Server2:consul agent -server -bootstrap-expect 3 -data-dir /soft/data/consul -node=consulServer2 -bind=10.247.62.76 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0 -join 10.247.63.210

Server3:

consul.exe agent -server -bootstrap-expect 3 -data-dir E:/data/consul/data/ -node=consulServer3 -bind=10.247.62.91 -ui -rejoin -config-dir=E:/data/consul/config/ -client 0.0.0.0 -join 10.247.63.210注意:上面命令在windows上不能使用powershell启动consul,用cmd就可以。

在这里插入图片描述

我停掉windows的consul:

在这里插入图片描述

如上图所示,用consul members 命令查看consul集群状态,有三个consul。上图中failed的那个consul是我停掉的windows的consul。停掉以后,另外两个server仍然不断重连:

在这里插入图片描述

4.1 集群Client将停掉的server改为client加入到集群中去。consul.exe agent -data-dir E:/data/consul/data/ -node=cc1 -bind=10.247.62.91 -ui -config-dir=E:/data/consul/config/ -client 0.0.0.0 -join 10.247.63.210

在这里插入图片描述

可以看到,停掉的server还是failed。另外,其他两个server仍然不断重连停掉的server3.

client的ui打开后是啥也没有的:

在这里插入图片描述

server的consul打开之后是能看到service等内容的。

五、Consul的API列表

consul的主要接口是RESTful HTTP API,该API可以用来增删查改nodes、services、checks、configguration。所有的endpoints主要分为以下类别:

kv - Key/Value存储
agent - Agent控制
catalog - 管理nodes和services
health - 管理健康监测
session - Session操作
acl - ACL创建和管理
event - 用户Events
status - Consul系统状态

5.1 agent

agent endpoints用来和本地agent进行交互,一般用来服务注册和检查注册,支持以下接口:

/v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口)
/v1/agent/services : 返回本地agent注册的所有 服务
/v1/agent/members : 返回agent在集群的gossip pool中看到的成员
/v1/agent/self : 返回本地agent的配置和成员信息
/v1/agent/join/<address> : 触发本地agent加入node
/v1/agent/force-leave/<node>>: 强制删除node
/v1/agent/check/register : 在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据
/v1/agent/check/deregister/<checkID> : 注销一个本地agent的检查项
/v1/agent/check/pass/<checkID> : 设置一个本地检查项的状态为passing
/v1/agent/check/warn/<checkID> : 设置一个本地检查项的状态为warning
/v1/agent/check/fail/<checkID> : 设置一个本地检查项的状态为critical
/v1/agent/service/register : 在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据
/v1/agent/service/deregister/<serviceID> : 注销一个本地agent的服务项

5.2 catalog

catalog endpoints用来注册/注销nodes、services、checks:

/v1/catalog/register : 注册一个node, service, check
/v1/catalog/deregister : 注销node, service, check
/v1/catalog/datacenters : 列出所有dc
/v1/catalog/nodes : 列出某节点的dc
/v1/catalog/services : 列出某dc的服务
/v1/catalog/service/<service> : 列出某服务的所有节点
/v1/catalog/node/<node> : 列出某节点的所有服务

5.3 health

health endpoints用来查询健康状况相关信息,该功能从catalog中单独分离出来:

/v1/healt/node/<node>: 返回node所定义的检查,可用参数?dc=
/v1/health/checks/<service>: 返回和服务相关联的检查,可用参数?dc=
/v1/health/service/<service>: 返回给定datacenter中给定node中service
/v1/health/state/<state>: 返回给定datacenter中指定状态的服务,state可以是"any", "unknown", "passing", "warning", or "critical"

5.4 session

session endpoints用来create、update、destory、query sessions.

/v1/session/create: 创建一个session
/v1/session/destroy/<session>: 销毁session
/v1/session/info/<session>: 查询session
/v1/session/node/<node>: 列出某节点所有session
/v1/session/list:  列出所有session

5.5 event

event endpoints用来fire新的events、查询已有的events:

/v1/event/fire/<name>: 触发一个新的event,用户event需要name和其他可选的参数,使用PUT方法
/v1/event/list: 返回agent知道的events

5.6 status

status endpoints用来或者consul 集群的信息:

/v1/status/leader : 返回当前集群的Raft leader
/v1/status/peers : 返回当前集群中同事

六、配置中心

打开consul的界面,如:http://10.247.63.210:8500

  • 点击 Key/Value, 新建config目录(新建目录和新建文件是一样的,只不过新建目录后面要加/);
  • 然后在config目录下新建consulConfig目录(上面的spring.cloud.consul.config.defaultContext)。;
  • 然后在consulConfig目录下新建data文件,写入yaml配置。

在这里插入图片描述

比如这里写了个welcom.value配置。

welcom:
   value: vbvcbbb

注意:直接在网页上写配置,可能会有问题,建议在yaml编辑器里写好了粘贴过来。

七、脱离SpringCloud使用服务注册发现

在我的开源项目consul-proxyhttps://www.pomit.cn/consul-proxy 中,就脱离了SpringCloud使用服务注册发现。

7.1 依赖

可以使用ecwid.consul对consul进行操作,其实就是对上面的consul的api列表进行操作。

<dependency>
	<groupId>com.ecwid.consul</groupId>
	<artifactId>consul-api</artifactId>
	<version>${consul.version}</version>
</dependency>

7.2 服务注册

首先,组装服务信息,主要是地址、端口、名称信息,然后使用ConsulClient的agentServiceRegister注册相应的服务即可。

ConsulClient client = new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
NewService service = new NewService();
service.setId(consulProperties.getInstanceId());
service.setAddress(consulProperties.getHostname());
service.setName(consulProperties.getApplicationName());
service.setTags(createTags());

service.setPort(consulProperties.getApplicationPort());
setCheck(service);
try {
	client.agentServiceRegister(service);
	log.info("服务已注册:{}", service);
} catch (ConsulException e) {
	log.warn("Error registering service with consul: " + service, e);

	log.info("重新提交注册:{}", service);
	client.agentServiceRegister(service);
}

7.3 服务发现

使用ConsulClient的getHealthServices获取健康服务即可。

ConsulClient client = new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
Response<List<HealthService>> catalogServiceList = client.getHealthServices(serviceId, true, null);
List<HealthService> list = catalogServiceList.getValue();

这里只是查出来所有可用的节点,如果需要使用负载均衡服务调用,需要另外的组件进行配合,比如ribbon。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot入门建站全系列(八)集成模板引擎(thymeleaf)渲染页面

    本文不讲前后端分离,先讲下模板引擎,Springboot支持很多模板引擎,thymeleaf算是比较好用的一种。

    品茗IT
  • Java锁、悲观乐观锁、分布式锁?细说那年我们用过的锁

    Java锁,指的是应用中使用的锁;应用中在处理线程安全的问题时,常常使用synchronized 或者ReentrantLock等锁来保证线程安全。

    品茗IT
  • HadoopHA--高级配置

    品茗IT
  • 《hadoop权威指南》笔记二: hdfs读写过程剖析

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。

    皮皮熊
  • linux多个python版本共存切换方

    python命令通常存在

    py3study
  • Consul最常用的命令和接口api

    Consul 简化了分布式环境中的服务注册和发现流程,可通过 HTTP 或者 DNS 接口发现服务,此处简单罗列了一下最常用的命令和接口api。 1. con...

    java达人
  • 02、人人都会设计模式--单例模式

    一个男人只能有一个媳妇「正常情况」,一个人只能有一张嘴,通常一个公司只有一个 CEO ,一个狼群中只有一个狼王等等

    TigerChain
  • 安全厂商间真的能“数据共享,协同合作”吗?

    随着网络技术的不断发展,安全厂商也如雨后春笋般涌现出来。从云主机、电子邮件服务器和终端设备的安全,到恶意软件、网络威胁、网络钓鱼以及DDoS攻击保护,几乎各种与...

    FB客服
  • TensorFlow Lite发布重大更新!支持移动GPU、推断速度提升4-6倍

    TensorFlow用于移动设备的框架TensorFlow Lite发布重大更新,支持开发者使用手机等移动设备的GPU来提高模型推断速度。

    量子位
  • 从学生到同学,告诉你一个不一样的中德机器人合作

    机器人未来将多大程度替代人类的工作仍是未知,但这项技术成为全球智能制造领域风口已确凿无疑。作为机器人产业发展先驱国家之一的德国,上世纪70年代便开始在部分岗位推...

    机器人网

扫码关注云+社区

领取腾讯云代金券