提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
文章目录
前言
一、consul是什么?
1.特性
2.注意
二、consul安装使用
1.consul安装
2.consul使用
总结
随着项目的不断迭代开发,服务架构也从单体到集群再到微服务,consul是我第一个接触的服务发现框架,从RPC入门到目前如何实现微服务之间的调用,服务注册、配置等相关机制,本文就介绍了consul安装使用过程,并且涉及到的内容主要有:golang、grpc、consul...
Consul是由HashiCorp开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,被大量应用于基于微服务的软件架构当中。用于实现分布式系统的服务发现和配置,包含多个组件。
1.1. 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变得很容易,甚至一些外部服务,例如saas提供的也可以一样注册。
1.2. 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现集成,可以防止服务转发到故障的服务上面。(心跳机制)
1.3. 键/值存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
1.4. 多数据中心:无需复杂的配置,即可支持任意数量的区域。
2.1. 一般三台或者三台以上的consul在运行,同名服务最好也是是三台或三台以上,默认可以搭建集群。
2.2. consul是分布式的、高可用、横向扩展的。
consul是用golang实现的,安装包只是一个可执行文件,安装过程非常简单。(具有天然可移植性 (支持 Linux、windows和macOS))
consul安装路径:Downloads | Consul by HashiCorpConsul is a service networking solution to automate network configurations, discover services, and enable secure connectivity across any cloud or runtime.https://www.consul.io/downloads
#Mac环境下 安装
brew tap hashicorp/tap
brew install hashicorp/tap/consul
安装验证:通过执行 consul命令,查看命令列表的输出情况
查看consul的所有参数:consul -h
核心指令:** agent: **维护成员的重要信息、运行检查、服务宣布、查询处理等。
** info:**指令提供了各种操作时可以用到的debug信息,对于client和server,info返回不同的子系统信息,目前有如下几个KV信息:agent(提供agent信息),consul(提供consul库的信息),raft(提供raft库的信息),serf_lan(提供LAN gossip pool),serf_wan(提供WAN gossip pool)
**leave:**指令触发一个优雅的离开动作并关闭agent,节点离开后不会尝试重新加入集群中。
**member:**指令输出consul agent目前所知道的所有的成员以及它们的状态,节点的状态只有alive、left、failed三种状态。
-detailed:输出每个节点更详细的信息。 -rpc-addr:一个rpc地址,agent可以链接上来发送命令,如果没有指定,默认是127.0.0.1:8400。 -status:过滤出符合正则规则的节点。
**reload:**指令可以重新加载agent的配置文件。SIGHUP指令在重新加载配置文件时使用,任何重新加载的错误都会写在agent的log文件中,并不会打印到屏幕。
consul的两种模式:
# 服务端
consul agent -server
# 客户端
consul agent
每个数据中心至少拥有一个server。
client是非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询。
agent必须在集群中的每个主机上运行。
server模式启动:
consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=n1 -bind=192.168.10.102 -ui -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0
配置文件位置:/etc/consul.d/
-server : 定义agent运行在server模式。
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用。
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0。
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-ui: 启动web界面 :8500。
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载。
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0。
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在。
client模式启动:
# -join 加入到已有的集群中去。
consul agent -data-dir /tmp/consul -node=n2 -bind=192.168.10.103 -config-dir /etc/consul.d -rejoin -join 192.168.10.102
示例:
# 2个server
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=S2 -bind=192.168.10.102 -ui -config-dir /etc/consul.d -rejoin -join 192.168.10.102 - client 0.0.0.0
consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.10.103 -ui -rejoin -join 192.168.10.102
# 1个client
consul agent -data-dir /tmp/consul -node=n3 -bind=192.168.10.104 -config-dir /etc/consul.d -rejoin -join 192.168.10.102
注册服务:
搭建好conusl集群后,用户或者程序就能到consul中去查询或者注册服务。可以通过提供服务定义文件或者调用HTTP API来注册一个服务。
配置文件方式如上文server搭建示例:目录/etc/consul.d/
# 文件.json
{
"service": {
"name": "Say",
"tags": ["say"],
"port": 9000
}
}
注册完服务后,重启consul。
如果需要注册多个服务,就需要创建多个服务定义文件。
查询服务:
一旦agent启动并且服务同步了,我们可以通过DNS或者HTTP的API来查询服务。
HTTP方式:
curl -s 127.0.0.1:8500/v1/catalog/service/say
WEB方式:默认consul对应的端口是8500
注册服务地址:http://127.0.0.1:8500
健康检查:
健康检查是服务发现的关键组件,可以预防使用到不健康的服务。和服务注册类似,一个检查可以通过检查定义或HTTP API请求来注册。
在/etc/consul.d/目录服务注册配置文件中实现健康检查:HTTP类型
{
"service": {
"name": "Say",
"tags": ["say", "english"],
"address": "192.168.10.102",
"port": 9000,
"check": {
"id": "api",
"name": "HTTP API on port 9000",
"http": "http://localhost:9000",
"interval": "10s",
"timeout": "1s"
}
}
}
consul做健康检查的必须是Script、HTTP、TCP、TTL中的一种。
停止agent:
agent作为一个服务器,优雅的离开是很重要的,可以避免引起潜在的可用性故障影响达成一致性协议:
consul leave
本文主要简单介绍了consul的安装和使用,最好结合使用grpc,通过配置简单的服务进行服务注册和健康检查等验证。对于consul的深入剖析,会在后续进行更深入的梳理。