1. LNMP+memcached
环境:
server1:192.168.1.11
lnmp架构,参考上一片文章https://blog.youkuaiyun.com/qq_36023219/article/details/105909836
目的:
测试memcached,体会memcached作用
步骤:
1. 安装memcached
yum install memcached.x86_64 -y
2. 安装php的memcache扩展
获取安装包
/usr/local/lnmp/php/bin/phpize
没有autoconf,通过yum仓库安装
yum install -y autoconf
再通过phpize命令生成configure
编译(指定php配置)
./configure --with-php-config=/usr/local/lnmp/php/bin/php-config
缺少库,安装对应库
yum install libmemcached-devel-1.0.16-5.el7.x86_64.rpm -y
再编译,成功
安装
make && make install
更改配置文件php.ini,引入刚安装的扩展
重载php
systemctl reload php-fpm.service ##我配置了php的启动脚本,所以可以直接使用系统命令重载,具体的可以看我上一篇文章
可以查看phpinfo,memcached扩展安装成功
也可以通过php -m参数查看模块
/usr/local/lnmp/php/bin/php -m | grep memcache
测试:
1. nginx发布目录创建php页面 使用memcached
注意: php的memcached扩展有两个,分别是memcache和memcached,我使用的是memcached扩展,依赖libmemcached
两个有区别,添加ip和端口不一样,前者使用connect,后者通过addServer
vim test-server.php
2. 为了方便看效果copy了memcache的php页面
vim memcache.php
浏览器访问
安装ab工具
yum install httpd-tools-2.4.6-88.el7.x86_64 -y
测试(10并发,1000次请求)访问index.php(未使用memcached)
测试访问test-server.php(使用memcached)
可以看到使用memcached的处理请求的速度和成功率明显提升
2. nginx + tomcat
环境:
server1:192.168.1.11
server2:192.168.1.12
目的:
在server1上nginx为代理,负载均衡到server1和server2的tomcat上,利用memcache以及tomcat-memcached-session-manager实现session共享
步骤:
server1安装tomcat和jdk 配置JDK环境变量
JDK解压即可
添加JDK环境变量
vim /etc/profile
查看java版本
解压tomcat(默认8080端口)
启动tomcat
测试,浏览器直接访问
配置server2 tomcat jdk(和server1一致)
nginx配置jsp请求负载均衡到server1和server2的tomcat
vim conf/nginx.conf
http添加
server添加
测试访问nginx请求jsp资源
可以看到,虽然访问到了,但没有图片,查看日志
在jsp页面中对于静态资源的加载,我们使用的是相对路径,我们请求的url是nginx代理服务器,所以对于相对路径的资源,默认在nginx的发布目录寻找 可以将tomcat的ROOT中的静态资源部署在nginx中,这样就可以加载.
静态资源复制过去后,还是失败,发现是权限不够
chmod 777 html/*
可以看到成功访问
写jsp测试页面
server1
server2
测试访问
负载均衡已经生效
配置nginx的sticky模块(第三方,网上下载的工具)
注意:
1. sticky是为了让同一用户的请求,固定在当前服务器,通过cookie来实现
2. ip_hash也可以将请求固定,不过ip_hash是根据ip,如果请求来自统一局域网,那么负载均衡就失去了意义
所以这里使用sticky,通过cookie来区分不同用户身份
步骤:
1. 写测试页面,部署到server1和server2的tomcat发布目录
测试访问
输入数据 user1 111
再输入数据 user2 222
可以看到,因为负载均衡原因,请求在server1和server2来回跳转,导致session信息丢失
下载sticky插件解压
重新编译安装nginx(将插件编译进去,这里最好将原来的nginx备份,因为是实验,所以我没有备份)
./configure --prefix=/usr/local/lnmp/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--user=nginx --group=nginx \
--add-module=/server/tools/nginx-sticky-module-ng
make && make install
更改nginx配置文件
重启nginx服务
测试
再输入
可以看到,访问的都是server2,session保存了下来
到此为止还有一个问题,那就是正在session2输入时,突然server2服务器down了,这时跳转到server1,session不会保存下来
实验:
关闭server2的tomcat继续输入
可以看到之前session中的信息没有了
所以这里可以通过memcached来保存session,实现session共享
下载memcached-session共享的jar包,实现session共享
当用户与server1通信时(session),server1突然down了,那么会话数据会消失,这极大影响客户感知,所以这里要作session共享,将session共享到memcached(交叉存储,即访问server1时,存储在server2的memcached,这是防止单点故障,不会因为server1整体down而丢失数据)
1. 将依赖的jar包导入到tomcat的lib目录中(server1和server2都要导入)
修改tomcat配置文件
vim conf/context.xml
server1
server2
重启tomcat,并打开memcached(server1和server2都打开)
关闭server1,再写入
打开server1,关闭server2,再写入
关闭server2的memcached