Cortex架构
这是关于什么的文章?
我有机会调查Prometheus的高可用架构,并在此过程中发现了一个名为Cortex的工具,因此我将简单介绍其工作原理。
Prometheus的高可用结构
如果准备多台普罗米修斯的话就可以了嘛!这样看来,普罗米修斯的冗余化并不是那么容易。
在Timescale(将Postgres扩展为时间序列数据库)的博客中,记录了将Prometheus简单地配置为多个节点时的问题。
我們來思考基於這個的狀態可能是什麼。
假设有两台相同设置的Prometheus。
为了防止数据丢失,我们为这两台Prometheus准备了存储空间。

在这种情况下,Prometheus 1和Prometheus 2之间的抓取间隔可能略有不同。因此,可能会在存储中导致数据不一致的可能性。
那么,如果为每个Prometheus准备存储,情况会如何呢?
在这种情况下,我们会面临选择哪个存储来平衡负载的问题。
总结起来,Prometheus的HA配置似乎会出现如下问题。
-
- スクレイピングしたデータの重複/不整合
- ロードバランシング
Cortex 是什么东西?
查看GitHub时,可以看到以下这些关键词。
-
- Horizontally scalable
-
- Highly available
-
- Multi-tenant
- Long term storage
简而言之,
-
- Cortexは可用性が高くて、データも損失しにくいよ
-
- 複数のPrometheusからデータが収集できるよ
- 長期のデータ保存ができるよ
他们似乎在说着这样的话。
Cortex架构
这份构图被发布在Github上。
我们将重点介绍Cortex的核心部分,用红色圈起来的部分。

如果对本次说明的部分进行简化,将会形成以下这样的结构。

负载均衡器
很遗憾,LB不包含在Cortex组件中,因此您需要自己构建。
经销商/领事
当Cortex接收到来自Prometheus的数据时,首先会由Distributor进行接收。
分销商的功能是
经销商的作用是
分销者的功能是
分销商的职能是
-
- ラベル名が重複したものは最大値を採用する
- Ingesterにデータを配布する
这是邻居。
哈希环
数据在Ingester上分发时通过Hash Ring进行数据分割。
想象一下,
将数据形象比作一个甜甜圈。
我们决定用三个Ingester将这个甜甜圈分割开来。
在这个时候,我们需要将甜甜圈分成三等份,
但在此之前,我们会将甜甜圈分成一千份。
第一个碎片会分配给Ingester1, 第二个碎片会分配给Ingester2…… 依次类推,数据会被分成三等份。
在这种情况下,为了作为Ingester1出现故障时的保险,Pi1将分发给Ingester2和Ingester3。
如果你能理解复杂的情况下,先把数据切割并分发给Ingester这件事情,那就好了。
在Cortex的介绍博客中也以这样的方式表达。
这不像把一个饼切成五块那样简单。更像是把一个饼切成一千片,然后每个人都声称自己吃的是其中的第五片。
摄取者
这部分实际上是存储着 Prometheus 数据的部分。
由于通过哈希环将数据分割(并且其他的 Ingester 也拥有相同的数据),所以即使这部分发生故障,数据损失的可能性也较低。
(如果只有一台 Ingester 发生故障,则不会有数据丢失,但是如果多台发生故障就可能会出现问题。)
接收到的数据将会保存在内存中,并以块的形式推送到存储器中。(默认情况下为12小时)
涉及到存储格式的事情,数据的存储方式也有块状式。
分块数据/分块索引 /
可以将块数据分开保存为索引和实际数据。(可选功能)如果不分开保存数据,则索引和实际数据都将保存在块索引中。
以下是可利用的存储选项。
-
- Chunk Index
Amazon DynamoDB
Google Bigtable
Apache Cassandra
Chunk Data(オプション)
Amazon DynamoDB
Google Bigtable
Apache Cassandra
Amazon S3
Google Cloud Storage
Microsoft Azure Storage
Cortex的优点/缺点
好处
- データの損失が起こりにくく、可用性が高い
不利因素
-
- 構成が複雑でコンポーネント内の個々の構築が難しい
-
- (Consul/memcached等)
- 万一、Ingesterに障害が起きた場合、最大12時間分のデータが損失する
请提供不同的资料参考。
以下是对这两个链接的中文本地化的改写:
https://medium.com/weaveworks/what-is-cortex-2c30bcbd247d
Cortex是什么,它是一种用于可扩展和高效处理的开源监控系统,通过将数据存储在云环境中,并提供了基于时间序列的查询和分析功能。
https://github.com/cortexproject/cortex
Cortex是一个开源项目,旨在构建一个水平扩展的、可规模化的云原生监控系统。它提供了多种用于存储、查询和分析时间序列数据的功能和工具。