2025-3-20 thanos高可用架构

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 #

  • 作用:聚合多个 PrometheusStore,进行统一查询。
  • 高可用:多个 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 存储的数据。

(4)Thanos Compactor #

  • 作用:
    • 数据压缩(合并小数据块,减少存储占用)。
    • 数据去重(去除 Prometheus HA 采集的重复数据)。
  • 数据流:
    • 对象存储(S3/OSS) 读取数据,进行优化后再写回。

4. 数据流(交互方式) #

graph TD;
    OS1 --> ST1
    S1 --> OS1
    S2 --> OS1
    S3 --> OS1

解释 #

  1. Prometheus 采集数据:
    • Prometheus 采集 Kubernetes、Docker、服务器等指标数据,并存储到本地 TSDB(时间序列数据库)。
  2. Thanos Sidecar 上传数据:
    • 每个 Prometheus 实例的 Sidecar 会 将数据块上传到对象存储(S3/OSS),用于长期存储。
  3. Thanos Store 查询数据:
    • Thanos Store 从对象存储中提取数据,提供给 Thanos Query 查询。
  4. Thanos Query 统一查询:
    • Thanos Query 从 Sidecar(实时数据)Store(历史数据) 聚合查询结果,供 Grafana 或其他应用使用。

5. 关键特性总结 #

功能Thanos 组件作用
数据采集Prometheus + Sidecar采集 K8s、主机、应用等指标,并提供实时查询接口
数据长期存储Sidecar + Store + S3Sidecar 将数据存入对象存储,Store 提供历史数据
高可用查询Thanos Query统一查询 Sidecar(实时数据)和 Store(历史数据)
远程写入Thanos ReceivePrometheus 通过 remote_write 将数据写入
数据压缩优化Thanos Compactor合并数据块,优化存储,去重 Prometheus HA 采集的数据

6. 适用场景 #

Kubernetes + Prometheus 监控(多集群监控 & HA) ✅ 长期存储 3 年以上(通过 S3/OSS) ✅ 大规模 Prometheus 查询优化(避免单机 Prometheus 查询瓶颈) ✅ Prometheus HA 方案(多个 Prometheus 实例数据去重合并)


总结 #

这张图描述的是 Thanos 监控 HA 方案

  1. Prometheus + Thanos Sidecar:本地采集数据,并上传 S3/OSS。
  2. Thanos Store:从对象存储中读取历史数据,减少 Prometheus 负载。
  3. Thanos Query:全局查询层,聚合多个数据源,防止 Prometheus 单点故障。
  4. Thanos Compactor:数据压缩和去重,节省存储空间。
  5. 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 方案 就完整实现了! 🚀