MemCached
一、什么是MemCached
Memcache是一套开源
、高性能
的分布式的内存对象缓存系统
,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。
Memcache将所有数据存储在内存中,并在内存里维护一个统一的巨大的Hash表,它能存储任意类型的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取
,从而大大提高读取速度。
二、为什么要用MemCached?
先看一个问题,这个问题在大并发,高负载的网站中必须考虑!大家思考如何让速度更快。
解决方案:
传统的RDBMS
页面静态化
MemCached缓存技术
三、MemCached的基本原理和体系结构
简单的说: memcached就是在内存中维护一张巨大的hash表,通过自己的一套路由算法
来维护数据的操作。
四、MemCached数据的存储方式和过期
4.1 数据存储方式:Slab Allocation即:按组分配内存
(1)每次先分配一个Slab,相当于一个page,大小1M。
(2)然后在1M的空间里根据内容再划分相同大小的chunk。
(3)优点是:最大限度的利用内存,避免产生内存碎片 。
(4)缺点是:会造成内存的浪费。
4.2 数据过期方式
(1)懒过期方式(Lazy Expiration):
memcached内部不监视数据是否过期,而是get时查看记录时间,检查是否已经过期,这叫惰性过期。
(2)LRU算法:采用最近最少使用算法淘汰内存中的数据
五、MemCached安装与部署
实验环境:
OracleLinux-R6-U6-Server-i386-dvd.iso
memcached-1.4.25.tar.gz
memcached-1.2.8-repcached-2.2.tar.gz
libevent-2.0.21-stable.tar.gz
spymemcached-2.10.3.jar
(1)安装gcc编译器
yum install gcc
(2)安装Libevent
确认是否已经安装?并删除旧版本
rpm -qa | grep libevent
rpm -e libevent-1.4.13-4.el6.i686 --nodeps
解压:
tar -zxvf libevent-2.0.21-stable.tar.gz
安装到/root/training/libevent目录
./configure --prefix=/root/training/libevent
make
make install
(3)安装MemCached
(4)启动MemCached:memcached -h 帮助信息
启动命令:./memcached -u root -d -m 128
-p:指定端口 默认:11211
-u:指定用户名(root用户必须使用该选项)
-m:分配的内存,默认:64M
-c:最大并发连接,默认1024
-d:启动一个守护进程
六、操作MemCached
6.1 Telnet方式(命令行方式)
统计信息的命令:
stats
stats items
stats slabs
6.2 Java客户端方式
需要添加memcached相关jar包:
链接:http://www.java2s.com/Code/Jar/s/Downloadspymemcached290jar.htm
(1)插入数据:
(2)查询数据:
(3)基于客户端的分布式插入数据:
七、MemCached的路由算法
7.1 求余数hash算法
用key做hash运算得到一个整数,根据余数路由
。
例如:服务器端有三台MemCached服务器
根据key,做hash运算
7%3=1,那么就路由到第2台服务器。
6%3=0,那么路由到第1台服务器
5%3=2,那么路由到第3台服务器
优点:数据分布均衡在多台服务器中,适合大多数据需求。
缺点:如果需要扩容或者有宕机的情况,会造成数据的丢失。
7.2 一致性hash算法
(1)基本原理:
(2)一致性hash算法下扩容:
(3)一致性hash算法下DOWN机:
八、MemCached的主主复制和HA
8.1 Memcached主主复制
(1)安装具有复制功能的memcached版本
tar zxvf memcached-1.2.8-repcached-2.2.tar.gz
cd memcached-1.2.8-repcached-2.2
./configure --prefix=/root/training/memcached_replication
--with-libevent=/root/training/libevent/ --enable-replication
make
make install
make时会出现以下错误:
解决办法,编辑memcached.c文件如下:
修改成如下形式:
(2)启动第一台MemCached,使用-x
指定对端服务器的地址
./memcached -d -u root -m 128 -x 192.168.137.12
(3)启动第二台MemCached,使用-x指定对端服务器的地址
./memcached -d -u root -m 128 -x 192.168.137.11
出现以下错误:
解决办法:
查找 libevent-2.0.so.5
whereis libevent-2.0.so.5
使用ldd命令查看memcached命令,发现找不到
建立软链接
ln -s /root/training/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
8.2 Memcached的HA(High Availablity)
Keepalived是一个交换机制
的软件。Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
利用Keepalived实现MemCached的主主复制高可用架构:
Keepalived在memcached主服务器产生一个虚拟IP(VIP)
Keepalived可以通过不断的检测memcached主服务器的11211端口是否正常工作,
如果发现 memcached Down机,虚拟IP就从主服务器移到从服务器
(1)配置Keepalived(每台机器都要配置):
rpm -ivh keepalived-1.2.13-4.el6.i686.rpm
配置:主从节点都要配置
,配置文件:
vi /etc/keepalived/keepalived.conf
//主节点配置信息
! Configuration File for keepalived
global_defs {
notification_email {
collen_training@126.com
}
notification_email_from collen_training@126.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.88
}
}
//从节点配置信息
! Configuration File for keepalived
global_defs {
notification_email {
collen_training@126.com
}
notification_email_from collen_training@126.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.88
}
}
(2)验证Keepalived:
//查看虚拟ip地址
ip ad sh