当前位置:网站首页>Grafana 高可用部署最佳实践
Grafana 高可用部署最佳实践
2022-08-03 12:17:00 【imroc】
概述
Grafana 默认安装是单副本,非高可用部署,而 Grafana 自身是支持多副本高可用部署的,本文介绍其配置方法以及已经安装的 Grafana 如何迁移到高可用架构。
修改配置
要让 Grafana 支持高可用,需要对 Grafana 配置文件 (grafana.ini
) 进行一些关键的修改:
- Grafana 默认使用 sqlite3 文件存储数据,多副本共享可能会有数据冲突,可以配置一下
database
让多副本共享同一个 mysql 或 postgres 数据库,这样多副本就可以无状态横向伸缩。 - Grafana 多副本运行,如果配置了告警规则,每个副本都会重复告警,配置一下
ha_peers
让 Grafana 自行选主只让其中一个副本执行告警。
[database]
url = mysql://root:[email protected]:3306/grafana
[unified_alerting]
enabled = true
ha_peers = monitoring-grafana-headless.svc.monitoring.cluster.local:9094
[alerting]
enabled = false
database
下配置数据库连接信息,包含数据库类型、用户名、密码、数据库地址、端口以及要具体哪个库。alerting
的enabled
置为 false,表示禁用默认的告警方式(每个 Grafana 实例都单独告警)。unified_alerting
的enabled
置为 true,表示开启高可用告警。unified_alerting
的ha_peers
填入 Grafana 所有实例的地址,在 k8s 环境可用 headless service,dns 会自动解析到所有 pod ip 来实现自动发现 Grafana 所有 IP,端口默认是 9094,用于 gossip 协议实现高可用。
helm chart 配置示例
如果 grafana 安装到 Kubernetes,通常使用 helm chart 来安装,一般是 grafana 官方 chart,values.yaml
配置示例:
replicas: 2
defaultDashboardsTimezone: browser
grafana.ini:
unified_alerting:
enabled: true
ha_peers: 'monitoring-grafana-headless.monitoring.svc.cluster.local:9094'
alerting:
enabled: false
database:
url: 'mysql://root:[email protected]:3306/grafana'
server:
root_url: "https://grafana.imroc.cc"
paths:
data: /var/lib/grafana/
logs: /var/log/grafana
plugins: /var/lib/grafana/plugins
provisioning: /etc/grafana/provisioning
analytics:
check_for_updates: true
log:
mode: console
grafana_net:
url: https://grafana.net
grafana.ini
字段用于修改 grafana 配置文件内容,使用yaml
格式定义,会自动转成ini
。ha_peers
指向的 headless service 自行提前创建(当前 chart 内置的 headless 没暴露 9094 端口)。
headless service 示例:
apiVersion: v1
kind: Service
metadata:
name: monitoring-grafana-headless
namespace: monitoring
spec:
clusterIP: None
ports:
- name: http-web
port: 3000
protocol: TCP
targetPort: 3000
- name: alert
port: 9094
protocol: TCP
targetPort: 9094
selector:
app.kubernetes.io/instance: monitoring
app.kubernetes.io/name: grafana
type: ClusterIP
如果你使用的 kube-prometheus-stack 安装,实际也是用的 Grafana 官方的 chart,只不过作为了一个子 chart,写 values.yaml
时将上面准备的配置放到 grafana
字段下面即可:
grafana:
replicas: 2
defaultDashboardsTimezone: browser
grafana.ini:
...
已安装的 Grafana 如何迁移到高可用架构 ?
如果你用的默认安装,使用 sqlite3 文件存储数据,可以先按照如下步骤迁移数据:
- 拿到
grafana.db
文件,使用 Grafana 官方提供的迁移脚本 sqlitedump.sh 将 sqlite3 的数据转换成 sql 文件:
sqlitedump.sh grafana.db > grafana.sql
确保环境中安装了 sqlite3 命令。
- 停止 Grafana (如果是 K8S 部署,可以修改副本数为 0)。
- 准备好数据库,提前创建好 grafana database:
CREATE DATABASE grafana
- 替换 Grafana 配置文件,参考前面的配置示例。
- 启动 Grafana,让 Grafana 自动初始化数据库。
- 将 sql 文件导入数据库执行:
mysql -h172.16.181.186 -P3306 -uroot -p123456 grafana < grafana.sql
- 恢复 Grafana 运行。
参考资料
边栏推荐
- 从零开始C语言精讲篇5:指针
- Chapter 15 Source Code File REST API Introduction
- ROS中编译通过但是遇到可执行文件找不到的问题
- 基于php校园医院门诊管理系统获取(php毕业设计)
- Take you understand the principle of CDN technology
- R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图、设置add参数为mean_se和dotplot可视化不同水平均值的折线图并为折线图添加误差线(se标准误差)和点阵图
- PC client automation testing practice based on Sikuli GUI image recognition framework
- Autumn recruitment work
- 苹果发布 AI 生成模型 GAUDI,文字生成 3D 场景
- 基于php旅游网站管理系统获取(php毕业设计)
猜你喜欢
随机推荐
mysql进阶(二十四)防御SQL注入的方法总结
How does Filebeat maintain file state?
LyScript 实现对内存堆栈扫描
shell编程之条件语句
长城简漫·暑期安全篇⑤ 这个强,不能逞
免费的网络传真平台_发传真不显示发送号码
层次分析法
别再用if-else了,分享一下我使用“策略模式”的项目经验...
长江商业银行面试
深度学习跟踪DLT (deep learning tracker)
五、函数的调用过程
超多精美礼品等你来拿!2022年中国混沌工程调查启动
Chapter 15 Source Code File REST API Introduction
B站回应“HR 称核心用户都是 Loser”:该面试官去年底已被劝退,会吸取教训加强管理
Take you understand the principle of CDN technology
Unsupervised learning KMeans notes and examples
Last blog for July
Kubernetes 网络入门
业界新标杆!阿里开源自研高并发编程核心笔记(2022最新版)
Knowledge Graph Question Answering System Based on League of Legends