今天一直在折騰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';