Consul架构与核心概念
Consul是HashiCorp开源的分布式服务发现与配置工具,基于Raft共识算法保证强一致性,支持多数据中心部署。在微服务架构中,Consul承担服务注册中心的角色,服务实例启动时向Consul注册自身地址和元数据,消费方通过Consul查询可用实例列表实现服务发现。Consul的核心组件包括Agent(运行在每个节点上的守护进程)、Server(参与Raft共识的服务端节点)、Client(仅转发请求的客户端节点)和Gossip协议(用于节点间的成员管理和故障检测)。生产环境建议部署3或5个Server节点以保证高可用,Client节点则部署在应用服务器上。
Consul集群部署步骤
以3节点Server集群为例,展示Consul的部署过程。下载安装Consul后,为每个节点创建配置文件:
# /etc/consul.d/server.hcl(节点1配置,其余节点修改node_name和bind地址)
datacenter = "dc1"
node_name = "consul-server-1"
server = true
bootstrap_expect = 3
bind_addr = "10.0.1.11"
client_addr = "0.0.0.0"
data_dir = "/var/lib/consul"
retry_join = ["10.0.1.12", "10.0.1.13"]
ui_config {
enabled = true
}
connect {
enabled = true
}
acl {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}
三个节点依次启动Consul Agent:
consul agent -config-dir=/etc/consul.d/
集群启动后通过consul members验证节点状态,Raft leader选举自动完成。启用ACL需先创建bootstrap token,后续所有操作需携带token进行鉴权。
服务注册与健康检查配置
服务注册通过JSON配置文件或HTTP API完成。以下是一个Web服务的注册配置,包含HTTP健康检查:
{
"service": {
"name": "web-app",
"id": "web-app-10.0.1.21",
"tags": ["v2.1", "primary"],
"address": "10.0.1.21",
"port": 8080,
"checks": [
{
"id": "http-health",
"name": "HTTP API Health",
"http": "http://10.0.1.21:8080/health",
"method": "GET",
"interval": "10s",
"timeout": "3s",
"deregister_critical_service_after": "30s"
},
{
"id": "tcp-check",
"name": "TCP Port Check",
"tcp": "10.0.1.21:8080",
"interval": "5s",
"timeout": "2s"
}
]
}
}
配置说明:interval控制检查频率,timeout设置单次检查超时,deregister_critical_service_after指定服务持续critical状态多久后自动注销。多重checks叠加可实现分层健康检查,HTTP检查验证应用可用性,TCP检查验证网络连通性。
服务发现查询与DNS接口
Consul内置DNS服务器(默认端口8600),支持通过DNS查询进行服务发现,消费方无需集成Consul SDK。DNS查询格式为[service_name].service.[datacenter].consul,返回健康实例的IP和端口。配置系统DNS解析Consul域:
# /etc/resolv.conf
nameserver 127.0.0.1
options ndots:0
# 或使用dnsmasq转发
server=/consul/127.0.0.1#8600
也可通过HTTP API查询,支持过滤和元数据匹配:
# 查询健康实例
curl http://127.0.0.1:8500/v1/health/service/web-app?passing=true
# 按标签过滤
curl http://127.0.0.1:8500/v1/health/service/web-app?tag=v2.1&passing=true
Consul集群运维与故障排查
Consul集群运维需关注几个关键点:Raft日志定期清理避免磁盘写满,通过consul snapshot save做定时备份,Server节点的性能监控(CPU、内存、磁盘IO)。常见故障包括脑裂(网络分区导致多Leader)、Leader选举频繁(节点间网络不稳定)、服务注册延迟(Gossip收敛慢)。排查命令:
# 查看Raft状态
consul operator raft list-peers
# 查看Leader信息
consul info | grep leader
# 检查服务健康状态汇总
consul catalog services
consul health state critical
# 强制重新配置集群(紧急恢复场景)
consul leave
对于大规模集群(100+节点),建议启用Consul的performance配置参数优化,调整raft_protocol版本、serf_lan的端口范围和gossip间隔,降低控制面开销。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/consul-fu-wu-fa-xian-zhu-ce-zhong-xin-ji-qun-bu-shu-yu-jian/