您现在的位置是:亿华云 > 热点
使用读写分离模式扩展 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)
上一篇: 服务器内存故障预测居然可以这样做!
下一篇: 超聚变亮相ODCC峰会,荣获两项大奖