• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
28.7的博客
等小白学会了游泳,我们天天海边,学会了滑板,我们夏天去冲浪冬天去滑雪,只要你愿意,我们去经历各种各样有趣的事情~ “鸡毛!我学会了发现冰激凌烧烤奶茶火锅,我们天天去吃!现在就去!” “●﹏●;”
博客园    首页    新随笔    联系   管理    订阅  订阅
Consul(服务全生命周期治) 单节点部署测试以及脚本制作示例(v1.21.2)
本文介绍了 HashiCorp 开发的开源工具 Consul,其定位为服务网格与服务治理工具,核心解决分布式系统中服务发现、配置同步、流量安全管控问题。文中详细阐述其四大核心功能:服务发现动态管理服务地址、健康检查过滤故障实例、KV 存储实现配置同步、服务分段保障通信安全,还提及基于 Raft 协议的高可用特性与多数据中心支持。同时给出安装步骤(下载二进制包、开发模式启动)、Web UI 访问方式,对比 etcd 等同类工具的全功能优势,最后说明其在微服务、云原生场景的应用,凸显其作为分布式系统基础设施的价值。

Consul 服务治理与健康检查指南

1. 基础配置准备

  • 创建 /etc/consul.d 作为服务注册的配置文件目录
  • 创建 consul-base.hcl 作为 Consul 服务本身的配置文件

Consul 是由 HashiCorp(知名基础设施自动化工具厂商,代表产品如 Terraform、Vagrant)开发的一款开源服务网格(Service Mesh)与服务治理工具,核心定位是解决分布式系统中“服务如何发现、配置如何同步、流量如何安全管控”三大核心问题,尤其适用于微服务、云原生架构场景。

一、Consul 的核心功能

Consul 的功能围绕“服务全生命周期治理”设计,核心模块可分为四大类:

1. 服务发现(Service Discovery)

这是 Consul 最基础的功能,解决“分布式系统中,服务A如何找到服务B”的问题。

  • 工作原理:

    1. 服务(如“支付服务”“订单服务”)启动时,主动向 Consul 注册自身信息(IP、端口、健康状态检查方式等);
    2. 其他服务(如“用户服务”)需要调用“支付服务”时,向 Consul 发送查询请求;
    3. Consul 根据服务注册信息和健康检查结果,返回可用的“支付服务”实例列表(自动过滤故障实例)。
  • 价值:替代传统“硬编码IP”或“静态配置文件”,实现服务地址动态管理,适应微服务频繁扩容、缩容的场景。

2. 健康检查(Health Checking)

保障服务发现的“准确性”,避免将请求转发到故障服务。

  • 支持的检查类型:

    • 基础检查:TCP端口连通性(如检查8080端口是否存活)、HTTP接口(如访问/health接口判断返回码是否为200);
    • 自定义检查:执行Shell脚本(如检查日志是否有错误)、定时执行命令(如检查数据库连接)。
  • 机制: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 的技术特性

  1. 分布式与高可用:

    • 基于 Raft 一致性协议 实现集群管理,支持多节点部署(至少3个节点,避免单点故障);
    • 支持 多数据中心(Multi-Datacenter):跨地域的服务可通过 Consul 互联(如北京机房的服务发现上海机房的服务),无需复杂的跨域网络配置。
  2. 易用性:

    • 提供简洁的 CLI 命令(如consul agent启动节点、consul services register注册服务);
    • 内置 Web UI(默认端口8500),可直观查看服务列表、健康状态、KV配置等。
  3. 多语言与多平台支持:

    • 支持主流编程语言(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 的典型应用场景

  1. 微服务架构:管理数百个微服务的注册、发现、配置同步,如电商系统(订单、支付、库存服务的协同);
  2. 云原生部署:在 Kubernetes 集群中,作为“服务网格”替代 Istio(轻量场景),或补充 K8s Service 的功能(如跨集群服务发现);
  3. 多地域部署:跨国、跨机房的业务,通过 Consul 多数据中心功能实现全球服务互联;
  4. DevOps 自动化:结合 Terraform 等工具,实现“基础设施即代码(IaC)”与“服务配置”的联动。

五、如何快速体验 Consul?

  1. 安装:

Consul 28.7 云盘(不限速)

  1. 启动单机节点(开发模式,仅用于测试):
consul agent -dev  # 启动开发模式,自动创建单节点集群
  1. 访问 Web UI:打开浏览器访问 http://localhost:8500,即可看到 Consul 控制台,尝试注册一个测试服务或添加KV配置。
  2. 启动文件:
    将启动文件放在/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"

启动脚本如下

点击查看代码
data\_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二进制文件示意图

上传到服务器后,会得到一个二进制可执行文件
服务器上的consul文件

启动参数

开发者模式启动 consul:

./consul agent -dev -client=0.0.0.0

访问 http://consulIP:8500 即可打开 Consul Web 控制台
Consul Web UI界面

七、服务注册与健康检查示例

以 MySQL 为例

制作监控检查脚本,将脚本存放在 /etc/consul.d 目录下:

service {
  name = "MySQL-Service"
  id = "MySQL-TengXuny"
  address = "你的MySQL连接地址"
  port = 3306
  # 注意:如果生成过bootstrap或策略,注册服务时建议显式指定token参数 
  # token = "填入bootstarp\_token"
  tags = \["master", "TengxYun"]
  check {
    name = "MySQL-Check"
    tcp = "你的MySQL连接地址:3306"
    interval = "15s"  # 检查间隔
    timeout = "5s"    # 超时时间
  }
}

注册成功后在 Consul UI 中显示的 MySQL 服务状态

MySQL服务在Consul中的状态

HTTP 检查示例

service {
  name = "BlogHexoServer"
  id = "HexoBlog"
  address = "127.0.0.1"
  port = 4000
  # token = "填入bootstarp\_token"
  tags = \["blog","hexo"]
  check {
    name = "Hexobloghttp-check"
    http = "http://127.0.0.1:4000"  # 健康检查的HTTP接口
    interval = "15s"
    timeout = "5s"
    status = "200-299"  # 期望的HTTP状态码范围
  }
}

HTTP服务在Consul中的健康检查状态

Hexo博客服务健康检查状态

八. 生成Bootstrap(token令牌)

  • 全局令牌

在 Consul 中,consul acl bootstrap 命令用于初始化 ACL(Access Control List)系统,生成全局唯一的初始管理令牌(bootstrap token)。该令牌拥有最高权限(global-management 策略),可用于后续配置 ACL 规则、创建其他令牌等操作。在后续的操作中需要携带此token,直到三权分立,将bootstarp生成的权限分散给不同的局部token,但,全局token仍然存在

consul acl bootstrap

posted on 2025-11-11 14:52  28的博客  阅读(0)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3

摘自:28.7的博客

蜀ICP备2025124055号-2