Thanos 高可用(HA)集群二进制部署方案 #
Thanos 提供 水平扩展、长期存储、跨集群监控 以及 高可用(HA) 的能力。通过 Thanos Sidecar、Store、Query、Compactor、Receive、Ruler 组件实现 Prometheus 监控的 HA 方案。
1. HA 架构 #
┌──────────────────────────┐
│ Grafana │
└──────────────────────────┘
▲
│
▼
┌──────────────────────────┐
│ Thanos Query │
└──────────────────────────┘
▲
│
┌───────────────────────────────┬───────────────────────────────┐
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Thanos Store │ │ Thanos Store │ │ Thanos Store │
└──────────────┘ └──────────────┘ └──────────────┘
▲ ▲ ▲
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ ObjectStore │ │ ObjectStore │ │ ObjectStore │
└──────────────┘ └──────────────┘ └──────────────┘
▲ ▲ ▲
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Thanos Sidecar │ │ Thanos Sidecar │ │ Thanos Sidecar │
└──────────────┘ └──────────────┘ └──────────────┘
▲ ▲ ▲
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Prometheus-1 │ │ Prometheus-2 │ │ Prometheus-3 │
└──────────────┘ └──────────────┘ └──────────────┘
2. 组件介绍 #
2.1 Thanos Sidecar #
- 作用:附加到 Prometheus 实例,提供 数据长存 和 查询 API。
- 高可用:每个 Prometheus 实例都有对应的 Sidecar。
2.2 Thanos Query #
- 作用:聚合多个
Prometheus
和Store
,进行统一查询。 - 高可用:多个
Query
组件可负载均衡,防止单点故障。
2.3 Thanos Store #
- 作用:从远程对象存储(如 S3、OSS、Ceph)中 读取历史数据,确保长期存储。
- 高可用:多个
Store
组件,防止存储查询压力集中。
2.4 Thanos Compactor #
- 作用:压缩、去重和优化对象存储中的数据,提高查询效率。
- 高可用:可以部署多个实例,但只需启用一个主要实例。
2.5 Thanos Receive #
- 作用:接收 Prometheus Remote Write,作为 Prometheus 远程存储,可替代 Prometheus HA 方案。
2.6 Thanos Ruler #
- 作用:提供独立于 Prometheus 的 告警规则 和 查询聚合,提升 HA 和弹性扩展能力。
3. HA 部署方案 #
3.1 Prometheus 远程存储配置 #
在 prometheus.yml
配置:
remote_write:
- url: "http://thanos-receive-1:10901/api/v1/receive"
queue_config:
max_samples_per_send: 10000
max_shards: 30
capacity: 50000
remote_write
:将数据推送到Thanos Receive
进行 HA 存储。
3.2 部署 Thanos Sidecar #
thanos-sidecar
连接 Prometheus:
./thanos sidecar \
--tsdb.path=/var/lib/prometheus \
--prometheus.url=http://localhost:9090 \
--grpc-address=0.0.0.0:10901 \
--http-address=0.0.0.0:10902 \
--objstore.config-file=/etc/thanos/object-store.yml
--tsdb.path
:Prometheus 数据目录。--prometheus.url
:Prometheus API 地址。--objstore.config-file
:S3/OSS 存储配置。
3.3 部署 Thanos Query #
thanos-query
负责全局查询:
./thanos query \
--grpc-address=0.0.0.0:10903 \
--http-address=0.0.0.0:9090 \
--store=thanos-sidecar-1:10901 \
--store=thanos-sidecar-2:10901 \
--store=thanos-store:10901
--store
:指定数据来源,可多个 Sidecar 和 Store。
3.4 部署 Thanos Store #
用于从 S3/OSS 查询历史数据:
./thanos store \
--grpc-address=0.0.0.0:10904 \
--http-address=0.0.0.0:10905 \
--objstore.config-file=/etc/thanos/object-store.yml
--objstore.config-file
:存储后端配置(S3、OSS)。
3.5 部署 Thanos Compactor #
压缩和去重数据:
./thanos compact \
--http-address=0.0.0.0:10906 \
--objstore.config-file=/etc/thanos/object-store.yml
3.6 部署 Thanos Receive #
作为远程存储:
./thanos receive \
--grpc-address=0.0.0.0:10907 \
--http-address=0.0.0.0:10908 \
--tsdb.path=/var/lib/thanos/receive \
--receive.hashrings-file=/etc/thanos/hashrings.json
--receive.hashrings-file
:配置哈希分片,实现高可用。
4. Mermaid 架构图 #
graph TD;
subgraph Prometheus Cluster
P1[Prometheus-1] -->|sidecar| S1[Thanos Sidecar-1]
P2[Prometheus-2] -->|sidecar| S2[Thanos Sidecar-2]
P3[Prometheus-3] -->|sidecar| S3[Thanos Sidecar-3]
end
subgraph Object Storage S3/OSS
OS1[Object Storage]
end
subgraph Thanos Components
Q1[Thanos Query HA] --> S1
Q1 --> S2
Q1 --> S3
Q1 --> ST1[Thanos Store]
Q1 --> R1[Thanos Receive]
Q1 --> C1[Thanos Compactor]
end
OS1 --> ST1
S1 --> OS1
S2 --> OS1
S3 --> OS1
这张 Thanos 高可用(HA)架构图 主要展示了 Prometheus + Thanos 的 高可用数据采集、存储、查询和长期存储 方案。下面我逐步解析其中的组件以及它们之间的交互关系。
1. Prometheus 集群 #
graph TD;
subgraph Prometheus Cluster
P1[Prometheus-1] -->|sidecar| S1[Thanos Sidecar-1]
P2[Prometheus-2] -->|sidecar| S2[Thanos Sidecar-2]
P3[Prometheus-3] -->|sidecar| S3[Thanos Sidecar-3]
end
解释 #
- Prometheus-1, Prometheus-2, Prometheus-3:三个 Prometheus 实例,分别负责不同的数据采集任务,形成 高可用(HA) 架构。
- Thanos Sidecar-1, Sidecar-2, Sidecar-3:
- 作用:Thanos Sidecar 附加在每个 Prometheus 实例上,负责 远程存储(上传数据到 S3/OSS)和 提供查询接口。
- 数据流:
- Prometheus 采集指标数据
- Thanos Sidecar 读取 Prometheus 数据,并上传到 对象存储(S3/OSS)
- Thanos Query 组件可以通过 Sidecar 查询实时数据
- 高可用性:多个 Prometheus + Sidecar 组合可以防止单点故障,提高数据采集的可靠性。
2. 对象存储(长期存储) #
graph TD;
subgraph Object Storage S3/OSS
OS1[Object Storage]
end
解释 #
- Object Storage (S3/OSS):
- 这里的对象存储可以是 AWS S3、阿里云 OSS、MinIO 或 Ceph。
- 作用:
- 长期存储 Prometheus 数据(可存储 3 年甚至更长时间)。
- 去中心化存储,可替代本地磁盘存储,减少 Prometheus 服务器的磁盘占用。
- 数据流:
- Thanos Sidecar 定期将 Prometheus 数据块(TSDB)上传到对象存储。
- Thanos Store 组件可以从对象存储中读取数据,并提供给 Thanos Query 查询。
3. Thanos 组件 #
graph TD;
subgraph Thanos Components
Q1[Thanos Query HA] --> S1
Q1 --> S2
Q1 --> S3
Q1 --> ST1[Thanos Store]
Q1 --> R1[Thanos Receive]
Q1 --> C1[Thanos Compactor]
end
graph TD;
subgraph HAProxy Load Balancer
HAProxy1[HAProxy TCP/HTTP Load Balancer]
end
subgraph Thanos Query Cluster
Q1[Thanos Query-1] -->|查询| S1[Thanos Store]
Q2[Thanos Query-2] -->|查询| S1
Q1 -->|查询| S2[Thanos Sidecar-1]
Q2 -->|查询| S2
Q1 -->|查询| S3[Thanos Sidecar-2]
Q2 -->|查询| S3
end
subgraph Prometheus Cluster
P1[Prometheus-1] -->|remote_write| TS1[Thanos Sidecar-1]
P2[Prometheus-2] -->|remote_write| TS2[Thanos Sidecar-2]
end
subgraph Grafana
Grafana1[Grafana Dashboard] -->|查询| HAProxy1
end
HAProxy1 -->|负载均衡| Q1
HAProxy1 -->|负载均衡| Q2
解释 #
Thanos 的各个组件相互配合,实现数据存储、查询、压缩优化等功能。
(1)Thanos Query HA #
- 作用:
- 统一查询 Prometheus + Thanos Store + Thanos Receive 中的数据,支持全局查询。
- 通过 负载均衡(LB) 进行高可用(多个 Query 实例互为备份)。
- 数据流:
- 查询实时数据:Thanos Query 从 Thanos Sidecar 查询实时数据(Prometheus 还未写入对象存储的数据)。
- 查询历史数据:Thanos Query 从 Thanos Store 读取长期存储的数据。
- 远程写入:Thanos Query 也可以对 Thanos Receive 进行远程查询。
(2)Thanos Store #
- 作用:
- 主要从 S3/OSS(对象存储)中读取数据,用于查询 长期存储的数据。
- 防止 Prometheus 因存储历史数据而磁盘爆满。
- 数据流:
- Thanos Store 直接访问对象存储(S3/OSS),然后提供历史数据给 Thanos Query 进行查询。
(3)Thanos Receive #
- 作用:
- 允许 Prometheus 通过 remote_write 将数据直接写入 Thanos,作为远程存储。
- 可用于 多个 Prometheus 实例的 HA 数据合并,防止数据丢失。
- 数据流:
- Prometheus 通过
remote_write
写入 Thanos Receive。 - Thanos Query 可以查询 Thanos Receive 存储的数据。
- Prometheus 通过
(4)Thanos Compactor #
- 作用:
- 数据压缩(合并小数据块,减少存储占用)。
- 数据去重(去除 Prometheus HA 采集的重复数据)。
- 数据流:
- 从 对象存储(S3/OSS) 读取数据,进行优化后再写回。
4. 数据流(交互方式) #
graph TD;
OS1 --> ST1
S1 --> OS1
S2 --> OS1
S3 --> OS1
解释 #
- Prometheus 采集数据:
- Prometheus 采集 Kubernetes、Docker、服务器等指标数据,并存储到本地 TSDB(时间序列数据库)。
- Thanos Sidecar 上传数据:
- 每个 Prometheus 实例的 Sidecar 会 将数据块上传到对象存储(S3/OSS),用于长期存储。
- Thanos Store 查询数据:
- Thanos Store 从对象存储中提取数据,提供给 Thanos Query 查询。
- Thanos Query 统一查询:
- Thanos Query 从 Sidecar(实时数据) 和 Store(历史数据) 聚合查询结果,供 Grafana 或其他应用使用。
5. 关键特性总结 #
功能 | Thanos 组件 | 作用 |
---|---|---|
数据采集 | Prometheus + Sidecar | 采集 K8s、主机、应用等指标,并提供实时查询接口 |
数据长期存储 | Sidecar + Store + S3 | Sidecar 将数据存入对象存储,Store 提供历史数据 |
高可用查询 | Thanos Query | 统一查询 Sidecar(实时数据)和 Store(历史数据) |
远程写入 | Thanos Receive | Prometheus 通过 remote_write 将数据写入 |
数据压缩优化 | Thanos Compactor | 合并数据块,优化存储,去重 Prometheus HA 采集的数据 |
6. 适用场景 #
✅ Kubernetes + Prometheus 监控(多集群监控 & HA) ✅ 长期存储 3 年以上(通过 S3/OSS) ✅ 大规模 Prometheus 查询优化(避免单机 Prometheus 查询瓶颈) ✅ Prometheus HA 方案(多个 Prometheus 实例数据去重合并)
总结 #
这张图描述的是 Thanos 监控 HA 方案:
- Prometheus + Thanos Sidecar:本地采集数据,并上传 S3/OSS。
- Thanos Store:从对象存储中读取历史数据,减少 Prometheus 负载。
- Thanos Query:全局查询层,聚合多个数据源,防止 Prometheus 单点故障。
- Thanos Compactor:数据压缩和去重,节省存储空间。
- Thanos Receive:作为 Prometheus 远程存储,支持多实例 HA 数据合并。
这个架构 支持高可用、长期存储、大规模查询,适合生产环境的大型 Kubernetes 集群监控。
如果有具体的需求,比如 不同存储后端(S3、OSS、MinIO)、多集群 Prometheus,可以进一步优化和调整! 🚀
5. 优势 #
✅ 高可用:Sidecar、Store、Query 组件可扩展,避免单点故障。 ✅ 长期存储:对象存储(S3、OSS)可存储多年数据。 ✅ 水平扩展:所有组件均可独立扩展,适用于大规模集群。 ✅ 低成本存储:使用 Thanos Compactor 进行去重和压缩,节约存储空间。
6. 适用场景 #
🚀 跨 K8s 集群的全局监控 🚀 大规模 Prometheus HA 部署 🚀 长期存储和历史数据查询
如果你有进一步需求,比如 优化查询性能、数据存储策略 等,可以深入探讨! 😊
Thanos Query HA(高可用)架构(基于 HAProxy) #
目标:
使用 HAProxy 负载均衡多个 Thanos Query
实例,确保查询高可用(HA)。
架构图 #
graph TD;
subgraph HAProxy Load Balancer
HAProxy1[HAProxy TCP/HTTP Load Balancer]
end
subgraph Thanos Query Cluster
Q1[Thanos Query-1] -->|查询| S1[Thanos Store]
Q2[Thanos Query-2] -->|查询| S1
Q1 -->|查询| S2[Thanos Sidecar-1]
Q2 -->|查询| S2
Q1 -->|查询| S3[Thanos Sidecar-2]
Q2 -->|查询| S3
end
subgraph Prometheus Cluster
P1[Prometheus-1] -->|remote_write| TS1[Thanos Sidecar-1]
P2[Prometheus-2] -->|remote_write| TS2[Thanos Sidecar-2]
end
subgraph Grafana
Grafana1[Grafana Dashboard] -->|查询| HAProxy1
end
HAProxy1 -->|负载均衡| Q1
HAProxy1 -->|负载均衡| Q2
1. HAProxy 负载均衡的作用 #
- 负载均衡多个
Thanos Query
实例,确保高可用。 - 自动故障切换,如果某个
Thanos Query
实例宕机,流量会自动转移到可用实例。 - 优化查询性能,均衡流量,防止单个
Thanos Query
过载。
2. 安装 HAProxy #
(1) 在 Linux 服务器上安装 HAProxy #
sudo apt update && sudo apt install -y haproxy # Ubuntu
sudo yum install -y haproxy # CentOS
3. 配置 HAProxy #
编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg
:
global
log stdout format raw
maxconn 4000
defaults
log global
mode http
timeout connect 5s
timeout client 50s
timeout server 50s
# Thanos Query 负载均衡
frontend thanos_query_frontend
bind *:9090
default_backend thanos_query_backend
backend thanos_query_backend
balance roundrobin # 轮询分发流量
option httpchk GET /-/healthy # 健康检查
server thanos-query-1 192.168.1.101:9090 check
server thanos-query-2 192.168.1.102:9090 check
4. 启动 HAProxy #
sudo systemctl restart haproxy
sudo systemctl enable haproxy
现在,你可以通过
http://your-haproxy-ip:9090
访问 Thanos Query HA 入口。
5. 验证 HAProxy 负载均衡 #
(1) 检查 HAProxy 是否正常运行 #
sudo systemctl status haproxy
(2) 通过 HAProxy 访问 Thanos Query #
curl -s http://your-haproxy-ip:9090/-/healthy
返回:
"Thanos Query is up and running"
说明 Thanos Query
已经通过 HAProxy 负载均衡 正常工作。
(3) 关闭一个 Thanos Query 实例,测试 HA #
如果 thanos-query-1
宕机:
docker stop thanos-query-1
然后访问:
curl -s http://your-haproxy-ip:9090/-/healthy
你会发现 HAProxy 会自动切换到
thanos-query-2
,确保高可用性。
6. 总结 #
组件 | 作用 |
---|---|
HAProxy | 负责负载均衡 Thanos Query ,实现 HA |
Thanos Query | 处理 PromQL 查询,连接 Store/Sidecar |
Thanos Store | 连接对象存储,提供历史数据查询 |
Thanos Sidecar | 连接 Prometheus,提供实时查询 |
Grafana | 通过 HAProxy 查询 Thanos Query |
✅ 最终效果:
- 多台
Thanos Query
互为备份,不会因单点故障而影响查询。 - HAProxy 负责负载均衡,防止单台
Thanos Query
过载。 - Grafana 通过 HAProxy 访问,无需关心具体
Thanos Query
实例。
这样,Thanos Query HA 方案 就完整实现了! 🚀