一、Memcached
1.1、memcached简介
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
1.2、Memcached是如何工作的
Memcached的神奇来自两阶段哈希(two-stage hash)。Memcached就像一个巨大的、存
储了很多<key,value>对的哈希表。通过key,可以存储或查询任意的数据。客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。举个列子,假设有3个客户端1, 2, 3,3台memcached A, B, C:Client 1想把数据”tuletech”以key “foo”存储。Client 1首先参考节点列表(A, B, C),计算key “foo”的哈希值,假设memcached B被选中。接着,Client 1直接connect到memcached B,通过key “foo”把数据”tuletech”存储进去。Client 2使用与Client 1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的memcached列表(A, B, C)。于是,经过相同的哈希计算(阶段一),Client 2计算出key “foo”在memcached B上,然后它直接请求memcached B,得到数据”tuletech”。
1.3、memcached提供的操作
Memcached的客户端api接口提供了如下的方法存储和获取缓存数据,并且这节方法在不同的客户端都是一致的:
get(key):读取数据从缓存中,如果数据存在的话返回值,否则返回Null,nil,underfined。
Set(key,value [,expiry]):写入缓存数据value,如果key已经存在了就更新value值,否则就增加一个新的key/value对,如果设定了expiry值,超过设定expiry时间后键值对就失效,时间单位是秒。
Add(key,value, [,expiry]):添加键值对到缓存如果key不存在的话。
Replace(key ,value [,expiry]:替换已经存在的键值对。
Deleted(key [, time]):从缓存中删除键,如果提供一个时间,在这段时间内这个键是处于阻塞状态。
二、安装部署Memcached服务
2.1、安装libevent库
memcached使用libevent库实现网络连接服务,理论上可以处理无限多的连接,但是它和Apache不同,它更多的时候是面向稳定的持续连接的,所以它实际的并发能力是有限制的。
在保守情况下memcached的最大同时连接数为200,这和Linux线程能力有关系,这个数值是可以调整的。 关于libevent可以参考相关文档。memcachd有自己的内存分配算法和管理方式,它和共享内存没有关系,也没有共享内存的限制,通常情况下,每个memcached进程可以管理2GB的内存空间,如果需要更多的空间,可以增加进程数。
libevent下载地址:/distfiles/libevent-2.0.
什么叫管理# wget /distfiles/libevent-2.0.
然后是正常步骤的解压安装:
# tar zxvf lilbevent-2.0.
# cd libevent-2.0.16-stable
# ./configure –prefix = /usr/local/libvent-2.0.16-stable
# make
#make install
测试libevent是否安装成功:
# ls –al /usr/local/libevent-2.0.16-stable/lib | grep libevent
修改配置文件把libevent库加入f文件
# nano /etc/f 加入/usr/local/libevent-2.0.16-stable/lib
运行 ldconfig否则运行memcached会报错,提示找不到so文件
2.2、安装memcached:
memcached下载地址:/files/memcached-1.4.
# wget /files/memcached-1.4.
#tar memcached-1.4.
# cd memcached-1.4.13
# ./configure
# make &make install
测试是否成功安装memcached:
2.3、编译安装magent代理:
养成教育主题班会
magent是一款开源的memcached代理服务器软件,magent是解决memcached的单点故障的解决方案;magent的hash算法:magent采用的是:Consistent Hashing原理,Consistent Hashing如下所示:首先求出memcached服务器(节点)的哈希值, 并将其配置到0~232的圆(continuum)上。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。 如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。
编译安装magent:
# wget /files/magent-0.
# mkdir magent
# cd magent/
# tar zxvf magent-0.
# cd magent/
# nano magent.c 加入如下宏定义:
沉香油
(# ifndef SSIZE_MAX
# define SSIZE__MAX 32767
# endif)否则编译会报错:未指定最大值
magent.c:729: error: ‘SSIZE_MAX’ undeclared (first u in this function)
指数函数性质#/sbin/ldconfig
# d -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
# make
# cp magent /usr/bin/magent
测试magent代理服务器是否安装成功:
root@ubuntu:~# magent
plea provide -s "ip:port" argument
操死老师
memcached agent v0.5 Build-Date: Feb 21 2012 16:39:44
Usage:
-h this message
-u uid
-g gid
-p port, default is 11211. (0 to disable tcp support)
-s ip:port, t memcached rver ip and port
通讯报道怎么写>交通宣传标语 -b ip:port, t backup memcached rver ip and port
-l ip, local bind ip address, default is 0.0.0.0
-n number, t max connections, default is 4096
-D don't go to background
辰五行
-k u ketama key allocation algorithm
-f file, unix socket path to listen on. default is off
-i number, t max keep alive connections for one memcached rver, default is 20
-v verbo
三、memcached集群测试
3.1、测试环境
1.Memcached提供了很多客户端api,可供java,c,c++,python…的客户端的调用,在这里我们用python这门语法优雅功能强大的语言进行此次测试。
首先安装python lib库,运行如下命令:
# sudo apt-get install python
自动安装完成后,默认版本为2.7.2。
测试是否正确安装:
接着安装这是memcached的客户端api,安装好了之后直接用python操作调用memcached。
下载地址:ftp:///pub/python-memcached/
安装如下:
# tar –zxvf
# cd python-memcached-latest
# python tup.py install
测试安装是否成功:
若 import memcache没有报错则导入无误。
2.memcached环境已经部署完毕,接下来分别在四台虚拟linux服务器上运行测试任务:
分别在四台台主机上启动配置相同的memcached服务:
在主机192.168.1.108上启动magent代理服务器: