InfluxDB的安裝和簡介


InfluxDB簡介

InfluxDB是一個時間序列數據庫,旨在處理高寫入和查詢負載。它是TICK堆棧的組成部分 。InfluxDB旨在用作涉及大量帶時間戳數據的任何用例的后備存儲,包括DevOps監控,應用程序指標,物聯網傳感器數據和實時分析。

功能特點

  1. 基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等)
  2. 可度量性:你可以實時對大量數據進行計算
  3. 基於事件:它支持任意的事件數據基於事件:它支持任意的事件數據

主要特點

無結構(無模式):可以是任意數量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函數,方便統計支持min, max, sum, count, mean, median 等一系列函數,方便統計
原生的HTTP支持,內置HTTP API原生的HTTP支持,內置HTTP API
強大的類SQL語法強大的類SQL語法
自帶管理界面,方便使用自帶管理界面,方便使用

InfluxDB與傳統數據庫的比較

InfluxDB的名詞 傳統數據庫的概念
database 數據庫
measurement 數據庫的表
points 表里的一行數據

InfluxDB的獨特的特性
point
Point相當於傳統數據庫里的一行數據,如下表所示:

point屬性 傳統數據庫中的概念
time(時間戳) 每個數據記錄時間,是數據庫中的主索引(會自動生成)
fields(字段、數據) 各種記錄值(沒有索引的屬性)也就是記錄的值:溫度, 濕度
tags(標簽) 各種有索引的屬性:地區,海拔

 

注意

在influxdb中,字段必須存在。因為字段是沒有索引的。如果使用字段作為查詢條件,會掃描符合查詢條件的所有字段值,性能不及tag。類比一下,fields相當於SQL的沒有索引的列。
tags是可選的,但是強烈建議你用上它,因為tag是有索引的,tags相當於SQL中的有索引的列。tag value只能是string類型。
series
相當於是 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一起。

> select * from students
name: students
time                score stuid value
----                ----- ----- -----
1542848518465067760 89    s123
1542850528630385278 79    s123
1542850533581732431 69    s123
1542850536266169940 39    s123
1542850676477097687 99    s123
1542874869654197110       s124  100
1542874898710687064       s125  60
> show series from students
key
---
students,stuid=s123
students,stuid=s124
students,stuid=s125

shard
shard 和 retention policy 相關聯。每一個存儲策略下會存在許多 shard,每一個 shard 存儲一個指定時間段內的數據,並且不重復;
例如 7點-8點 的數據落入 shard0 中,8點-9點的數據則落入 shard1 中。
每一個 shard 都對應一個底層的 tsm 存儲引擎,有獨立的 cache、wal、tsm file。

組件
TSM 存儲引擎主要由幾個部分組成: cache、wal、tsm file、compactor。

Cache:cache 相當於是 LSM Tree 中的 memtabl。插入數據時,實際上是同時往 cache 與 wal 中寫入數據,可以認為 cache 是 wal 文件中的數據在內存中的緩存。當 InfluxDB 啟動時,會遍歷所有的 wal 文件,重新構造 cache,這樣即使系統出現故障,也不會導致數據的丟失。
cache 中的數據並不是無限增長的,有一個 maxSize 參數用於控制當 cache 中的數據占用多少內存后就會將數據寫入 tsm 文件。如果不配置的話,默認上限為 25MB,每當 cache 中的數據達到閥值后,會將當前的 cache 進行一次快照,之后清空當前 cache 中的內容,再創建一個新的 wal 文件用於寫入,剩下的 wal 文件最后會被刪除,快照中的數據會經過排序寫入一個新的 tsm 文件中。

WAL:wal 文件的內容與內存中的 cache 相同,其作用就是為了持久化數據,當系統崩潰后可以通過 wal 文件恢復還沒有寫入到 tsm 文件中的數據。
TSM File:單個 tsm file 大小最大為 2GB,用於存放數據。
Compactor:compactor 組件在后台持續運行,每隔 1 秒會檢查一次是否有需要壓縮合並的數據。
主要進行兩種操作
一種是 cache 中的數據大小達到閥值后,進行快照,之后轉存到一個新的 tsm 文件中。
另外一種就是合並當前的 tsm 文件,將多個小的 tsm 文件合並成一個,使每一個文件盡量達到單個文件的最大大小,減少文件的數量,並且一些數據的刪除操作也是在這個時候完成。

安裝

環境: CentOS7.0_x64
InfluxDB版本:1.7.0

基礎環境

yum install go

InfluxDB的安裝

wget  https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm
rpm -ivh influxdb-1.2.0.x86_64.rpm

安裝后產生的InfluxDB相關文件講解
/usr/bin下文件

文件名  文件解析
influxd influxdb服務器
influx influxdb 命令行客戶端
influx_inspect  查看工具
influx_stress  壓力測試工具
influx_tsm  數據庫轉換工具(將數據庫從b1或bz1格式轉換為tsm1格式)

/var/lib/influxdb下文件夾(建完表和庫的時候才會有)
文件夾 文件夾解析
data 存放最終存儲的數據,文件以**.tsm**結尾
meta 存放數據庫元數據
wal 存放預寫日志文件
/etc/influxdb下文件
文件 文件解析
influxdb.conf influxdb數據庫配置文件

 

