
首页

归档

关于

友链
Consul 集群部署完全指南

Consul 集群部署完全指南

文章目录

  1. 1. 概述
  2. 2. 单机模拟集群部署
    1. 2.1. Docker Compose 部署方案
    2. 2.2. 参数说明
  3. 3. 生产环境部署
    1. 3.1. 多机部署配置
    2. 3.2. 使用配置文件管理节点列表
    3. 3.3. DNS SRV记录自动发现
  4. 4. 安全配置(ACL)
    1. 4.1. ACL配置文件
    2. 4.2. Token生成方法
    3. 4.3. 不同Token的作用
  5. 5. 高可用性考虑
    1. 5.1. 容错能力
    2. 5.2. 部署位置
  6. 6. ACL配置详解
    1. 6.1. 启用ACL后的注意事项
    2. 6.2. ACL配置文件规范
  7. 7. 多节点部署优化
    1. 7.1. 配置文件集中管理
    2. 7.2. 节点自动发现机制
  8. 8. 总结
IT小强
IT小强
while(!success) { try(); } // 直到破墙而出
文章
8
分类
3
标签
12

首页

归档

关于

友链
2025-12-05 2026-01-26

概述

Consul 是一个服务网格解决方案,提供服务发现、配置管理、健康检查等功能。本文将详细介绍如何部署高可用的Consul集群。

单机模拟集群部署

Docker Compose 部署方案

使用Docker Compose可以在单机上快速搭建Consul集群进行测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
services:
# ======================== Consul Server 节点(3节点高可用集群) ========================
consul-server-1:
image: docker.cnb.cool/xqitw/docker/consul:1.22.3
container_name: consul-server-1
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./consul/data/server1:/consul/data
- ./consul/config/server1:/consul/config
command: >
agent -server
-bootstrap-expect=3
-node=consul-server-1
-ui
-client=0.0.0.0
-bind='{{ GetInterfaceIP "eth0" }}'
-datacenter=dc1
-data-dir=/consul/data
-config-dir=/consul/config
-retry-join=consul-server-2
-retry-join=consul-server-3
ports:
- "8501:8500"
- "8601:8600/udp"


consul-server-2:
image: docker.cnb.cool/xqitw/docker/consul:1.22.3
container_name: consul-server-2
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./consul/data/server2:/consul/data
- ./consul/config/server2:/consul/config
command: >
agent -server
-bootstrap-expect=3
-node=consul-server-2
-ui
-client=0.0.0.0
-bind='{{ GetInterfaceIP "eth0" }}'
-datacenter=dc1
-data-dir=/consul/data
-config-dir=/consul/config
-retry-join=consul-server-1
-retry-join=consul-server-3
ports:
- "8502:8500"
- "8602:8600/udp"


consul-server-3:
image: docker.cnb.cool/xqitw/docker/consul:1.22.3
container_name: consul-server-3
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./consul/data/server3:/consul/data
- ./consul/config/server3:/consul/config
command: >
agent -server
-bootstrap-expect=3
-node=consul-server-3
-ui
-client=0.0.0.0
-bind='{{ GetInterfaceIP "eth0" }}'
-datacenter=dc1
-data-dir=/consul/data
-config-dir=/consul/config
-retry-join=consul-server-1
-retry-join=consul-server-2
ports:
- "8503:8500"
- "8603:8600/udp"


# ======================== Consul Client 节点(服务注册代理) ========================
consul-client:
image: docker.cnb.cool/xqitw/docker/consul:1.22.3
container_name: consul-client
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- ./consul/data/client:/consul/data
- ./consul/config/client:/consul/config
command: >
agent -node=consul-client
-ui
-client=0.0.0.0
-bind='{{ GetInterfaceIP "eth0" }}'
-datacenter=dc1
-data-dir=/consul/data
-config-dir=/consul/config
-retry-join=consul-server-1
-retry-join=consul-server-2
-retry-join=consul-server-3
ports:
- "8504:8500"
- "8604:8600/udp"

# ======================== 网络配置(容器间通信隔离) ========================
networks:
default:
name: consul-server
enable_ipv6: true
# external: true

参数说明

  • bootstrap-expect=3: 期望加入集群的服务器数量,达到此数量后开始选举
  • retry-join: 自动加入集群的节点地址
  • -config-dir: 指定配置文件目录,便于管理复杂配置

生产环境部署

多机部署配置

在生产环境中,建议将节点分散部署在不同物理机上:

1
2
3
4
5
6
7
8
9
10
11
12
13
command: >
agent -server
-bootstrap-expect=3
-node=consul-server-1
-ui
-client=0.0.0.0
-bind='{{ GetInterfaceIP "eth0" }}'
-datacenter=dc1
-data-dir=/consul/data
-config-dir=/consul/config
-retry-join=192.168.1.10
-retry-join=192.168.1.11
-retry-join=192.168.1.12

使用配置文件管理节点列表

