memcache缓存、session共享和会话保持

一.memcache的使用

1.mencache的简介
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布。

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

2.安装软件

因为接下来要用到php命令,所以我们将命令加入到环境变量中
vim ~/.bash_profile				##修改环境变量文件
source ~/.bash_profile			##使修改生效

在这里插入图片描述

在这里插入图片描述
2.进入memcache-2.2.5目录下,会发现没有configuer文件,说明不具备编译环境
创建一个预编译环境并进行编译汇编memcache源码包

[root@server1 memcache-2.2.5]# phpize
[root@server1 memcache-2.2.5]# ls

在这里插入图片描述3.编译、安装
在这里插入图片描述
在这里插入图片描述
4.修改php配置文件,添加memcache模块并重启php服务

vim /usr/local/lnmp/php/etc/php.ini
/etc/init.d/php-ftm reload

在这里插入图片描述
在这里插入图片描述
5.查看php相关的mysql和memcache模块有哪些
在这里插入图片描述6.安装memcached并更改配置文件中的内容,使只可以让本机访问,然后重启服务

[root@server1 ~]# yum install memcached -y
[root@server1 ~]# vim /etc/sysconfig/memcached 
[root@server1 ~]# /etc/init.d/memcached start
[root@server1 ~]# netstat -tnlp

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
7.再次更改memcached的配置文件中的内容,使所有主机都可以进行访问
在这里插入图片描述在这里插入图片描述
8.安装telnet
在这里插入图片描述
9.在telnet中输入内容(简单使用命令)

stats	#状态为0的表示没有被用
set name 0 0 6	#设置name的编号为0,没有缓存时间,且最长最多6个字符
westos	#输入westos
westosssss	#输入westosssss
get name	#得到name
delete name	#删除name	
get name	#得到name
quit	#退出

在这里插入图片描述在这里插入图片描述在这里插入图片描述
9.在telnet中再次输入内容(测试其缓存时间是否有效)
在这里插入图片描述
10.拷贝测试页,并修改配置文件