啟動服務
操作服務的相關命令

服務式啟動命令
service influxdb start

服務式的其他命令
停止服務
service influxdb stop

重啟服務
service influxdb restart

嘗試重啟服務
service influxdb try-restart

重新加載服務
service influxdb reload

強制重新加載服務
service influxdb force-reload

查看服務狀態
service influxdb status

 以非服務方式啟動

 cd /usr/bin;./influxd

服務啟動查看是否正常
  • 通過查看服務對應進程

InfluxDB默認使用以下網絡端口:

  • TCP端口8086用於通過InfluxDB的HTTP API進行客戶端 - 服務器通信
  • TCP端口8088用於RPC服務以進行備份和還原

除了上面的端口,InfluxDB還提供了多個可能需要自定義端口的插件。可以通過配置文件修改所有端口映射,配置文件位於/etc/influxdb/influxdb.conf默認安裝位置。

InfluxDB 客戶端命令行方式操作

  • InfluxDB數據庫操作

客戶端命令行方式操作
[root@localhost influxdb]# influx
Connected to http://localhost:8086 version 1.7.0
InfluxDB shell version: 1.7.0
Enter an InfluxQL query
>

顯示數據庫
> show databases
name: databases
name
----
_internal

新建數據庫
> create database testdb
> show databases
name: databases
name
----
_internal
testdb

刪除數據庫
> drop database testdb
> show databases
name: databases
name
----
_internal

使用數據庫

> create database testdb
> use testdb
Using database testdb

InfluxDB 數據表操作
在InfluxDB當中,並沒有表(table)這個概念,取而代之的是measurement,measurement的功能與傳統數據庫中的表一致,因此我們也可以將measurement稱為InfluxDB中的表。

顯示所有表
show measurement

新建表
InfluxDB中沒有顯示的創建表的語句,只能通過insert數據的房還是來建立新表。
其中 disk_free 就是表名,hostname 是索引(tag),value=xx 是記錄值(field),記錄值可以有多個,系統自帶追加時間戳。

> insert disk_free,hostname=server01 value=442221834240i
> select * from disk_free
name: disk_free
time                hostname value
----                -------- -----
1435362189575692180 server01 442221834240

或者添加數據時,自己寫入時間戳(寫入相同時間戳、相同tags,對原有數據進行update操作)

> insert disk_free,hostname=server01 value=442221834240i 1435362189575692182
> select * from disk_free
name: disk_free
time                hostname value
----                -------- -----
1435362189575692180 server01 442221834240
1435362189575692182 server01 442221834240

刪除表

> drop measurement disk_free

數據保存策略(Retention Policies)
InfluxDB 是沒有提供直接刪除數據記錄的方法,但是提供數據保存策略,主要用於指定數據保留時間,超過指定時間,就刪除這部分數據。

查看當前數據庫Retention Policies

name:名稱,此示例名稱為 default。
duration:持續時間,0代表無限制。
shardGroupDuration:shardGroup的存儲時間,shardGroup是InfluxDB的一個基本儲存結構,應該大於這個時間的數據在查詢效率上應該有所降低。
replicaN:全稱是replication,副本個數。
default:是否是默認策略。

> show retention policies on testdb
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

創建新的Retention Policies

rp_name:策略名。
db_name:具體的數據庫名。
3w:保存3周,3周之前的數據將被刪除,influxdb 具備各種事件參數,持續時間必須至少為1小時;比如:h(小時)、d(天)、w(星期)。
replication 1:副本個數,一般為1即可。
default:設置為默認策略。

create retention policy "rp_name" on "db_name" duration 3w replication 1 default
修改Retention Policies
alter retention policy "rp_name" on "db_name" duration 30d default

刪除Retention Policies
drop retention policy "rp_name" on "db_name"

連續查詢(Continuous Queries)
InfluxDB 的連續查詢是在數據庫中自動定時啟動的一組語句,語句中必須包含 select 關鍵字 和 group by time() 關鍵字。
InfluxDB 會將查詢結果放在指定的數據表中。
目的:使用連續查詢是最優的降低采樣率的方式,連續查詢和存儲策略搭配使用將會大大降低 InfluxDB 的系統占用量。而且使用連續查詢后,數據會存放到指定的數據表中,這樣就為以后統計不同精度的數據提供了方便。

新建連續查詢

CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
[RESAMPLE [EVERY <interval>] [FOR <interval>]]
BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>
FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]
END

樣例

CREATE CONTINUOUS QUERY wj_30m ON testdb BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END

在 testdb 庫中新建了一個名為 wj_30m 的連續查詢,每三十分鍾取一個 connected_clients 字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的數據保留策略都是default。
不同 database 樣例:

CREATE CONTINUOUS QUERY wj_30m ON testdb_30 BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO testdb_30.autogen.redis_clients_30m FROM testdb.autogen.redis_clients GROUP BY ip,port,time(30m) END
顯示所有已存在的連續查詢
show continuous queries

刪除Continuous Queries
drop continuous query <cq_name> on <database_name>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM