Grafana 默认安装是单副本,非高可用部署,而 Grafana 自身是支持多副本高可用部署的,本文介绍其配置方法以及已经安装的 Grafana 如何迁移到高可用架构。
要让 Grafana 支持高可用,需要对 Grafana 配置文件 (grafana.ini
) 进行一些关键的修改:
database
让多副本共享同一个 mysql 或 postgres 数据库,这样多副本就可以无状态横向伸缩。ha_peers
让 Grafana 自行选主只让其中一个副本执行告警。[database]
url = mysql://root:123456@mysql.db.svc.cluster.local: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 协议实现高可用。如果 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:123456@mysql.db.svc.cluster.local: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:
...
如果你用的默认安装,使用 sqlite3 文件存储数据,可以先按照如下步骤迁移数据:
grafana.db
文件,使用 Grafana 官方提供的迁移脚本 sqlitedump.sh 将 sqlite3 的数据转换成 sql 文件:sqlitedump.sh grafana.db > grafana.sql
确保环境中安装了 sqlite3 命令。
CREATE DATABASE grafana
mysql -h172.16.181.186 -P3306 -uroot -p123456 grafana < grafana.sql
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有