您现在的位置是:亿华云 > 热点

使用读写分离模式扩展 Grafana Loki

亿华云2025-10-03 06:40:36【热点】5人已围观

简介Loki 由多个微服务组件构建而成,可以作为一个可水平扩展的分布式系统运行,Loki 的独特设计可以将整个分布式系统的代码编译成单个二进制或 Docker 映像,单个二进制文件的行为由-target命

Loki 由多个微服务组件构建而成,使用可以作为一个可水平扩展的读写分布式系统运行,Loki 的分离独特设计可以将整个分布式系统的代码编译成单个二进制或 Docker 映像,单个二进制文件的模式行为由 -target 命令行标志控制。

单体模式

最简单的扩展操作模式是设置 -target=all,这是使用默认的方式,不需要指定,读写这就是分离单体模式,它以单个二进制文件或 Docker 映像的模式形式在单个进程中运行 Loki 的所有微服务组件。

单体模式对于快速开始使用 Loki 以及每天数据量约100GB的扩展读写量非常有用。将单体模式部署水平扩展至更多实例可以通过使用共享对象存储,使用配置 memberlist_config 属性在所有实例之间共享状态。读写

可以通过使用 memberlist_config 配置和共享对象存储运行两个 Loki 实例来配置高可用性。源码库分离以循环方式将流量路由到所有 Loki 实例。模式并行查询受限于实例数量和定义的扩展查询并行度。

单体模式的安装非常简单,直接使用 grafana/loki-stack 这个 Helm Chart 包安装即可。

读写分离模式

如果你每天的日志量超过几百 GB,或者你想进行读写分离,Loki 提供了简单的可扩展部署模式。这种部署模式可以扩展到每天数 TB 甚至更多的日志。

在这种模式下,Loki 的组件微服务被绑定到两个目标中:-target=read 和 -target=write,BoltDB compactor 服务将作为读取目标的一部分运行。

分离读写路径有以下优点:

通过提供专用节点提高写入路径的可用性。可单独扩展读取路径以按需添加/删除查询性能。

这种读写分离的模式需要在 Loki 前面有一个负载均衡器,它将 /loki/api/v1/push 流量路由到写入节点,服务器托管所有其他请求都转到读取节点,流量应该以循环方式发送。

安装

我们同样使用 Helm Chart 进行安装,首先获取读写分离模型的 Chart 包:

$ helm repo add grafana https://grafana.github.io/helm-charts

$ helm pull grafana/loki-simple-scalable --untar --version 1.4.1

$ cd loki-simple-scalable

该 Chart 包支持下表中显示的组件,Ingester、distributor、querier 和 query-frontend 都会安装,其他组件是可选的。

Loki组件

是否可选

是否默认开启

gateway

write

n/a

read

n/a

这里我们使用 MinIO 来作为远程数据存储,分别配置读和写的 Loki 实例副本数为2,为了在 Loki 前面添加一个负载均衡器,需要开启 Gateway,对应的 Values 文件如下所示:

# ci/minio-values.yaml

loki:

commonConfig:

path_prefix: /var/loki

replication_factor: 2

authEnabled: false

# Configuration for the write

write:

# -- Number of replicas for the write

replicas: 3

affinity: |

podAntiAffinity:

preferredDuringSchedulingIgnoredDuringExecution:

- weight: 1

podAffinityTerm:

labelSelector:

matchLabels:

{ { - include "loki.writeSelectorLabels" . | nindent 12 }}

topologyKey: kubernetes.io/hostname persistence:

size: 1Gi

storageClass: local-path

# Configuration for the read node(s)

read:

# -- Number of replicas for the read

replicas: 3

affinity: |

podAntiAffinity:

preferredDuringSchedulingIgnoredDuringExecution:

- weight: 1

podAffinityTerm:

labelSelector:

matchLabels:

{ { - include "loki.readSelectorLabels" . | nindent 12 }}

topologyKey: kubernetes.io/hostname persistence:

size: 1Gi

storageClass: local-path

# Configuration for the gateway

gateway:

# -- Specifies whether the gateway should be enabled

enabled: true

# -------------------------------------

# Configuration for `minio` child chart

# -------------------------------------

minio:

enabled: true

accessKey: enterprise-logs

secretKey: supersecret

service:

type: NodePort

nodePort: 32000

buckets:

- name: chunks

policy: none

purge: false

- name: ruler

policy: none

purge: false

- name: admin

policy: none

purge: false

persistence:

size: 1Gi

storageClass: local-path

resources:

requests:

cpu: 100m

memory: 256Mi

然后使用上面的 values 文件来安装读写分离模式的 Loki:

$ helm upgrade --install loki -n logging -f ci/minio-values.yaml .

Release "loki" does not exist. Installing it now.

NAME: loki

LAST DEPLOYED: Fri Jun 17 14:53:20 2022

NAMESPACE: logging

STATUS: deployed

REVISION: 1

TEST SUITE: None

NOTES:

很赞哦!(5724)