一、php+memcache和openresty+memcache

1、php+memcache

memcache是一个高性能的分布师内存对象缓存系统,通过在内存里维护一个巨大的hash表,能够用来存储各种格式的数据。可以类比于mysql这样的服务,而php扩展memcache实际上是是连接memcahe的方式,一般的使用目的是通过缓存数据查询结果,减少终端的访问次数,以提高动态web应用的速度,提高扩展性能。

1)将memcache加入php模块功能列表;mamecash作缓存其加速作用

先将php写入环境变量方便后续操作

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

解压memcaache包;phpize扩展;../configure编译

phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

make $$ make install完成安装

进入指定目录查看有没有memcache.so 

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

并进入php.int配置文件将extension值打开

extension = “memcache.so”

php -m 过滤查看是否成功

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

2)安装memcache服务

yum install -y memcached并启动/etc/init.d/memcached start

查看端口信息,如图;memcached监听11211端口

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

3)将上面解包的配置文件复制到nginx发布目录下

cp memcache.php  example.php         /usr/local/lnmp/nginx/html/

完成后修改进入/usr/local/lnmp/nginx/html/目录下,修改memcache.php配置文件,如图

输入用户和密码,指定本机ip和11211端口

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

4)完成后网页测试查看

登陆查看如图

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

通过刷新example.php网页可以看到命中率的数据更新,几乎接近100%,数据全部来源于缓存

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


2、openresty+memcache

这里做一个压力测试:

真机测试,记录错误和传输速率数据

1)ab -c 10 -n 5000 http://172.25.32.10/index.php     php应用层程序

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

2)ab -c 10 -n 5000 http://172.25.32.10/example.php   作缓存

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

上面可以看到有的有错误产生而且速度很慢,因为:

在php+memcache模块中,即使memcahce命中,还是要进入memcahce生命周期,效率并不高,因此一种更高效的缓存策略是nginx直接访问memcache即使用openresty,并用$uri和$args等nginx内置变量设定缓存key规则,这样当命中缓存时,nginx可以跳过通过fastcgi和php通信过程,直接从memcache中获取数据并返回,提高效率。

nginx本身具有高并发的特点,如果将数据缓存放在php后面,则客户请求发给nginx,nginx给php-fpm处理,然后将获取的数据缓存到memcache上,则nginx只有在等待php-fpm处理结束后,必定会影响数据传输速率,如果将memcache直接与nginx连接,当客户发出请求时,nginx直接从memcahce中将数据出给客户端,即可提高速率,这里我们使用openresty来实现。

2)源码包安装openresty

先停掉nginx  -s stop

./configure  gmake&&gmake install 安装

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

3)更改/usr/local/openresty/nginx/conf/nginx.conf的配置文件,如图

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

4)完成后测试访问

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


5)将要做压测的两个页面复制到当前nginx目录下

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

6)再次更改/usr/local/openresty/nginx/conf/nginx.conf配置文件

设定负载均衡的服务器列表,可以指定多个服务器。

keepalive指令是指http-upstream-keeplive-module提供的功能,这里我们最大保持512个立即不关闭的连接用于提高性能

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


这里为memc-nginx-module配置location,我们配置为/memc,所有请求都通过这个locaion来操作memcache,memc-nginx-module存取   

memcache是基于http method语义的,使http的GET方法表示get,PUT方法表示set,DELETE方法表示delete。internal表示只接受内部网络,不接受外部http请求,如果需要接受外部访问 ,可以使用allow和deny来指令控制权限。$memc_key表示以什么key,这里直接使用nginx内置的$query_string来作为key,$memc_exptime表示缓存失效时间,以秒记,实际应用中根据具体情况设置。

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

~ \.php$这个location配置了缓存,这表示所有以.php结尾的请求结果都会被缓存。srcache_fetch表示注册一个输入拦截处理器到location,这个配置进入时将被执行;而srcache_store表示注册一个输出拦截器到location,当location执行完成输出时会被执行。

完成以上配置后,相当于对nginx增加了这些逻辑:当所有请求以"'.php"结尾时,首先到memcahce中查询有没有以$url$args为key的数据,如果有则返回,否则执行location的逻辑。

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

编辑完成

nginx  -t检查文件错误

nginx- s reload 读取

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

7)再次压力测试,观察报错和速率情况

ab -c 10 -n 5000 http://172.25.32.10/index.php

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

ab -c 10 -n 5000 http://172.25.32.10/example.php

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

很明显保存减少速率提升


二、memcache+tomcat+nginx实现负载均衡及session共享

部署环境介绍

server10: nginx、memcache、tomcat

server11:tomcat

1)tomcat要在java环境下

安装jdk(java必须要的)

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

2)将java和javac写入全局变量

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享memcache应用及memcache+tomcat+nginx实现负载均衡及session共享memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

3)编写一个test脚本,检测

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

4)tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/ 解包

ln -s apache-tomcat-7.0.37/ tomcat  作链接

到/usr/local/tomcat/bin/

./startup.sh    启动服务

网页测试查看

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


server11上同样操作


两个tomcat实现负载均衡

1)/usr/local/openresty/nginx/conf编辑nginx.conf  以jsp结尾的会去匹配本机的8080端口

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

重新加载/usr/local/openresty/nginx/conf/sbin/nginx -s reload
访问页面172.25.77.10/index.jsp

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

这个页面的实际位置在/usr/local/tomcat/webapps/ROOT/index.jsp

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

2)在此默认发布目录下编辑一个测试网页

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

网页测试查看

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

3)实现负载均衡编辑server10的nginx.conf加入upstream

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

并将jsp映射url路径为tomcat

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

将测试页面修改并发送给server11,server11修改为server2

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

测试查看如图:实现负载均衡

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


memcache+tomcat+nginx实现session共享

1)在tomcat默认发布目录下先编辑存储用户信息的网页

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

网页测试如图

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

2)Sticky工作原理 Sticky是nginx的一个模块,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上。就是基于cookie的一种负载均衡解决方案,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。请求来了,服务器发个cookie,并说:下次来带上,直接来找我

但是stick nginx-1.10支持,我这里装的1.17所以编译安装nginx-1.10,

先停止nginx服务

编译的时候指定sticky的解压所在目录./configure  --prefix=/usr/local/lnmp/nginx  --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx --add-module=/mnt/nginx-sticky-module-ng

将之前改的配置文件覆盖掉到安装的ngxin配置文件

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

编辑这个配置文件,如下图

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

完成后检查错误启动nginx

测试查看日志发现:

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

在sticky并做负载均衡是不指定算法则默认是轮询会导致用户在提交请求后信息会被存储在另一个tomcat如果再次提交之前的信息就会丢失

3)nginx和tomcat和memcache实现交叉存储 (自己的大脑和对方的笔记本)

在server11安装memcached 启动memcached

停止server10和server11的tomcat

server10和server11将/lib下面的拷进去 删除重复的tc6

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

配置配置文件即:当server10在serber11的memcache上进行存储,当server10出故障时,server11会接替server10工作,读取server10在server11memcache的缓存,保证文件不丢失

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享


server11同样交叉存储

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

启动tomcat服务,并测试查看:

首先可以看到此时服务端是server11,但保存节点是server10的n1

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

完成输入后shutdown掉server11,此时server10接管服务,并且读取自己的节点n1的memcache缓存,保证文件不丢失,继续存储,实现了负载均衡和session共享

memcache应用及memcache+tomcat+nginx实现负载均衡及session共享

相关文章: