第七章:集群部署¶
集群架构¶
Server-Client 模式¶
┌─────────────────────────────────────────────────────────────┐
│ Consul 集群架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Server 节点 │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ Server 1 │ │ Server 2 │ │ Server 3 │ │ │
│ │ │ (Leader) │ │ (Follower)│ │ (Follower)│ │ │
│ │ └───────────┘ └───────────┘ └───────────┘ │ │
│ │ │ │ │ │ │
│ │ └──────────────┼──────────────┘ │ │
│ │ │ │ │
│ │ ┌────────▼────────┐ │ │
│ │ │ Raft + Gossip │ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Client 节点 │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ Client 1 │ │ Client 2 │ │ Client 3 │ │ │
│ │ │ (应用节点)│ │ (应用节点)│ │ (应用节点)│ │ │
│ │ └───────────┘ └───────────┘ └───────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
节点角色¶
| 角色 | 说明 |
|---|---|
| Server | 存储、Raft 共识、响应查询 |
| Client | 转发请求、健康检查、服务注册 |
集群配置¶
Server 配置¶
# server.hcl
datacenter = "dc1"
data_dir = "/opt/consul/data"
server = true
bootstrap_expect = 3
bind_addr = "192.168.1.101"
client_addr = "0.0.0.0"
# 集群发现
retry_join = ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
# 性能配置
performance {
raft_multiplier = 1
}
# UI
ui_config {
enabled = true
}
# 加密
encrypt = "base64-encoded-key"
encrypt_verify_incoming = true
encrypt_verify_outgoing = true
Client 配置¶
# client.hcl
datacenter = "dc1"
data_dir = "/opt/consul/data"
server = false
bind_addr = "192.168.1.104"
client_addr = "0.0.0.0"
# 加入集群
retry_join = ["192.168.1.101", "192.168.1.102", "192.168.1.103"]
# 加密
encrypt = "base64-encoded-key"
多数据中心¶
架构设计¶
数据中心 A 数据中心 B
┌─────────────┐ ┌─────────────┐
│ Server │◄────────────►│ Server │
│ (dc1) │ WAN Gossip │ (dc2) │
│ │ │ │
│ Server │ │ Server │
│ Server │ │ Server │
└─────────────┘ └─────────────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Client │ │ Client │
└─────────────┘ └─────────────┘
配置多数据中心¶
# dc1-server.hcl
datacenter = "dc1"
server = true
bootstrap_expect = 3
# WAN 联接
connect {
enabled = true
}
# 启动后加入其他数据中心
# consul join -wan <dc2-server-ip>
跨数据中心查询¶
# 查询其他数据中心的服务
curl http://localhost:8500/v1/catalog/service/user-service?dc=dc2
# DNS 查询
dig @localhost -p 8600 user-service.service.dc2.consul
集群管理¶
查看集群状态¶
# 查看成员
consul members
# 查看 Server 状态
consul operator raft list-peers
# 查看数据中心
consul catalog datacenters
# 查看节点
consul catalog nodes
节点管理¶
# 加入集群
consul join <server-ip>
# 离开集群
consul leave
# 强制移除节点
consul force-leave <node-name>
# 重新加载配置
consul reload
备份恢复¶
# 备份
consul snapshot save backup.snap
# 恢复
consul snapshot restore backup.snap
# 查看备份信息
consul snapshot inspect backup.snap
高可用配置¶
自动故障转移¶
Consul 自动处理故障转移:
1. Leader 故障
- 自动选举新 Leader
- 无需人工干预
2. Follower 故障
- 集群继续运行
- 需要保证多数节点存活
3. Client 故障
- 不影响集群运行
- 服务自动注销
容量规划¶
小结¶
集群部署要点:
- 集群架构:Server-Client 模式
- 节点角色:Server、Client
- 多数据中心:WAN Gossip、跨数据中心查询
- 集群管理:状态查看、节点管理、备份恢复
- 高可用:自动故障转移、容量规划
下一章我们将学习生产实践。