当咱们谈起”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。
-----------------------------------------------------
欢迎关注个人微信公众号 ^_^