Consul(服务全生命周期治) 单节点部署测试以及脚本制作示例(v1.21.2)

Consul(服务全生命周期治) 单节点部署测试以及脚本制作示例(v1.21.2)
28.7的博客Consul 服务治理与健康检查指南
1. 基础配置准备
- 创建
/etc/consul.d作为服务注册的配置文件目录 - 创建
consul-base.hcl作为 Consul 服务本身的配置文件
Consul 是由 HashiCorp(知名基础设施自动化工具厂商,代表产品如 Terraform、Vagrant)开发的一款开源服务网格(Service Mesh)与服务治理工具,核心定位是解决分布式系统中“服务如何发现、配置如何同步、流量如何安全管控”三大核心问题,尤其适用于微服务、云原生架构场景。
一、Consul 的核心功能
Consul 的功能围绕“服务全生命周期治理”设计,核心模块可分为四大类:
1. 服务发现(Service Discovery)
这是 Consul 最基础的功能,解决“分布式系统中,服务A如何找到服务B”的问题。
工作原理:
- 服务(如“支付服务”“订单服务”)启动时,主动向 Consul 注册自身信息(IP、端口、健康状态检查方式等);
- 其他服务(如“用户服务”)需要调用“支付服务”时,向 Consul 发送查询请求;
- Consul 根据服务注册信息和健康检查结果,返回可用的“支付服务”实例列表(自动过滤故障实例)。
价值:替代传统“硬编码IP”或“静态配置文件”,实现服务地址动态管理,适应微服务频繁扩容、缩容的场景。
2. 健康检查(Health Checking)
保障服务发现的“准确性”,避免将请求转发到故障服务。
支持的检查类型:
- 基础检查:TCP端口连通性(如检查8080端口是否存活)、HTTP接口(如访问
/health接口判断返回码是否为200); - 自定义检查:执行Shell脚本(如检查日志是否有错误)、定时执行命令(如检查数据库连接)。
- 基础检查:TCP端口连通性(如检查8080端口是否存活)、HTTP接口(如访问
机制:Consul 定期执行检查,若服务连续失败(可配置阈值),则将其标记为“不健康”,并从服务列表中剔除;恢复后自动重新加入。
3. 键值存储(Key-Value Store, KV Store)
用于分布式配置管理,解决“多服务、多实例如何同步配置”的问题。
典型场景:
- 全局配置:如数据库连接地址、API密钥、限流阈值等,只需在 Consul KV 中修改一次,所有依赖服务自动感知更新;
- 环境区分:通过KV路径区分环境(如
/config/prod/db、/config/test/db),避免配置文件混乱。
特点:支持配置版本控制、监听机制(服务可订阅KV变更,实时更新本地配置,无需重启)。
4. 服务分段(Service Segmentation,原“服务网格”核心)
实现服务间通信的安全管控,替代传统的网络防火墙(基于IP的管控),更适配微服务“动态IP”场景。
- 核心能力:
- 身份认证:为每个服务分配唯一“服务身份”(基于TLS证书),确保只有授权服务能通信;
- 访问控制:通过“意向(Intentions)”规则定义服务间的访问权限(如“允许订单服务调用支付服务,拒绝用户服务直接调用支付服务”);
- 流量加密:默认通过TLS加密服务间的TCP流量,防止数据泄露或篡改。
二、Consul 的技术特性
分布式与高可用:
- 基于 Raft 一致性协议 实现集群管理,支持多节点部署(至少3个节点,避免单点故障);
- 支持 多数据中心(Multi-Datacenter):跨地域的服务可通过 Consul 互联(如北京机房的服务发现上海机房的服务),无需复杂的跨域网络配置。
易用性:
- 提供简洁的 CLI 命令(如
consul agent启动节点、consul services register注册服务); - 内置 Web UI(默认端口8500),可直观查看服务列表、健康状态、KV配置等。
- 提供简洁的 CLI 命令(如
多语言与多平台支持:
- 支持主流编程语言(Go、Java、Python、Node.js等)的SDK,方便服务集成;
- 可运行在 Linux、Windows、macOS 及 Kubernetes 等容器编排平台(提供 Consul K8s 插件)。
三、Consul 与同类工具的对比
分布式系统中,部分工具也提供“服务发现”或“配置管理”功能,Consul 的核心优势是“全功能集成”(无需组合多个工具)。
| 工具 | 核心能力 | 优势 | 劣势 |
|---|---|---|---|
| Consul | 服务发现+健康检查+KV+服务分段 | 功能全、多数据中心支持好 | 资源占用略高(相比单一功能工具) |
| etcd | 分布式KV(侧重配置)+服务发现 | 轻量、性能好(适合K8s场景) | 无内置健康检查、服务分段功能 |
| ZooKeeper | 分布式协调(侧重一致性) | 成熟稳定(Hadoop/Spark依赖) | 配置复杂、不支持多数据中心 |
| Nacos | 服务发现+配置管理 | 国产、中文文档丰富、易用性高 | 服务分段能力较弱,生态不如Consul |
四、Consul 的典型应用场景
- 微服务架构:管理数百个微服务的注册、发现、配置同步,如电商系统(订单、支付、库存服务的协同);
- 云原生部署:在 Kubernetes 集群中,作为“服务网格”替代 Istio(轻量场景),或补充 K8s Service 的功能(如跨集群服务发现);
- 多地域部署:跨国、跨机房的业务,通过 Consul 多数据中心功能实现全球服务互联;
- DevOps 自动化:结合 Terraform 等工具,实现“基础设施即代码(IaC)”与“服务配置”的联动。
五、如何快速体验 Consul?
- 安装:
启动单机节点(开发模式,仅用于测试):
1
consul agent -dev # 启动开发模式,自动创建单节点集群
访问 Web UI:打开浏览器访问
http://localhost:8500,即可看到 Consul 控制台,尝试注册一个测试服务或添加KV配置。启动文件:
将启动文件放在/etc/consul.d/目录下,在启动时指定-config-dir=/etc/consul.d/,例如pm2 start "./consul agent -config-dir=/etc/consul.d/ -client=0.0.0.0 --bind=10.1.8.7 -server -bootstrap-expect=1" --name "consul"1
2
3
4
5
6
7
8
9
10
11
12
13data_dir = "/var/lib/consul"
client_addr = "0.0.0.0"
enable_script_checks = true
bind_addr = "你的IP地址,如果是公网,则填写内网地址"
ui_config {
enabled = true
}#启动ui界面
#=======下面的配置可选=====
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}总结:Consul 是一款“一站式”的分布式服务治理工具,通过整合服务发现、健康检查、配置管理、安全管控,解决了微服务和云原生架构中的核心痛点,是现代分布式系统中不可或缺的基础设施组件之一。
六、Consul 安装步骤
准备工作
获取 consul 的二进制可执行文件
上传到服务器后,会得到一个二进制可执行文件
启动参数
开发者模式启动 consul:
1 | ./consul agent -dev -client=0.0.0.0 |
访问
http://consulIP:8500即可打开 Consul Web 控制台
七、服务注册与健康检查示例
以 MySQL 为例
制作监控检查脚本,将脚本存放在 /etc/consul.d 目录下:
1 | service { |
注册成功后在 Consul UI 中显示的 MySQL 服务状态
HTTP 检查示例
1 | service { |
HTTP服务在Consul中的健康检查状态
八. 生成Bootstrap(token令牌)
- 全局令牌
在 Consul 中,consul acl bootstrap 命令用于初始化 ACL(Access Control List)系统,生成全局唯一的初始管理令牌(bootstrap token)。该令牌拥有最高权限(global-management 策略),可用于后续配置 ACL 规则、创建其他令牌等操作。在后续的操作中需要携带此token,直到
三权分立,将bootstarp生成的权限分散给不同的局部token,但,全局token仍然存在1
consul acl bootstrap









