天天看点

Memcache全面解析并实现zabbix监控

Memcached是什么? 

Memcached的特征 

   a.协议简单,Memcached使用简单的文本行协议 

   b.基于libevent的事件处理 

   c.内置内存存储方式 

   d.每个Memcached服务器之间互不通信 

   e.Memcached使用key-value的方式进行储存

Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等等。 

Memcached的内存存储 

由于传统的内存分配使用malloc函数和free函数进行内存分配,导致内存产生的大量的内存碎片,无法被利用。 

Memcached采用Slab Allocator实现内存的分配。 

Slab Allocator的原理:按照预先规定将内存分配成大小特定且不等的内存快(chunk),并把大小相等的内存快组织成组(slab class)。 

Memcached如何通过Slab Allocator实现数据的缓存? 

当一个数据到达Memcached时,Memcached根据数据的大小去选择大小适宜的slab,在通过chunk的空闲列表,选中出chunk将数据缓存上去。 

Memcached在分配内存过程中怎么实现不等长的内存划分呢? 

Memcached在启动时会指定growth factor因子,来控制每个slab之间的差异,并不是随意进行划分的。如:growth factor因子为2,前一个slab class中的每个chunk的大小为2,则下一个slab class中的每一个chunk的大小为4,就这样一次类推。默认Memcahed设置中growth factor的值为1.25

Memcached的超时原理 

Memcached怎么去监控自己在内存中缓存的资源是否过期,其采用Lazy Expiration,Memcached不会自动的去监控并检测缓存在内存中的内容是否过期,当一个请求到来时,Memcached才会去检查请求资源的记录时间戳,检查记录是否过期,如没有过期再进行返回。 

Memcached的删除的原理 

Memcached的分布式调度 

Memcache全面解析并实现zabbix监控

假如web服务器要缓存一个数据库到Memcached服务器,那么要缓存在那个上呢? 

其实Memcached API提供了几个调度算法 

a.余数计算: 

把将要缓存在Memcached上的记录的key值进行C32计算,再将计算结果与node数+1进行取余,得到的结果就是此数据要缓存的Memcached服务器。 

缺点: 

当进行增加或者移除节点时,缓存数据进行重组,无法获取与保存时相同的服务器,从而影响缓存的命中率。 

b.Consistent hash: 

将node节点的主机名进行HASH计算,并配置在0~2^23的圆上,再将资源的key值进行HASH计算,并映射在圆上,从映射位置顺时针查找,找到的第一个服务器就将数据保存在此服务器上。 

Memcache全面解析并实现zabbix监控

Memcached的安装方式

Memcached的启动

Memcached状态查询

使用zabbix监听memcached 

监听数据:命中多少,总过多少资源,多少次获取,多少次进行添加,读取字节书,写入字节数 

1.在Memached的主机上安装zabbix

2.在另一台主机上安装zabbix-server并启动在web页面进行配置 

configure->host->item(memcached host) 

定义item: 

Memcache全面解析并实现zabbix监控
Memcache全面解析并实现zabbix监控
Memcache全面解析并实现zabbix监控

定义Graphs 

Memcache全面解析并实现zabbix监控
Memcache全面解析并实现zabbix监控

本文转自lnsaneLlinux博客51CTO博客,原文链接http://blog.51cto.com/lnsane784/1928393如需转载请自行联系原作者

Insane_linux