當咱們談起」Carbon」的時候,咱們指的是一個或者多個carbon進程,Graphite的存儲後端就由這些進程所組成。在最簡單的安裝場景下,只有一個carbon進程carbon-cache.py。前端
這份文檔對carbon進程提供的功能,以及如何使用這些功能構建出複雜的存儲後端進行了簡要的概述。web
全部的carbon進程都使用一樣的協議監聽而且接收時間序列數據。可是不一樣的進程收到這些數據後,會進行一些不一樣的操做。正則表達式
carbon-cache.py接收各類協議的指標數據,而且儘量高效地把它們寫入磁盤。這就要求首先把接收到的指標緩存在RAM裏面,而後按期地使用底層的whisper庫把RAM裏面的指標數據寫入磁盤。數據庫
運行carbon-cache.py須要一些基本的配置文件:後端
carbon.conf緩存
配置文件裏面的[cache]部分的配置,告訴carbon-cache.py使用什麼端口[2003/2004/7002],什麼協議(newline delimited, pickle)以及網絡協議(TCP/UFP)來監聽。微信
storage-schema.conf網絡
這個配置文件裏面主要使用正則表達式定義了一些指標的收集規則,以及每一個.wsp文件存儲多長時間的數據。這些規則是給whispter數據庫使用的,當.wsp文件建立的時候,會使用到這些規則。app
隨着數據量的增長,一個carbon-cache.py實例可能知足不了IO負載。爲了擴容,能夠在一臺或者多臺機器上運行多個carbon-cache.py實例,carbon-cache.py前面使用carbom-aggregator.py或者carbon-relay.py進行負載均衡。負載均衡
警告:
若是客戶端鏈接carbon-cache.py的時候,出現鏈接失敗的錯誤,好比說鏈接被daemon拒絕,這種錯誤最多見的緣由是文件句柄不夠了。
在日誌文件裏面,若是你發現下面的日誌:
Could not accept new connection (EMFILE)
或者是下面的日誌:
exceptions.IOError: [Errno 24] Too many open files:
'/var/lib/graphite/whisper/systems/somehost/something.wsp'
這說明carbon-cache.py能夠打開的文件數須要增長了。不少系統裏面,單個進程能夠打開的最大文件數默認爲1024,在實際狀況下可能須要配置成8129或者更高,這取決於有多少個客戶端同時鏈接到carbon-cache.py的daemon上。
Linux系統上,能夠經過sysctl來設置系統全局文件句柄數的最大值,也能夠經過ulimit設置。
carbon-relay有兩個不一樣的功能:集羣和分區
當使用RELAY_METHOD = rules模式運行時,carbon-relay.py能夠代替carbon-cache.py,而後把全部收到的指標數據轉發給多個運行在後端的carbon-cache.py,這些後端的carbon-cache.py能夠運行在不一樣的主機上的不一樣端口上。
當使用RELAY_METHOD = consistent-hashing模式運行時,須要配置DESTINATIONS,DESTINATIONS定義了基於後端多個carbon-cache.py的分區策略。一樣的哈希列表能夠經過CARBONLINK_HOSTS 提供給graphite webapp,這樣對不一樣數據的查詢就能夠被分發到不一樣的後端carbon-cache上。
carbon-relay使用的配置文件:
carbon.conf
carbon-relay.py使用配置文件裏面的[relay]部分的配置,在這裏能夠配置監聽的主機,端口以及RELAY_METHOD。
relay-rules.conf
當使用 RELAY_METHOD = rules 啓動carbon-relay.py的時候, 這個配置文件裏面的pattern/servers組合定義了匹配相應正則表達式的指標數據應該發給後端的哪一個主機。
carbon-aggregator.py能夠運行在carbon-cache.py前面,用來緩存指標數據。當指標數據的發送頻率大於事先定義好的數據收集頻率時,carbon-aggregator.py就頗有用,使用carbon-aggregator.py能夠部署在前端用來下降IO負載和防止數據風暴。
carbon-aggregator.py使用的配置文件:
carbon.conf
carbon- aggregator.py使用配置文件裏面的[aggregator]部分的配置,在這裏能夠配置監聽的主機,端口以及目的地主機和端口。
aggregation-rules.conf
定義了一個時間間隔(秒)以及aggregation 函數(sum或者average),用來匹配收到的指標數據。在每一個時間間隔的最後,會把收到的多個指標數據聚合成一個指標數據,再發給carbon-cache.py。
-----------------------------------------------------
歡迎關注個人微信公衆號 ^_^