我们是如何在项目中使用Consul的。
Background Info
项目基本信息:
- MicroServices架构基于Spring Cloud框架实现;
- 除了系统自身的4个核心服务外,还包含其他的第三方服务如Mysql, Mongo以及其它开源软件等
- 当前系统部署方式基于Docker完成系统核心服务以及第三方服务的部署,配合使用Docker Compose以及Ansible完成应用的自动化部署
- 包含3个基本的环境Dev环境,UAT环境,Prod环境
Consul In Practice
1, As Service Discovery
使用开发模式我们可以快速验证Consul提供的相关能力
1 | consul agent -dev -config-dir /etc/consul.d |
Consul中我们非常方便的创建和定义服务,例如通过在/etc/consul.d/中创建文件sonarqube.json
1 | { |
完成服务定义之后:
1 | consul reload |
可以重新加载服务配置文件,从Consul UI中我们可以查看到我们的服务实例
完成服务注册之后我们便可以通过Consul提供的API去查询服务实例
例如我们可以通过HTTP API查询到sonarqube服务实例的相关信息:
1 | curl http://localhost:8500/v1/catalog/service/web |
除此之外Consul还提供了内置的DNS服务,DNS服务的默认访问端口为8600,通过DNS服务我们可以通过域名’[serviceName].service.consul’的方式直接访问我们的服务实例:
1 | dig @127.0.0.1 -p 8600 sonarqube.service.consul |
或者结合使用服务的tag标签[tagName].[serviceName].service.consul的方式访问服务实例:
1 | dig @127.0.0.1 -p 8600 dev.sonarqube.service.consul |
你还可以通过在启动consul是使用–domain参数设定域名规则
2, As Service Monitor
同时当应用以服务为单位向外部暴露接口之后,需要对各个服务的状态进行监控,Consul同样可以非常方便的让我们能够对服务状态进行监控.
同样以sonarqube为例子,通过check属性我们可以自定义所需要的监控方式。
1 | { |
除了通过script脚本的形式进行服务的健康检查,Consule还支持一下方式:
HTTP状态检查:
1 | { |
TCP状态检查:
1 | { |
TTL检查:1
2
3
4
5
6
7
8{
"check": {
"id": "web-app",
"name": "Web App Status",
"notes": "Web app does a curl internally every 10 seconds",
"ttl": "30s"
}
}
Docker容器监控:
1 | { |
3, Key/Vale Store
Consul支持开放的K/V存储,你可以用在动态配置,特性开关,调度, 集群等等任何你需要使用的地方,同时Consul提供的HTTP API可以让你非常易于使用
本篇不详细说明该特性,后续会详细讨论在集中式配置管理中的应用
4, As DataCenters
在实际软件交付过程中我们会涉及到另外一个问题,多环境的管理,以当前自己所在的项目为例,在交付过程中会涉及到3个基本的环境Dev, UAT以及Prod环境。各个环境独立部署了所有的服务,Cosul的多数据中心能力可以很好的对多个环境进行统一的管理和监控;
以下我们假设以Dev和UAT两个DataCenter为例
- DEV DataCenter:
在Node1上启动Consul Server
1 | consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=agent-one -config-dir /etc/consul.d -bind 192.168.0.2 -client 0.0.0.0 -ui -dc=dev |
在Node2上启动Consul Agent
1 | consul agent -data-dir /tmp/consul -node=agent-two -config-dir /etc/consul.d -bind=192.168.0.3 -dc=dev |
加入到Consul Server
1 | consul join 192.168.0.2 |
此时在Node1或者Node2上检查当前集群信息
1 | consul members |
- UAT DataCenter:
在Node3上启动Consul Server
1 | consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=agent-three -config-dir /etc/consul.d -bind 192.168.2.2 -dc=uat |
- 关联Dev和UAT DataCenter
在Node1上:
1 | consul members -wan |
通过命令
1 | consul join -wan 192.168.2.2 |
通过Consul UI集中式管理多个环境的信息
Summary
这篇主要目的是用于介绍一下Consul的基本特性
在后续还会继续考虑:
- 使用Consul替换Spring Cloud作为服务发现和注册平台;
- 与Docker集成完成服务的自动发现和注册;
- 基于Consul的KV特性完成系统的中心化配置管理
未完待续……