介紹
最簡單的docker方式安裝就不介紹了,這裏講一下我在裝m3db單機多實例集羣時遇到的問題和爬坑過程
用途
爲了搭配exporter + prometheus + grafana使用,prometheus暫不支持分片。使用federate方式來做的話,架構比較複雜
m3db的優點:
- 可以分片,副本存儲,這個比influxdb方案要好很多。
- 可以數據聚合存儲,可以對前期的數據進行抽樣聚合壓縮降低存儲空間
m3db的缺點
- 剛開源,資料比較少
- 配置操作比較麻煩。與我接觸到的MySQL,Redis, MongoDB安裝方式不太一樣,但與之前維護的NDIR系統略有相似之處
爲甚麼不使用其他的方案:
- timescaleDB依賴PG數據庫,安裝和維護起來相對於我熟悉的MySQL差距很大。
- InfluxDB分片功能收費
- 其他的比較小衆或者不同時支持數據讀取和寫入
架構
這裏使用m3db官方網站上的架構圖
- m3db的seedNode和其他數據存儲節點的區別在於其內置運行ETCD服務
- etcd服務用於存儲整個集羣的元數據,類似於NDIR的zookeeper作用,也可也單獨運行
- coordinator相當於整個集羣的入口,類似於NDIR的IndexDispatcher的作用,類似於MongoDB的mongos的作用
安裝
架構
元數據
首先我們下載etcd,然後執行就可以,這裏我們暫時不使用集羣
nohup ./etcd &> /dev/null &
數據節點
這裏附上第一個節點的配置文件,需要注意的地方我會在下面用註釋的方式指出
coordinator:
listenAddress:
type: "config"
value: "0.0.0.0:7201" # 交互端口
local:
namespaces:
- namespace: default # 數據要存入的表
type: unaggregated # 數據類型
retention: 48h # 數據保存時間
metrics: # coordinator本身的metric
scope:
prefix: "coordinator"
prometheus:
handlerPath: /metrics
listenAddress: 0.0.0.0:7203 # until https://github.com/m3db/m3/issues/682 is resolved
sanitization: prometheus
samplingRate: 1.0
extended: none
tagOptions:
# Configuration setting for generating metric IDs from tags.
idScheme: quoted # 這個必須
db:
logging:
level: info
metrics:
prometheus:
handlerPath: /metrics
sanitization: prometheus
samplingRate: 1.0
extended: detailed
hostID: # 這裏實測後,其實可以理解爲nodeID
resolver: config # 單機多實例,這裏必須設置爲config,從文件中讀取
value: node1 # 這個實例的Id
config: # config段的配置都是和etcd相關的
service:
env: default_env
zone: embedded
service: m3db # 服務名。可以按照consul中的service進行理解
cacheDir: /data1/m3db/cache
etcdClusters:
- zone: embedded
endpoints:
- 127.0.0.1:2379
listenAddress: 0.0.0.0:9000
clusterListenAddress: 0.0.0.0:9001
httpNodeListenAddress: 0.0.0.0:9002
httpClusterListenAddress: 0.0.0.0:9003
debugListenAddress: 0.0.0.0:9004
client:
writeConsistencyLevel: majority # 寫一致性級別
readConsistencyLevel: unstrict_majority
gcPercentage: 100
writeNewSeriesAsync: true
writeNewSeriesLimitPerSecond: 1048576
writeNewSeriesBackoffDuration: 2ms
bootstrap:
bootstrappers: # 啓動順序
- filesystem
- commitlog
- peers
- uninitialized_topology
fs:
numProcessorsPerCPU: 0.125
cache:
series:
policy: lru
postingsList:
size: 262144
commitlog:
flushMaxBytes: 524288
flushEvery: 1s
blockSize: 10m
queue:
calculationType: fixed
size: 2097152
fs:
filePathPrefix: /data1/m3db # m3dbnode數據目錄