为避免在命令行中重复配置大量节点,可使用JSON配置文件:

1
2
3
4
5
6
7
{
"retry_join": [
"192.168.1.10",
"192.168.1.11",
"192.168.1.12"
]
}

DNS SRV记录自动发现

在支持DNS SRV记录的环境中,可以实现自动节点发现:

1
2
3
{
"retry_join": ["_consul._tcp.dc1.service.consul"]
}

对应的DNS SRV记录:

1
2
3
_consul._tcp.dc1.service.consul. 86400 IN SRV 1 1 8300 consul-server-1
_consul._tcp.dc1.service.consul. 86400 IN SRV 1 1 8300 consul-server-2
_consul._tcp.dc1.service.consul. 86400 IN SRV 1 1 8300 consul-server-3

安全配置(ACL)

ACL配置文件

创建acl.json配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"master": "your-master-token",
"agent": "your-agent-token",
"agent_recovery": "your-agent-recovery-token"
}
},
"encrypt": "your-gossip-encryption-key"
}

Token生成方法

使用以下命令生成安全token:

1
2
3
4
5
6
7
# 生成gossip加密密钥
consul keygen

# 生成UUID格式的token
uuidgen
# 或者
python3 -c "import uuid; print(str(uuid.uuid4()).replace('-', ''))"

不同Token的作用

  • master: 用于初始化ACL系统,最高权限
  • agent: 用于节点间内部通信认证
  • agent_recovery: 用于紧急恢复访问权限
  • encrypt: 用于节点间gossip协议加密

高可用性考虑

容错能力

  • 3节点集群可容忍1个节点故障
  • 5节点集群可容忍2个节点故障
  • 集群节点数应为奇数以避免脑裂问题

部署位置

  • 将节点部署在不同的故障域
  • 考虑跨可用区部署
  • 避免单点故障

ACL配置详解

启用ACL后的注意事项

启用ACL后,必须为集群内各节点配置相同的agent token,否则会导致节点间无法正常通信。在docker-compose文件中,需要添加环境变量:

1
2
3
environment:
- CONSUL_HTTP_TOKEN=your-agent-token-here
- CONSUL_RPC_TOKEN=your-agent-token-here

ACL配置文件规范

注意,gossip通信加密参数encrypt应作为顶级配置项,与acl同级,不能放在acl配置块内:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"acl": {
"enabled": true,
"default_policy": "deny",
"enable_token_persistence": true,
"tokens": {
"master": "your-master-token",
"agent": "your-agent-token",
"agent_recovery": "your-agent-recovery-token"
}
},
"encrypt": "your-gossip-encryption-key" // 注意:这是顶级配置项,不在acl块内
}

多节点部署优化

配置文件集中管理

部署多个Consul节点时,可通过配置文件集中管理retry_join地址,避免命令行重复配置,提高可维护性。

节点自动发现机制

使用DNS SRV记录实现Consul节点自动发现,避免在部署多个节点时手动配置大量-retry-join参数,提升可扩展性。

总结

Consul集群的部署需要注意:

  1. 使用奇数个Server节点确保高可用
  2. 合理配置网络和存储
  3. 实施适当的安全措施(ACL)
  4. 根据环境选择合适的节点发现方式
  5. 定期备份和监控集群状态
  6. 将Consul Server节点部署在不同的物理机器、可用区或网络段,避免单点故障
  7. 正确配置ACL token,确保节点间正常通信

通过以上配置,可以构建一个安全、可靠的Consul集群。

赞助
请作者喝杯咖啡吧
微信

微信

Powered By hexo-theme-reimu
Claude Skills深度解析:扩展AI助手的无限可能
前一篇

Claude Skills深度解析:扩展AI助手的无限可能

CNB自定义开发环境
后一篇

CNB自定义开发环境

2016-2026 IT小强
基于 Hexo  Theme.Reimu
晋ICP备16001883号
陕公网安备61011302002263号

文章目录

  1. 1. 概述
  2. 2. 单机模拟集群部署
    1. 2.1. Docker Compose 部署方案
    2. 2.2. 参数说明
  3. 3. 生产环境部署
    1. 3.1. 多机部署配置
    2. 3.2. 使用配置文件管理节点列表
    3. 3.3. DNS SRV记录自动发现
  4. 4. 安全配置(ACL)
    1. 4.1. ACL配置文件
    2. 4.2. Token生成方法
    3. 4.3. 不同Token的作用
  5. 5. 高可用性考虑
    1. 5.1. 容错能力
    2. 5.2. 部署位置
  6. 6. ACL配置详解
    1. 6.1. 启用ACL后的注意事项
    2. 6.2. ACL配置文件规范
  7. 7. 多节点部署优化
    1. 7.1. 配置文件集中管理
    2. 7.2. 节点自动发现机制
  8. 8. 总结
IT小强
IT小强
while(!success) { try(); } // 直到破墙而出
文章
8
分类
3
标签
12

首页

归档

关于

友链