文件版本:mysql |
V1.0linux |
文件編號:git |
R&D0031github |
發佈日期:golang |
編 制:web |
||
審 批:sql |
Influxdb relay + grafana服務器shell
目錄數據庫
1.簡介3ubuntu
2.5.5 數據庫保存策略(Retention Policies)10
4.6 influxdb-relay節點故障數據寫入同步17
修訂記錄
版本號 |
發佈日期 |
擬製人 |
修訂描述 |
V1.0 |
2017-01-17 |
首次發佈 |
|
V1.1 |
2017-02-14 |
新增帳號和密碼 |
|
influxdb服務器
InfluxDB用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,和傳統是數據庫相比有很多不一樣的地方。相似的數據庫有Elasticsearch、Graphite等。
1.提供了Http接口的API來操做數據
2.提供了相似sql的數據庫語句
3.基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等)
4.可度量性:你能夠實時對大量數據進行計算
5.基於事件:它支持任意的事件數據
6.無結構(無模式):能夠是任意數量的列
7.可拓展的支持min, max, sum, count, mean, median 等一系列函數,方便統計
8.原生的HTTP支持,內置HTTP API
9.強大的類SQL語法
10.自帶管理界面,方便使用
庫、表等比較:
influxDB |
傳統數據庫中的概念 |
database |
數據庫 |
measurement |
數據庫中的表 |
points |
表裏面的一行數據 |
influxdb數據的構成:
Point由時間戳(time)、數據(field)、標籤(tags)組成。
Point屬性 |
傳統數據庫中的概念 |
time |
每一個數據記錄時間,是數據庫中的主索引(會自動生成) |
fields |
各類記錄值(沒有索引的屬性)也就是記錄的值:溫度, 溼度 |
tags |
各類有索引的屬性:地區,海拔 |
這裏不得不提另外一個名詞:series:
全部在數據庫中的數據,都須要經過圖表來展現,而這個series表示這個表裏面的數據,能夠在圖表上畫成幾條線:經過tags排列組合算出來。具體能夠經過SHOW SERIES FROM "表名" 進行查詢。
通常用來儲存實時數據,配合一套UI界面來展現信息。
基本環境,準備。
root@ubuntu:~# ls
grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb
root@ubuntu:~# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l
root@ubuntu:~# uname -a
Linux ubuntu 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
開始安裝
root@ubuntu:~# dpkg -i influxdb_1.1.1_amd64.deb
Selecting previously unselected package influxdb.
(Reading database ... 90134 files and directories currently installed.)
Preparing to unpack influxdb_1.1.1_amd64.deb ...
Unpacking influxdb (1.1.1-1) ...
Setting up influxdb (1.1.1-1) ...
Adding system startup for /etc/init.d/influxdb ...
/etc/rc0.d/K20influxdb -> ../init.d/influxdb
/etc/rc1.d/K20influxdb -> ../init.d/influxdb
/etc/rc6.d/K20influxdb -> ../init.d/influxdb
/etc/rc2.d/S20influxdb -> ../init.d/influxdb
/etc/rc3.d/S20influxdb -> ../init.d/influxdb
/etc/rc4.d/S20influxdb -> ../init.d/influxdb
/etc/rc5.d/S20influxdb -> ../init.d/influxdb
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
root@ubuntu:~# /etc/init.d/influxdb start
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]
root@ubuntu:~# netstat -lnp|grep influ
tcp6 0 0 :::8083 :::* LISTEN 5057/influxd
tcp6 0 0 :::8086 :::* LISTEN 5057/influxd
tcp6 0 0 :::8088 :::* LISTEN 5057/influxd
8083 web管理端 http://ip:8083 用戶名和密碼都是admin, InfluxDB 的 Web 管理界面端口是 8083
8086 HTTP API 監聽端口是 8086
8088 集羣端口(目前還不是很清楚, 配置在全局的bind-address,默認不配置就是開啓的)
啓動成功以後,咱們就能夠開始使用influxdb啦!
root@ubuntu:~# which influx
/usr/bin/influx
root@ubuntu:~# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 0.13.0
InfluxDB shell version: 0.13.0
>
> show databases
name: databases
name
----
_internal
> CREATE DATABASE "testDB" #建立數據庫
> show databases #建立數據庫
name: databases
name
----
_internal
testDB
> use testDB #使用testDB數據庫類mysql
Using database testDB
Web界面訪問http://ip:8083,
注意:新版本默認是關閉該web展現,詳見後面FAQ具體解決方法:
經過界面操做命令。
1. 先添加用戶
設置TS的authorized,提升安全性,針對指定用戶擁有權限才能訪問數據庫的數據,TS默認用戶分爲普通用戶和管理員用戶,權限分爲read,write,all privileges三種權限
root@ubuntu:/home/leco# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> CREATE USER "influxdb" WITH PASSWORD 'influxdb' WITH ALL PRIVILEGES
先添加帳號和密碼,均爲influxdb
Web界面數據庫的切換。此時登陸web的時候須要輸入帳號和密碼,驗證經過後才能夠正常進入。配置以下:
2. 重啓influxdb
root@ubuntu:~# /etc/init.d/influxdb restart
Stopping influxdb...
influxdb process was stopped [ OK ]
Starting influxdb...
influxdb process was started [ OK ]
經過界面上輸入正確的IP,端口,用戶名和密碼點擊save進入。
如果設置了密碼驗證的話必須就要輸入帳號和密碼才能正常登陸操做,不然報錯以下
1. 錯誤登陸
root@ubuntu:/home/leco# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> show databases;
ERR: unable to parse authentication credentials #說明已經添加了驗證方式
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
> quit
2. 正確登陸
root@ubuntu:/home/leco# influx -host 'localhost' -port '8086' -username 'influxdb' -password 'influxdb'
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> show databases;
name: databases
name
----
_internal
cmz
#此時localhost是鏈接本機,如果遠程鏈接就換成對應的IP。Port是influxdb默認端口8086,username 和password就是受權的帳號和密碼。
> use testDB
Using database testDB
> insert weather,altitude=1000,area=北 temperature=11,humidity=-4
或者經過HTTP接口增長
curl -i -XPOST 'http://localhost:8086/write?db=testDB' --data-binary 'weather,altitude=1000,area=北 temperature=11,humidity=-4'
Line Protocol格式
插入數據的格式彷佛比較奇怪,這是由於influxDB儲存數據所採用的是Line Protocol格式。
在上面兩個插入數據的方法中,都有同樣的部分。
weather,altitude=1000,area=北 temperature=11,humidity=-4
其中:
1. weather : 表名
2. altitude=1000,area=北 : tag
3. temperature=11,humidity=-4 :field
參考官方文檔:
https://docs.influxdata.com/influxdb/v0.10/write_protocols/line/
> use testDB
Using database testDB
> SELECT * FROM weather ORDER BY time
name: weather
timealtitudeareahumiditytemperature
-----------------------------------
14850746132673340411000北-411
經過Http接口
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "q=SELECT * FROM weather ORDER BY time DESC LIMIT 3"
InfluxDB是支持類SQL語句的,具體的查詢語法都差很少,就再也不詳細描述了。詳見官方文檔
#建立數據庫,庫名爲db_name
> CREATE DATABASE "db_name"
#顯示全部數據庫
> SHOW DATABASES
name: databases
name
----
_internal
testDB
db_name
#刪除庫名字爲db_name的庫
> DROP DATABASE "db_name"
#切換到testDB數據庫
> USE testDB
Using database testDB
#顯示該數據庫中的表
> SHOW MEASUREMENTS
name: measurements
name
----
weather
#建立表
#直接在插入數據的時候指定表名字(weather就是表名)
> insert weather,altitude=1000,area=北 temperature=11,humidity=-4
#刪除weather表
> DROP MEASUREMENT "weather"
InfluxDB沒有提供直接刪除Points的方法,可是它提供了Retention Policies。主要用於指定數據的保留時間:當數據超過了指定的時間以後,就會被刪除。
#1.查看當前數據庫的Retention Policies
> SHOW RETENTION POLICIES ON "testDB"
namedurationshardGroupDurationreplicaNdefault
---------------------------------------------
autogen0s168h0m0s1true
#2.建立新的Retention Policies
> CREATE RETENTION POLICY "rp_name" ON "testDB" DURATION 30d REPLICATION 1 DEFAULT
說明:
1. rp_name:策略名
2. testDB:具體的數據庫名
3. 30d:保存30天,30天以前的數據將被刪除
它具備各類時間參數,好比:h(小時),w(星期)
4. REPLICATION 1:副本個數,這裏填1就能夠了
5. DEFAULT 設爲默認的策略
#2.修改Retention Policies
> ALTER RETENTION POLICY "rp_name" ON "testDB" DURATION 3w DEFAULT
#3.刪除Retention Policies
> DROP RETENTION POLICY "rp_name" ON "testDB"
當數據超過保存策略裏指定的時間以後,就會被刪除。若是咱們不想徹底刪除掉,好比作一個數據統計採樣:把原先每秒的數據,存爲每小時的數據,讓數據佔用的空間大大減小(以下降精度爲代價)。這就須要InfluxDB提供的:連續查詢(Continuous Queries)。
#1.當前數據庫的continus Queries
> SHOW CONTINUOUS QUERIES
name: _internal
namequery
---------
name: testDB
namequery
---------
#2.建立新的continus Queries
#顯示用戶
> SHOW USERS
useradmin
---------
#建立用戶
> CREATE USER "realcloud" WITH PASSWORD '123456'
#建立管理員權限的用戶
> CREATE USER "cmz" WITH PASSWORD 'cmz' WITH ALL PRIVILEGES
#刪除用戶
> DROP USER "cmz"
數據最終是須要一套UI來展現的,而這種實時數據的展現,已經有很多項目了。 好比:
1. 官方的Chronograf
2. Grafana
3. 其它...
此時我選擇的使用Grafana
root@ubuntu:~# ls
grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb
#安裝
root@ubuntu:~# dpkg -i grafana_4.1.1-1484211277_amd64.deb
Selecting previously unselected package grafana.
(Reading database ... 61968 files and directories currently installed.)
Preparing to unpack grafana_4.1.1-1484211277_amd64.deb ...
Unpacking grafana (4.1.1-1484211277) ...
Setting up grafana (4.1.1-1484211277) ...
Adding system user `grafana' (UID 106) ...
Adding new user `grafana' (UID 106) with group `grafana' ...
Not creating home directory `/usr/share/grafana'.
### NOT starting grafana-server by default on bootup, please execute
sudo update-rc.d grafana-server defaults 95 10
### In order to start grafana-server, execute
sudo service grafana-server start
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
#啓動
root@ubuntu:~# /etc/init.d/grafana-server start
* Starting Grafana Server [ OK ]
安裝步驟參考:http://grafana.org/download/
1) Web登陸,直接訪問:http://your_ip:3000
默認賬號:admin
默認密碼:admin
2) 在Data Sources中添加數據庫testDB
其中user和password,若是沒有設置過,能夠隨便填下。
保存以後,能夠經過Test Connection來測試,是否填寫正確。
點擊New按鈕就能夠了。
該項目爲influxdb添加了一個基本的高可用性層。經過正確的體系結構和災難恢復過程,實現了高度可用的設置。
提示: influxdb-relay must be built with Go 1.5+
參考連接:
https://github.com/influxdata/influxdb-relay/blob/master/README.md
體系結構至關簡單,包括負載平衡器、兩個或多個influxdb中繼進程和兩個或多個influxdb進程。負載平衡器應使用路徑/寫入將UDP通訊和http post請求指向兩個繼電器,同時將路徑/查詢指向兩個influxdb服務器。安裝程序應該以下:
給個人感受,這個 influxdb-relay是一個數據庫中間件的角色,起到了一個代理的做用
1.實驗環境
IP |
系統環境 |
安裝軟件 |
|
192.168.5.200 |
Ubuntu14.04 x64 |
influxdb |
influxdb-relay |
192.168.5.202 |
Ubuntu14.04 x64 |
influxdb |
此時上文只在200機器上安裝了influxdb,此時要在202上也要安裝influxdb。也能夠只安裝在一個機器上,我分開安裝了,更貼切實際生產狀況。
2. 安裝golang環境
influxdb release的deb包自己是已經編譯好的,並不須要golang的環境。而influxdb-relay目前還只是存放在github上,所以須要先安裝golang環境。 手動下載更高版本的golang是須要的。
3. 下載並解壓1.6.2版本的golang壓縮包
root@ubuntu:~# apt-get install git
root@ubuntu:~# wget http://www.golangtc.com/static/go/1.6.2/go1.6.2.linux-amd64.tar.gz
root@ubuntu:~# ls go1.6.2.linux-amd64.tar.gz
go1.6.2.linux-amd64.tar.gz
root@ubuntu:~# tar -zxf go1.6.2.linux-amd64.tar.gz -C /usr/local/
4. 配置環境變量
root@ubuntu:~# tail -9 /etc/profile
#add by caimengzhi at 2017-01-23 for go. start
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export GOPKG=$GOROOT/pkg/tool/linux_amd64
export GOARCH=amd64
export GOOS=linux
export GOPATH=$HOME
export PATH=$PATH:$GOBIN:$GOPKG:$GOPATH/bin
#add by caimengzhi at 2017-01-23 for go. End
root@ubuntu:~# source /etc/profile
root@ubuntu:~# go version
go version go1.6.2 linux/amd64
root@ubuntu:~# GOPATH=/root/go
root@ubuntu:~# go get github.com/influxdata/influxdb-relay
root@ubuntu:~# ls
go go1.6.2.linux-amd64.tar.gz grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb src
#此時會在/root下發現go文件
root@ubuntu:~# cp $GOPATH/src/github.com/influxdata/influxdb-relay/sample.toml ./relay.toml
root@ubuntu:~# vim relay.toml
-bash: /root/go/bin/influxdb-relay: No such file or directory
root@ubuntu:~# which influxdb-relay
/usr/local/go/bin/influxdb-relay
5. 配置文件解釋
root@ubuntu:~# cat relay.toml
`http`
name = "example-http"
bind-addr = "192.168.5.200:9096"
output = [
{ name="local1", location = "http://192.168.5.200:8086/write" },
{ name="local2", location = "http://192.168.5.202:8086/write" },
]
`udp`
name = "example-udp"
bind-addr = "192.168.5.200:9096"
read-buffer = 0 # default
output = [
{ name="local1", location="192.168.5.200:8089", mtu=512 },
{ name="local2", location="192.168.5.202:8089", mtu=1024 },
]
root@ubuntu:~# /usr/local/go/bin/influxdb-relay -config relay.toml >/tmp/influxdb_relay.log 2>/dev/null &
[1] 10943
再指定以前influxdb-relay配置的端口9096,成功進入其餘的influxdb
root@ubuntu:~# influx -port 9096
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:9096 version relay
InfluxDB shell version: 1.1.1
驗證能夠經過influxdb-relay寫數據
root@ubuntu:~#
curl -i -XPOST 'http://localhost:9096/write?db=testDB' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
2017/01/23 17:53:43 Problem posting to relay "example-http" backend "local2": Post http://127.0.0.1:7086/write?db=testDB: dial tcp 127.0.0.1:7086: getsockopt: connection refused
HTTP/1.1 204 No Content
Date: Mon, 23 Jan 2017 09:53:43 GMT
1. 進入節點1,influxdb驗證數據寫入
root@ubuntu:~# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> use testDB
Using database testDB
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1434055562000000000server01us-west0.64
2. 進入節點2,influxdb驗證數據寫入
> use testDB;
Using database testDB
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1434055562000000000server01us-west0.64
從上能夠看出經過調用relay的端口9096.寫入數據,兩個節點都會有相對數據寫入。
注意點:
### 缺陷,不知道是否是坑,反正在官網的github上沒看到這個注意點
# 手動在全部節點上建立數據庫
write操做並不包含建立數據庫,因此須要手動在全部節點上提早建立數據庫
# 故障節點操做
1.中止節點1的influxdb
root@loocha15:~# /etc/init.d/influxdb stop
Stopping influxdb...
influxdb process was stopped [ OK ]
2.此時繼續寫入數據
curl -i -XPOST 'http://localhost:9096/write?db=cmz' --data-binary 'cpu_load_short,host=beijing,region=east value=2 2222222222'
2017/02/06 15:19:26 Problem posting to relay "example-http" backend "local1": Post http://192.168.3.35:8086/write?db=cmz: dial tcp 192.168.3.35:8086: getsockopt: connection refused
HTTP/1.1 204 No Content
Date: Mon, 06 Feb 2017 07:19:26 GMT
3.節點2 驗證數據
> use cmz;
Using database cmz
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1111111111nanjingeast123
2222222222beijingeast2 #這一條就是節點1故障後,寫入的數據
1434055562000000000server01us-west0.64
到此截止influxdb的HA已經測試完畢。
1. WEB顯示404
root@ubuntu:~# curl localhost:8086 -I
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
X-Influxdb-Version: 1.1.1
Date: Sun, 22 Jan 2017 09:36:48 GMT
Content-Length: 19
Influxdb新版本web界面不展現解決方法
1.新安裝influxdb web界面不展現
訪問的時候404.
解決方法:
1、問題緣由
InfluxDB在0.13版本之後,就默認關閉了web管理頁面,而國內的文檔大多都以舊版的InfluxDB爲標準寫的,因此下載安裝好最新版本之後,就會出現8083端口的web管理頁面訪問不了的問題。
2、解決方案
新版的InfluxDB雖然默認關閉了web管理頁面,但咱們能夠經過很簡單的方式進行開啓。
打開配置文件,vim /etc/influxdb/influxdb.conf 找到以下幾行:
修改後以下:
重啓服務
root@ubuntu:~# /etc/init.d/influxdb restart
influxdb process already stopped [ OK ]
Starting influxdb...
influxdb process was started [ OK ]
查看端口號8083(以前是沒有的)
root@ubuntu:~# netstat -lnp|grep influ
tcp6 0 0 :::8083 :::* LISTEN 5057/influxd
tcp6 0 0 :::8086 :::* LISTEN 5057/influxd
tcp6 0 0 :::8088 :::* LISTEN 5057/influxd
Web界面訪問展現:
http://ip:8083
OK.
2. command
root@ubuntu:~# go get -u github.com/influxdata/influxdb-relay
go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/influxdata/influxdb-relay: exec: "git": executable file not found in $PATH
解決:
root@ubuntu:~# apt-get install git
3.relay命令行管理不了
root@ubuntu:~# !net
netstat -lnp|grep 9096
tcp 0 0 127.0.0.1:9096 0.0.0.0:* LISTEN 3502/influxdb-relay
udp 0 0 127.0.0.1:9096 0.0.0.0:* 3502/influxdb-relay
root@ubuntu:~# influx -port 9096
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:9096 version relay
InfluxDB shell version: 1.1.1
> show database;
ERR: invalid write endpoint
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".