寫在前面
最近因為項目需要在讀opentsdb的一部分源碼,后面會做個小結分享出來。本人是不大喜歡寫這種安裝部署的文章,考慮到opentsdb安裝部署對於初次接觸者來說不太友好,另外對公司做測試的同事可能有些幫助作用,方便他們快速安裝部署,就把OpenTSDB 2.4.0安裝部署文檔寫在這里。
對於opentsdb是什么,應用領域這里就不說了,不了解的請看官網http://opentsdb.net/
。
這里只提一點,opentsdb
的后端數據存儲依賴於HBase
。
所以安裝步驟就分為了三步 (我們也可以類比安裝傳統的依賴關系型數據庫比如mysql作為后端數據存儲的軟件)
-
安裝HBase (類比傳統軟件我們要安裝mysql)
-
創建表結構 (類比我們在mysql中創建database以及table)
-
安裝配置並啟動opentsdb (類比一些springboot的應用)
安裝HBase
如果已經有HBase環境了,那么請跳過這一步(大多數使用HBase
集群環境應該都是用CDH
管理)
官網地址: http://hbase.apache.org/
其實HBase
的存儲又是依賴HDFS
,當然了如果只是本地測試用,可以直接用本地文件系統
代替HDFS
,這樣就不需要部署一套HDFS
集群了
搭建Standalone HBase
,官方文檔http://hbase.apache.org/book.html#quickstart
,一步一步都有,請仔細讀
這里簡單梳理一下關鍵的地方:
conf/hbase-env.sh
文件
# The java implementation to use.
export JAVA_HOME=/usr/jdk64/jdk1.8.0_112
conf/hbase-site.xml
文件
<configuration>
<property>
<!-- hbase實際存放數據地方,這里是本地文件系統,生產環境一般HDFS地址,例如hdfs://namenode.example.org:8020/hbase -->
<name>hbase.rootdir</name>
<value>file:///home/itwild/hbase</value>
</property>
<property>
<!--
指定zookeeper的data目錄
目前hbase需要依賴zookeeper,HBase通過Zookeeper來做Master的高可用、RegionServer的監控、元數據的入口以及
集群配置的維護等工作
因為是Standalone,為了降低部署復雜度,啟動的時候也會啟zookeeper,指定zk data存儲目錄,實際使用大多用單獨的zk集群,一般不使用內置的zk
-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/itwild/zookeeper</value>
</property>
</configuration>
然后執行bin/start-hbase.sh
, 啟動成功了jps
命令可以看到HMaster
進程。
在standalone模式下,雖然看到的是一個JVM
實例,實際上啟了HMaster
、HRegionServer
、ZooKeeper
啟動成功,可打開HBase Web UI, http://localhost:16010
在HBase中創建表結構
-
執行
bin/hbase shell
進入一個交互的界面 (這里我們也可以類比執行mysql -uXXX -pXXX后進入) -
在交互界面里我們依次執行下面4條建表(table)語句
# opentsdb中那些metric數據就存在這張表中
# 這張表數據會很大,考慮到讀寫效率,我們注意到這張表就一個列族
create 'tsdb',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}
# opentsdb中建立metric name、tagK、tagV字面量與uid一一對應的表
# opentsdb不會存儲實際的字符串字面值
# 比如system.cpu.util的metric,會將system.cpu.util轉化為id(默認自增,后面介紹部分源碼的時候會有講到)后,存入HBase
# 這張表有id、name兩個列族,可通過id找到name,也可以通過name找到id
create 'tsdb-uid',{NAME => 'id', BLOOMFILTER => 'ROW'},{NAME => 'name', BLOOMFILTER => 'ROW'}
# 下面兩張表暫時可不必太關心,先創建出來就好
create 'tsdb-tree',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}
create 'tsdb-meta',{NAME => 'name', BLOOMFILTER => 'ROW'}
注意一下,這里的建表語句我有意把壓縮
(COMPRESSION
)選項去掉了,因為存儲用的是本地文件系統,有些壓縮可能是不支持的,生產環境使用HDFS
的建表語句可能是這樣的
create 'tsdb',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY'}
create 'tsdb-uid',{NAME => 'id', BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY'},{NAME => 'name', BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY'}
create 'tsdb-tree',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY'}
create 'tsdb-meta',{NAME => 'name', BLOOMFILTER => 'ROW', COMPRESSION => 'SNAPPY'}
- 在hbase shell的交互界面中執行
list
,即可看到上面創建的4張表
hbase(main):004:0> list
TABLE
tsdb
tsdb-meta
tsdb-tree
tsdb-uid
安裝配置並啟動opentsdb
下載地址:https://github.com/OpenTSDB/opentsdb/releases
這里centos7
系統,選擇下載opentsdb-2.4.0.noarch.rpm
包
- 執行
yum -y localinstall opentsdb-2.4.0.noarch.rpm
如果這里安裝報錯,可能需要vi /usr/bin/yum
臨時改一下python解析器的版本#!/usr/bin/python2.7
,
改過之后安裝過程中又有報錯,可能需要vi /usr/libexec/urlgrabber-ext-down
同樣臨時改一下python解析器的版本#!/usr/bin/python2.7
- 把opentsdb的服務注冊為系統服務,即可以用
systemctl status/start/stop/restart opentsdb
來查看控制
vi /usr/lib/systemd/system/opentsdb.service
添加以下內容
[Unit]
Description=OpenTSDB Service
[Service]
Type=forking
PrivateTmp=yes
ExecStart=/usr/share/opentsdb/etc/init.d/opentsdb start
ExecStop=/usr/share/opentsdb/etc/init.d/opentsdb stop
Restart=on-abort
然后你就發現可以用systemctl status opentsdb
了,不過現在服務還是dead
狀態
注意一下,默認opentsdb配置文件目錄:/etc/opentsdb/opentsdb.conf,默認opentsdb日志目錄:/var/log/opentsdb
- 修改
/etc/opentsdb/opentsdb.conf
配置文件
tsd.network.port = 4242
tsd.http.staticroot = /usr/share/opentsdb/static/
tsd.http.cachedir = /tmp/opentsdb
tsd.core.auto_create_metrics = true
tsd.core.plugin_path = /usr/share/opentsdb/plugins
# zookeeper的地址,即hbase依賴的zookeeper的地址,localhost:2181,localhost:2182,localhost:2183
tsd.storage.hbase.zk_quorum = localhost:2181
tsd.storage.fix_duplicates = true
tsd.http.request.enable_chunked = true
tsd.http.request.max_chunk = 4096000
tsd.storage.max_tags = 16
# 這里看到了我們上面在hbase中創建的4張表
tsd.storage.hbase.data_table = tsdb
tsd.storage.hbase.uid_table = tsdb-uid
tsd.storage.hbase.tree_table = tsdb-tree
tsd.storage.hbase.meta_table = tsdb-meta
# 下面幾個配置項到部分源碼解析的時候會有介紹,暫時可以先忽略
# tsd.query.skip_unresolved_tagvs = true
# hbase.rpc.timeout = 120000
- 啟動opentsdb,
systemctl start opentsdb
,成功的話,就可以打開opentsdb的界面了http://localhost:4242/
至此,有關opentsdb的安裝部署就完成了。后面我會結合opentsdb部分源碼分享一些探究性問題。祝君好運!
更新
- 2021.11.03 更新
好久沒接觸opentsdb了,也忘得差不多了,有網友問我為什么啟動opentsdb2.4.1失敗,我看了下 https://github.com/OpenTSDB/opentsdb/ ,2021-09-02發布的OpenTSDB 2.4.1
更新了一些東西:
其中官方增加了把opentsdb的服務注冊為系統服務的方式,具體見: https://github.com/OpenTSDB/opentsdb/blob/master/build-aux/rpm/systemd/opentsdb.service ,建議按照官方相應的版本部署安裝,以免出現問題!