今天一直在折腾grafana的集群配置,过程中也遇到了些许的坑,但总算是趟出来了,记录下来,希望能帮助大家少走写弯路。
我这里使用三个grafana容器来做集群,三个容器全部读取一份grafana.ini配置(把配置目录挂载出来就好了!)
grafana版本是: 6.4.2
其实grafana做集群需要解决的问题也就是三个,也都及其容易解决:
1、数据存储问题:grafana默认使用sqlite3数据库,数据文件存储在本地,显然不适合做多节点共享。
2、会话保持问题:默认session是存储在本地的,因此集群需要解决多个grafana节点的session问题,否则可能会出现频繁登录问题。
3、入口的slb调度问题。
对于上面的三个问题我们一一解决:
1、数据存储统一使用mysql数据库:
三个grafana节点的配置文件[database]修改成mysql信息,(由于我使用的是同一机器上的三个容器,配置了他们读取同一份配置,因此我只需要一份配置即可)
vim /etc/grafana/grafana.ini
......
[database]
type = mysql
host = 127.0.0.1:3306 #mysql地址
name = grafana #数据库名
user = grafana_user #数据库用户名
password = grafana_password #数据库密码
......
2、会话保持我这里仍然选择用mysql数据库来保存session信息,因为不想grafana做的太过复杂
我是用的grafana版本是6.4.2,6.2及以上版本的grafana session配置改成了在[remote_cache]模块下配置,
6.2版本以下是在 [session] 模块下配置,6.2以下配置完数据库信息之后还需要手动创建session表,但6.2以上的版本无需手动建表。
[remote_cache]
type = database
#username:password@tcp(127.0.0.1:3306)/dbname
connstr = grafana:Z3JhZm@tcp(10.10.10.88:3306)/grafana
3、访问入口问题
前面的访问入口,我这里用nginx来做反向代理,具体配置如下: nginx代理grafana的配置可以参考
https://www.cnblogs.com/wurijie/p/11109673.html
upstream GF {
#使用ip_hash 实现会话保持;
ip_hash;
server 172.18.11.221:3000;
server 172.18.11.221:3001;
server 172.18.11.221:3002;
}
server {
listen 80;
server_name test1.mockuai.net;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30s;
proxy_read_timeout 30s;
#这个localtion是用来跳转默认页面的,目的在于提升访问体验
location / {
rewrite (.*) http://$host/grafana;
}
#这里能实现跳转到grafana还需要在grafana的配置文件里配些东西,参见https://www.cnblogs.com/wurijie/p/11109673.html
location /grafana/ {
proxy_pass http://GF/; #结尾的“/” 千万不能少哦!
}
#这个local是我用来跳转prometheus的,你们可以忽略。我也不想删它。
location /prometheus/ {
proxy_pass http://172.18.123.11:9090/prometheus/;
}
}
然后在mysql中创建grafana数据并授权访问即可
mysql >>> create database grafana character set utf8mb4;
mysql >>> grant all on grafana.* to grafana_user@'%' by identified 'grafana_password';