赞
踩
memcached 高性能内存对象缓存
memcache是一款开源的高性能分布式内存对象缓存系统,常用于做大型动态web服务器的中间件缓存。
mamcached做web服务的中间缓存示意图
当web服务器接收到请求需要处理动态页面元素时,通常要去数据库调用数据,但是通过memcached-api接口程序不去直接访问数据库,而去访问mamcached,再由memcached去访问数据库获取数据,获得到数据后自己缓存一分,在发送给web服务器一份,下次再进行通向的访问就不需要访问数据库,从而实现降低数据库的io压力。
memcached的存储数据方式
slab allocation
按组分配:每次先分配一个slab,大小相当于一个1M,在1M的这个大小内划分出等大小的chunk,该方法有效的解决了内存碎片问题,但也会因为不满足chunk的大小而造成空间浪费。
slab 按。。。分片
chunk 块
memcached的数据过期方式:随着数据越来越多内存不足的情况下,会清理一些数据。依据过期条件
LRU:最近最少使用的记录,会被清理
laxzy expiration:惰性过期,用get查看记录时间,从而决定是否过期。
memcached分布式缓存架构
每个memcached独立存在,数据分配根据路由算法选择存储的memcached。读取数据时根据保存时的路由算法选择相同的服务器来读取数据,将memcached做一个互相复制,可以确保能读取到数据。路由算法由api接口指定
路由算法
求余数hash算法
将key做hash运算得到一个整数,再进行哈希算法根据余数进行路由,这种方法简单,但只适合数据更改不太频繁的场景下,节点的变动也会有影响。
一致性hash算法
该算法适合动态环境,原理是按照hash算法把对应的key通过hash运算后映射成一个首尾相闭合的循坏,再把节点服务器也通过这种方法也映射到环中,顺时针计算将对象存储到离自己最近的机器中。
memcached部署
单节点的memcached部署
一台做memcached服务器,一台做lamp应用程序测试,宿主机用来访问验证。
安装过程
准备前奏
处理内核安全机制与防火墙
安装gcc
源码安装memcached
安装依赖工具
libevent
libevent是一款基于C语言编写的,轻量级的,开源的,高性能事件通知库,常用于构建高性能网络服务器,对高并发有很好的抗压能力。可移植性强。
本案例以libevent-2.18源码包为例
拉取到源码包后进行解压编译安装
只需要在配置时指定安装路径,其他一切照常即可。
./configure --prefix=/usr/local/libevent
本案例以memcached-1.5.1为例
在配置时指定配置参数
./configure \ --prefix=/usr/local/memcached \ --with-libevent=/usr/local/libevent
一个安装路径,一个指定libevent的安装路径。
编译与编译安装照常
可以编写memcached的服务控制脚本
#!/bin/bash CMD="/usr/local/memcached/bin/memcached" start(){ $CMD -d -m 128 -u root } stop(){ killall memcached; } ACTION=$1 case $ACTION in 'start') start;; 'stop') stop;; 'restart') stop sleep 2 start;; *) echo 'Usage:{start|stop|restart}' esac
测时前检查psmisc安装包是否安装,否则killall命令无法使用
赋予该脚本执行权,就可以利用该脚本进行控制
进行启动验证,查看是否监听了11211端口
部署memcached api客户端
搭建web网站,快速部署
需要利用网络资源
yum -y install httpd mariadb mariadb-server php php-devel php-mysql
之后启动相关服务
httpd
mariadb
设置数据库密码
mysqladmin -u root password 'pwd123'
编写php测试网页检查php能否正常工作
源码安装libmemcached
该软件提供了api的接口,以libmemcached1.0.18为例。
配置参数
./configure \ --prefix=/usr/local/libmemcached \ --with-memcached=/usr/local/memcached
第二条指定了memcached扩展的位置
源码包安装memcached扩展
本案例以memcached2.2.0为例
安装安装编译环境
zlib zlib-devel
解压进入cd目录
memcached源码包本身不带配置项需要借用php工具生成对应的配置文件
/usr/bin/phpize
该目录为yum方式安装的php工具的路径,如果是源码包安装通常会在/usr/local下的php安装目录中。
该命令需要autoconf软件包的支持,会在当前目录下生成对应的配置脚本.
生成配置文件后就可以进行配置了
./configure --with-php-config=/usr/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --disable-memcached-sasl --with-zlib-dir
--with-php-config=/usr/bin/php-config
指定php配置文件的路径
--with-libmemcached-dir=/usr/local/libmemcached
指定libmemcached的位置
--disable-memcached-sasl
禁用sasl认证机制
1.SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。
--with-zlib-dir
指定压缩函数库的位置,yum装的不需要指定路径,可以为空。
配置后进行编译安装,如果php是7的版本,编译安装会报错。
配置php让其支持memcached组件
yum安装的的配置文件位置/etc/php.ini
添加一行语句重启httpd即可
extension=memcached.so
如果是源码包安装的需要额外指定路径
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-zts-20121212/"
重启httpd之后通过phpinfo可以查看是否开启了memcached的扩展模块。
测试memcached-API功能
在web'服务器网页文档目录下编写测试文档
<?php $memcache = new Memcached(); $memcache->addServer('192.168.10.101', 11211); $memcache->set('key', 'Memcache test successful!', 0, 60); $result = $memcache->get('key'); unset($memcache); echo $result; ?>
最后访问时出现Memcache test successful!,表示api接口成功。
memcached作为非关系型数据库的基础操作
memcached本身没提供入口工具需要用telnet进行访问,需要下载。
添加键值对
add 键名 0 0 8 值
出现STORED表示存储成功
第一个0表示标记位 ,例如压缩或加密,通常为0
第二个0表示过期时间,为0表示永不过期,单位m 8表示值的字符长度,注意必须一样,少/多都不行。
回车后输入值
查看键值对
get 键名
查看键名的更新因子
gets 键名
通常最后一位数字表示更新因子
更新键值
set 键名 0 0 8
清除一条键值对
delete 键名
键名重新复制
cas 键名 0 0 8 更新因子数
追加数据
append 键名 0 0 追加字节数
清除所有数据
flush_all
查看状态信息
总结单节点部署,服务器与应用程序各自需要的软件包
服务器
libevent
memcached1.5.1
应用程序
除了本身必备的lamp以外
libmemcached
安装memcached扩展 2.2.0
memcached主主复制与高可用
memcached支持多个memcached之间相互复制,已解决memcached的容灾问题。
memcached提供了专门用于高可用配置的软件八包。本案例以memcached-1.2.8-repcached-2.2.tar.gz为例。
实验过程
处理内核安全机制与防火墙
两台主机构建高可用环境
实验步骤基本一样,因此可以同步执行
安装libevent
安装编译环境及服务控制脚本所需软件包
光盘的仓库安装gcc* psmisc
解压后配置项
指定安装路径即可
./configure --prefix=/usr/local/libevent
编译安装
make && make install
安装memcached-1.2.8-repcached-2.2.tar.gz
解压后配置项
./configure \ --prefix=/usr/local/memcached_replication \ --enable-replication \ --with-libevent=/usr/local/libevent
--enable-replication一定要启用,否则无法进行主主复制操作。
--with-libevent指定事件通知函数库
在进行编译前需要修改源代码
memcached.c
在55~60行去掉
#if defined(__FreeBSD__) || defined(__APPLE__)
#endif
之后进行编译安装
ln -s /usr/local/libevent/lib/libevent-2.1.so.6 /usr/lib64/
memcached的启动需要在该命令行下寻找函数
启动memcached
/usr/local/memcached_replication/bin/memcached -d -u root -m 128 -x 192.168.10.102
-d 以守护进程的方式允许
-u 指定运行用户
-x 指定复制对端服务器的地址,如果在编译中没有启用复制功能则会在报错没有该选项。
-m 最大内存使用量,默认64M
该位置需要修改为对方的IP
之后再两台服务器上查看是否开启服务进程与联系对端的进程。
利用telnet再一台主机上创建,在另一台主机上查询以验证复制功能。
memcached的高可用
准备前奏
关闭NetworkManager
不关闭会让vip无法漂移
安装keepalived
修改配置文件
router_id LVS_01
两台主机不同用于区分。
#vrrp_strict
注释掉严格模式,否则无法实现单播通信
vrrp_script check_down { ##定义要执行的脚本 script "/etc/keepalived/memcached.sh" ##脚本路径和名称 interval 1 ##间隔1秒执行一次 }
添加脚本单元,不单对整机进行检查,还要对服务进行检查。
#!/bin/bash # if [ $(ps -C memcached --no-header | wc -l) -eq 0 ]; then systemctl restart keepalived fi
state BACKUP
interface ens33
确定承载网卡
virtual_router_id 51
保证两台服务器用同一个id
priority 100
注意主服务器与从服务器的优先级
nopreempt
根据性能优劣来选择是否关闭抢占功能
virtual_ipaddress { 192.168.10.100 }
设定vip
track_script { check_down }
调用脚本
之后进行验证测试
需要修改访问测试页面的缓存服务器地址,如果搭建dns服务器则修改域名对应IP即可。
关闭memcached进行高可用检测
总结双节点部署memcached需要的软件包
memcached-1.2.8-repcached-2.2.tar.gz,memcached分布式高可用专用版软件包
实现高可用的keepalived
全文复制到xmind中即可形成条理性笔记。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。