consul
consul 提供了服务发现、配置管理、服务网络、流量管理、api网关等诸多功能。其中最主要的功能是服务发现和配置管理功能
-
- 定义:服务发现允许应用自动发现其他服务的位置和状态,而无需人工配置或维护服务列表.
- 作用:当一个服务实例启动或停止时,Consul 能够自动注册或注销该实例,其他服务可以通过 Consul 查询到最新的服务列表,从而实现服务之间的自动通信和负载均衡.
- 优势:简化了服务间的通信配置,提高了系统的可扩展性和容错性,减少了人工维护的工作量.
-
- 定义:配置管理是指对系统和应用的配置信息进行集中管理和动态更新的过程.
- 作用:Consul 提供了一个键值存储功能,可以存储各种配置信息,如数据库连接字符串、API密钥、应用参数等;当配置信息发生变化时,Consul 能够实时通知应用进行更新,无需重启应用,实现了配置的动态管理;此外,Consul 还支持配置的版本控制和审计日志,方便进行配置的回滚和追踪.
- 优势:简化了配置的管理流程,提高了配置的灵活性和一致性,降低了配置错误的风险,便于大规模系统的配置管理.
-
- 定义:服务网格是一种用于管理微服务间通信的基础设施层,它提供了流量管理、安全性、可观察性等功能.
- 作用:Consul 作为服务网格,可以控制服务之间的流量流向,实现请求的负载均衡、故障转移、重试等策略;同时,它还能够对服务间的通信进行加密,保障数据传输的安全性;此外,Consul 提供了丰富的监控和日志记录功能,帮助开发者更好地了解服务的运行状态和性能表现.
- 优势:提高了微服务架构的复杂性和可靠性,使得服务间的通信更加灵活和可控,便于开发者进行服务的部署和维护.
-
- 定义:流量管理是指对网络流量进行控制和分配的过程,以优化网络性能和资源利用率.
- 作用:Consul 支持多种流量管理策略,如请求的负载均衡、故障转移、重试、超时、限流等,可以根据业务需求和网络状况灵活配置;它还能够实现流量的镜像和影子流量等功能,方便进行服务的测试和验证.
- 优势:提高了系统的稳定性和性能,能够有效应对高并发和网络故障等场景,保障业务的连续性和用户体验.
-
- 定义:API 网关是一种位于客户端和后端服务之间的中间层,它提供了 API 路由、请求转发、负载均衡、安全认证等功能.
- 作用:Consul 可以作为 API 网关,将外部请求路由到对应的服务实例,实现了请求的统一入口和负载均衡;它还能够对请求进行安全认证和授权,保障系统的安全性;此外,Consul 提供了请求的限流、缓存、日志记录等功能,优化了系统的性能和用户体验.
- 优势:提高了系统的可维护性和可扩展性,简化了客户端与后端服务的通信,增强了系统的安全性和性能.
-
- 定义:自动更新网络基础设施设备是指通过自动化的方式对网络设备的配置和固件等进行更新和维护.
- 作用:Consul 可以与网络设备进行集成,通过自动化的方式对设备的配置进行更新,如修改路由规则、调整网络参数等;它还能够监控设备的状态,当设备出现故障或需要升级时,自动触发更新流程,提高了网络设备的管理和维护效率.
- 优势:减少了人工维护的工作量,提高了网络设备的稳定性和可靠性,保障了网络的正常运行和业务的连续性.
服务安装
-
端口 功能 DNS (8600) 用于 Consul 的 DNS 服务器,它支持 TCP 和 UDP 协议。通过 DNS,其他服务可以通过域名来发现和解析 Consul 服务。 HTTP (8500) Consul 用户界面(UI)和大多数 HTTP 客户端的默认端口 HTTPS (8501) Consul 的 HTTPS API 端口,默认禁用 gRPC (8502) Consul 的 gRPC API,默认禁用 gRPC TLS (8503) 带有 TLS 加密的 gRPC API,默认禁用 LAN Serf (8301) 用于局域网(LAN)中的 Serf 协议,它支持 TCP 和 UDP 协议。Serf 是 Consul 用于节点间通信的 gossip 协议,用于服务发现和健康检查 Wan Serf (8302) 用于广域网(wan)中的 Serf 协议,它支持 TCP 和 UDP 协议。Serf 是 Consul 用于节点间通信的 gossip 协议,用于服务发现和健康检查。用于在不同的数据中心或广域网环境中的节点间通信 Server RPC (8300) 服务器节点的 RPC 通信,它仅支持 TCP 协议。服务器节点使用这个端口进行内部通信,如领导选举和数据同步 Sidecar Proxy Min (21000) 和 Sidecar Proxy Max (21255) 这些端口用于自动分配给 sidecar 代理服务的端口范围。Sidecar 代理允许非 Consul 服务(如传统应用)通过 Consul 进行服务发现和配置管理。这些端口提供了一个端口范围,Consul 可以在这个范围内自动分配端口给 sidecar 代理。
consul单节点安装
快速开始
wget https://releases.hashicorp.com/consul/1.15.2/consul_1.15.2_linux_amd64.zip consul agent -server -bootstrap-expect=1 \ -bind=10.4.7.250 \ -client=10.4.7.250 \ -data-dir=./data \ -ui
单节点多实例
# 不同实例设置不同目录 mkdir /opt/consul-8500/{data,config} -p
# 不同实例设置不同端口 tee /opt/consul-8500/config/basic.json <<EOF { "ports":{ "http":8500, "dns":8600, "serf_lan":8301, "serf_wan":8302, "server":8300 } } EOF
# 启动服务 consul agent -server -bootstrap-expect=1 \ -bind=10.4.7.250 \ -client=10.4.7.250 \ -data-dir=/opt/consul-8500/data \ -config-dir=/opt/consul-8500/config \ -ui
集群安装
wget https://releases.hashicorp.com/consul/1.15.2/consul_1.15.2_linux_amd64.zip
-
第一个节点启动时需要指定
-bootstrap
consul agent -server -bootstrap \ -bind=10.4.7.250 \ -client=10.4.7.250 \ -node=10.4.7.250 \ -data-dir=./data \ -ui -
其他节点以agent方式连接上server
consul agent \ -bind=10.4.7.251 \ -client=10.4.7.251 \ -node=10.4.7.251 \ -data-dir=./data \ -join=10.4.7.250 -
consul agent \ -bind=10.4.7.252 \ -client=10.4.7.252 \ -node=10.4.7.252 \ -data-dir=./data \ -join=10.4.7.250
使用示例
服务发现
name
定义了一组服务的名称
id
定义了该服务下的一个具体实例他们的关系就如同一个nginx 服务后可以定义一组后端服务
curl -X PUT -d '{ "id": "node-exporter123", "name": "node-exporter456", "address": "10.4.7.250", "port": 9100, "tags": [ "node-exporter" ], "checks": [ { "http": "http://10.4.7.250:9100/", "interval": "5s" } ] }' http://10.4.7.250:8500/v1/agent/service/register
curl -X PUT -d '{ "id": "pcloud-ftcrediszf02-temp-exporter-0-0", "name": "ftcrediszf02-temp", "Address": "10.4.7.250", "port": 9121, "tags": [ "redis" ], "Meta": { "area": "k8s", "cluster_id": "13915", "cluster_name": "redis02", "hostname": "redis02-exporter-0-0", "ip": "10.4.7.250", "resource_pool": "metrics", "type": "redis" }, "TaggedAddresses": { "lan_ipv4": { "Address": "10.4.7.250", "Port": 9121 }, "wan_ipv4": { "Address": "10.4.7.250", "Port": 9121 } }, "Weights": { "Passing": 1, "Warning": 1 } }' http://10.4.7.250:8500/v1/agent/service/register
查看注册的服务
# 注册时的name 已经变成了 Service字段 curl -s http://10.4.7.250:8500/v1/agent/services|jq
curl 10.4.7.250:8500/v1/catalog/service/node-exporter456|jq curl 10.4.7.250:8500/v1/agent/service/node-exporter123|jq curl 10.4.7.250:8500/v1/agent/checks|jq
取消注册
curl -X PUT http://10.4.7.250:8500/v1/agent/service/deregister/node-exporter789
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