摘要:Consul 作为微服务注册中心,提供了服务发现、健康检查、多数据中心支持等核心功能。以下是关于 Consul 的详细分步说明:
Consul 作为微服务注册中心,提供了服务发现、健康检查、多数据中心支持等核心功能。以下是关于 Consul 的详细分步说明:
1. Consul 核心概念
Agent:运行在每个节点上的守护进程,负责服务注册、健康检查及与集群通信。Server:处理数据存储、复制、领导选举,组成高可用集群(建议3-5个节点)。Client:轻量级代理,将请求转发到 Server,无数据存储。服务注册:服务启动时通过配置文件或 API 向 Consul 注册。健康检查:定期检测服务状态(HTTP/TCP/脚本),自动剔除故障实例。服务发现:支持 DNS 或 HTTP API 查询健康实例。2. 安装与启动
步骤 1:下载 Consul
bash
wget https://releases.hashicorp.com/consul/1.15.3/consul_1.15.3_linux_amd64.zip
unzip consul_1.15.3_linux_amd64.zip
sudo mv consul /usr/local/bin/
步骤 2:启动开发模式(单节点)
bash
consul agent -dev -client=0.0.0.0 -ui
-dev:开发模式(数据不持久化)。-ui:启用 Web 界面(默认端口 8500)。步骤 3:生产环境集群配置
Server 节点配置(示例):
bash
consul agent -server -bootstrap-expect=3 \
-data-dir=/var/lib/consul \
-node=server1 \
-bind=192.168.1.101 \
-client=0.0.0.0 \
-ui \
-config-dir=/etc/consul.d
-bootstrap-expect=3:预期 3 个 Server 节点,自动引导集群。其他节点通过 consul join 192.168.1.101 加入集群。3. 服务注册与健康检查
通过配置文件注册服务
创建 /etc/consul.d/web-service.json:
json
{
"service": {
"name": "web",
"port": 8080,
"checks": [
{
"http": "http://localhost:8080/health",
"interval": "10s",
"timeout": "1s"
}
]
}
}
重启 Agent 生效配置:
bash
consul reload
通过 API 注册服务
bash
curl -X PUT \
-d '{"name": "web", "port": 8080, "check": {"http": "http://localhost:8080/health", "interval": "10s"}}' \
4. 服务发现
DNS 查询
bash
dig @127.0.0.1 -p 8600 web.service.consul
# 返回健康的服务实例 IP 和端口
HTTP API 查询
bash
curl http://localhost:8500/v1/catalog/service/web
# 返回所有实例(包括不健康的)
curl http://localhost:8500/v1/health/service/web?passing
# 仅返回健康实例
5. 多数据中心部署
配置 WAN 连接
在 DataCenter1 的 Server 节点:
bash
consul join -wan
通过 WAN Gossip 协议实现跨数据中心通信。6. 安全配置
启用 ACL
创建初始管理令牌:bash
consul acl bootstrap
配置 Agent ACL:在配置文件中添加:
json
{
"acl": {
"enabled": true,
"default_policy": "deny",
"tokens": {
"agent": ""
}
}
}
TLS 加密通信
生成证书并配置 Agent:
json
{
"verify_incoming": true,
"verify_outgoing": true,
"verify_server_hostname": true,
"ca_file": "/path/to/ca.crt",
"cert_file": "/path/to/server.crt",
"key_file": "/path/to/server.key"
}
7. 与 Spring Cloud 集成
步骤 1:添加依赖
xml
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-actuator
步骤 2:配置 application.yml
yaml
spring:
application:
name: user-service
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
health-check-path: /actuator/health
health-check-interval: 15s
8. 故障排查
服务未注册:检查 Agent 日志、网络连通性、ACL 权限。健康检查失败:确认健康检查端点可访问,返回 HTTP 200。节点无法加入集群:检查防火墙(端口 8300-8302, 8500, 8600),验证配置参数。9. 可视化监控
访问 http://localhost:8500/ui 查看 Web 界面:
Services:所有注册服务及健康状态。Nodes:集群节点状态。Key/Value:配置存储。总结
Consul 提供了一套完整的服务网格解决方案,通过服务注册与发现、健康检查、多数据中心和安全机制,支撑微服务架构的高可用与动态管理。结合具体场景调整配置(如 ACL、TLS),并利用其丰富的 API 和工具链集成到现有系统中。
来源:老客数据一点号