[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# ls
[root@server1 memcache-2.2.5]# cp example.php memcache.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
[root@server1 html]# vim memcache.php 

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述在这里插入图片描述

[root@server1 ~]# yum search httpd-tools
[root@server1 ~]# yum install httpd-tools.x86_64 -y

在这里插入图片描述
测试2.压力测试:当访问index.php页面(不用缓存)5000次(10次并发,5000次请求)需要的时间以及别的参数
在这里插入图片描述在这里插入图片描述

测试3.压力测试:当访问example.php页面(使用缓存)5000次(10次并发,5000次请求)需要的时间以及别的参数,会发现不仅速度提高了,且错误率也大大降低了
在这里插入图片描述
在这里插入图片描述

二.OpenResty的应用

概念解释:

  1. OPenResty是一个基于Nginx与Lua的高性能Web平台,用于方便的搭建能够处理超高并发,扩展性极高的动态Web应用,Web服务和动态网关。通过汇聚各种设计精良的Nginx模块,从而将Nginx有效的变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调用Nginx支持的各种C以及Lua模块,快速构造出足以胜任10k乃至1000k以上的单机并发连接的高性能Web应用系统
    2.其目标是让Web服务直接跑在Nginx服务内部,充分利用Nginx的非阻塞I/O模型,不仅仅对HTTP客户端请求,甚至于对远程后端诸如MYSQL,PostgreSQL,Memcached以及Redis等都进行一致的高性能响应

1.关闭上个实验的nginx

nginx -s stop

在这里插入图片描述
2.解压openresty,编译、安装

[root@server1 ~]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ls
#默认装在/usr/local下,不需要额外的参数
[root@server1 openresty-1.13.6.1]# ./configure 
#编译的可能会比较慢,因为有很多第三方模块,编译和安装和之前的不一样,可以在预编译环境创建好之后根据内容查看
[root@server1 openresty-1.13.6.1]# gmake && gmake install	

在这里插入图片描述在这里插入图片描述
3.将之前的测试页面以及监控页面复制到openresty的指定目录下
在这里插入图片描述
3.修改openresty的配置文件,并检测配置文件是否有语法错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

分析:
1.upstream属于handler,只是它不产生自己的内容,而是通过请求后端服务器得到的内容,所以才称为upstream(上游),请求并取得响应内容的整个过程已经被封装到nginx内部,所以upstream模块只需要开发若该回调函数,完成构造请求和解析响应等具体的工作,nginx将memcache缓存前移,客户端请求到来,先查看nginx缓存
2.所有请求都通过请求这个location来操作 memcache,memc-nginx-module存取memcache是基于http method语义的,
3.使用http的GET方法表示get、PUT方法表示set、这里我们将/memc设为internal表示只接受内部访问
4.不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指令控制权限。比较重要的是memckey这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的query_string来作为key,memcexptime表示缓存失效时间,以秒记。5.这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。6.为“ .phpmemce​xptime表示缓存失效时间,以秒记。5.这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。6.为“ .php”这个location配置了缓存,这表示所有以“.php”结尾的请求都会结果被缓存,当然这里只是示例需要,实际中一般不会这么配,而是为特定需要缓存的location配置缓存。

4.查看是否开启
在这里插入图片描述
在这里插入图片描述
测试1:浏览器访问172.25.16.1
在这里插入图片描述
测试2:压力测试。发现在使用operesty后访问速度大大加快,而且错误未0.

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

在这里插入图片描述
在这里插入图片描述

三.tomcat的安装和使用

1.tomcat的介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

2.获取tomcat,并安装

软件包的获取可以在官网tomcat.apache.org上下载,需要注意的是他的运行需要安装jdk,java的编译环境,可以在rpms等官网上
下载,需要注意的是版本的对应,本机使用的版本为jdk-7u79-linux-x64.tar.gz和apache-tomcat-7.0.37.tar.gz
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/		##-C解压到指定目录
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/		
cd /usr/local/							
ln -s apache-tomcat-7.0.37 tomcat						##为了方便我们的操作我们给tomcat的解压目录建立一个软链接

在这里插入图片描述
2.配置java的环境变量并使其生效

vim /etc/profile
source /etc/profile

在这里插入图片描述
在这里插入图片描述3.配置文件的修改

cd /usr/local/tomcat/webapps/ROOT			##webapps是默认发布目录,ROOT是本机的默认发布目录

vim /usr/local/lnmp/openresty/nginx/conf/nginx.conf			##修改openresty配置文件
/usr/local/lnmp/openresty/nginx/sbin/nginx -s reload		##重新加载服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.打开tomcat
在这里插入图片描述

5.编写测试文件test.jsp
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.在tomcat中实现Session共享

1.再配置一台虚拟机来交叉存储,启用server2

[root@server1 local]# scp -r ./apache-tomcat-7.0.37/ root@172.25.16.2:/usr/local/ ##把配置好的tomcat发给server2
[root@server1 local]# scp  -r jdk1.7.0_79/ root@172.25.16.2:/usr/local/		##把配置好的jdk环境发给server2

server2的配置:
vim /etc/profile			##跟server1一样配置环境变量
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile			##使配置生效
java -version				##查看java版本
ln -s /usr/local/apache-tomcat-7.0.37 /usr/local/tomcat			##给tomcat目录创建一个软链接
/usr/local/tomcat/bin/startup.sh			##启动服务,但是一般不会报错
netstat -tnlp | grep java					##先查看端口是否被服务启用
vim /usr/local/tomcat/logs/catalina.out		##服务还有问题就查看这个日志,里面有详细的服务运行信息,所以一般要限制这个
										##日志的大小,不然它会一只占用越来越大的空间,此处我们没有那么多操作所以不限制

在这里插入图片描述在这里插入图片描述

2.配置一个反向代理

获取一个java写的动态会话窗口test.jsp,
scp /usr/local/tomcat/webapps/ROOT/test.jsp root@172.25.16.2:/usr/local/tomcat/webapps/ROOT/	##发给server2
/usr/local/tomcat/bin/shutdown.sh		##没有重启命令,只能先关闭再打开服务,两边都重启
/usr/local/tomcat/bin/startup.sh

server1:  vim /usr/local/lnmp/openresty/nginx/conf/nginx.conf  	##做一个反向代理来切换会话窗口
/usr/local/lnmp/openresty/nginx/sbin/nginx -s reload			##重启服务

在这里插入图片描述在这里插入图片描述在这里插入图片描述
测试:

访问我们java编写的动态窗口会话页面
可以保存信息,但是再次填写后ip轮询,原来的信息消失

在这里插入图片描述
在这里插入图片描述

四、会话保持的实现(sticky)

因为现在最新版只有付费的nginxplus里面才有这个组件,所以我们选取老版本的nginx来实现。
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

本机使用的是nginx-sticky-module-ng.tar.gz和nginx-1.10.1.tar.gz
tar zxf nginx-1.10.1.tar.gz				##解压安装包
tar zxf nginx-sticky-module-ng.tar.gz
/usr/local/lnmp/nginx/sbin/nginx -V		##查看原来安装的nginx的安装信息
./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=/root/nginx-sticky-module-ng
##添加上sticky模块,生成makefile
make && make install					##编译和安装

cd /usr/local/lnmp/nginx/				##进入安装后的目录
./sbin/nginx -V							##确认版本信息和添加模块
cp /usr/local/lnmp/openresty/nginx/conf/nginx.conf ./conf/nginx.conf		##把写好的配置文件复制过来
/usr/local/lnmp/openresty/nginx/sbin/nginx -s stop							##停止openresty

vim /usr/local/lnmp/nginx/conf/nginx.conf		##修改配置文件
/usr/local/lnmp/nginx/sbin/nginx				##启动服务

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
测试:在这里插入图片描述

在这里插入图片描述

问题:若server1的tomcat出现问题,server2还是不能保存信息

解决方法:实现session共享存储,让server1出问题时,server2仍可以访问到信息

在server2上安装memcache
yum install memcached -y				##安装软件爱你

在server1和server2上的操作
获取一个函数库,其中的jar文件全部拷贝到/usr/local/tomcat/lib下,
rm -fr memcached-session-manager-tc6-1.6.3.jar			##删除这个jar
##可以在网上找到

在这里插入图片描述

vim /usr/local/tomcat/conf/context.conf		##添加策略(server1和server都要添加)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.21.1:11211,n2:172.25.21.2:11211"
failoverNodes="n1" 
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

/etc/init.d/memcached start					##都启动memcache缓存服务
/usr/local/tomcat/bin/shutdown.sh			##重启tomcat
/usr/local/tomcat/bin/startup.sh

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值