跳转至

第七章:集群部署

集群架构

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>
# dc2-server.hcl
datacenter = "dc2"
server = true
bootstrap_expect = 3

connect {
  enabled = true
}

跨数据中心查询

# 查询其他数据中心的服务
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 节点数量:
- 3 节点:允许 1 个节点故障
- 5 节点:允许 2 个节点故障

Client 节点:
- 根据应用需求部署
- 可以部署在应用服务器上

小结

集群部署要点:

  • 集群架构:Server-Client 模式
  • 节点角色:Server、Client
  • 多数据中心:WAN Gossip、跨数据中心查询
  • 集群管理:状态查看、节点管理、备份恢复
  • 高可用:自动故障转移、容量规划

下一章我们将学习生产实践。