Consul

 

一、consul是什么

Consul是HashiCorp公司推出的开源工具,

Go语言开发,

用于实现分布式系统的服务发现与服务配置。

它有开源版和企业版

 

二、特点 & 优势

1、服务注册与发现、分布式、高可用、可横向扩展

2、内置KV存储,便于配置信息共享

3、支持健康检查,支持检测方式:http、脚本、tcp、ttl(类似于心跳检测)

4、使用 Raft 算法来保证一致性

5、支持多数据中心,内外网的服务采用不同的端口进行监听,确保高可用

6、支持 http 和 dns 协议接口

7、官方提供web管理界面(web ui),包括:服务、节点、键/值、ACL、intentions(意图)等管理

8、天生支持跨平台(可移植):支持windows、linux(Ubuntu/Debian、CentOS/RHEL、Fedora、Amazon Linux 等)、Mac OS X、FreeBSD、Solaris

 

三、注册中心思想

注册中心

 

四、Consul数据中心设计

1、单数据中心架构

单数据中心架构

2、多数据中心架构

多数据中心架构

 

四、Consul安装部署

1、Linux下二进制方式安装

1)下载二进制包

2)解压到/usr/local/bin

2、源码方式安装(使用go环境)

1)创建源码文件夹

2)使用git克隆源码

3)执行安装

3、docker方式安装

1)拉取镜像

2)安装并运行

 

五、Consul启动服务-单机

consul是以agent方式来运行。

agent有两种节点模式: server和client

启动方式1: 开发者模式启动

查看效果:curl http://192.168.1.109:8500

http://192.168.1.109:8500/ui/dc1/services

设置监听端口:

启动方式2:server模式启动(生产部署模式),单机方式

注意:仅一台机器时(即非集群情况下)该参数可有可无:-bootstrap-expect=1

 

六、Consul启动服务-集群

1、部署一个多节点集群

部署在3台主机上,规划如下:

主机名IP部署服务
node1192.168.1.109server
node2192.168.1.110client
node3192.168.1.111client
node4192.168.1.112client

2、前置条件

3、分别在各个机器上拉取 consul 的Docker镜像

4、按照部署规划,分别启动

5、访问管理界面,通过浏览器打开以下任意地址均可

http://192.168.1.109:8500 或者 http://192.168.1.110:8501 或者 http://192.168.1.111:8502 或者 http://192.168.1.112:8503

 

七、Consul管理界面配置域名访问

 

八、Consul服务注册

支持两种注册方式:

1、使用配置文件方式注册服务:通过写配置文件,启动时加载注册,或者 命令行加载

该方式启动consul时需要执行参数: -config-dir=/data/service/consul/conf

使配置生效示例:

2、在consul启动之后,通过HTTP API动态添加

加上健康检查

 

九、Consul服务发现

consul对服务发现提供两种方式:

1. 通过HTTP API

1)获取服务列表:

方式1 - http api:curl http://192.168.1.109:8500/v1/agent/services

方式2 - 命令行:consul catalog services -http-addr=http://192.168.1.109:8500

2)获取单个服务信息:

格式:curl http://192.168.1.109:8500/v1/catalog/service/服务名

示例:curl http://192.168.1.109:8500/v1/catalog/service/order-api

2. 通过DNS查询

dns格式:

服务名.service.consul

tag名.服务名.service.consul

dns示例:

dig @192.168.1.109 -p 8500 order-api.service.consul

dig @192.168.1.109 -p 8500 dev-order-api.order-api.service.consul

 

十、Consul服务注销

1、http api方式

格式:curl -X PUT http://consul地址/v1/agent/service/deregister/服务id

示例:curl -X PUT http://192.168.1.109:8500/v1/agent/service/deregister/order-api

2、命令行方式

格式:consul services deregister -id=服务id -http-addr=consul接口地址

示例:consul services deregister -id=mobile-api -http-addr=http://192.168.1.109:8500

 

十一、Consul使用-go代码示例

注册服务

kv配置

 

十二、Consul资料

 

十三、其它常见的注册中心