您的位置:首页 > 数据库 > Redis

nginx-redis-tomcat8实现负载均衡,session共享

2018-01-18 09:52 603 查看
一、安装nginx (这里我单独建了一个虚拟机192.168.10.12来安装nginx,redis服务)
     1)使用命令安装nginx :apt install nginx
     2)配置nginx,配置文件位置:/etc/nginx/nginx.conf
     3)本文配置文件/sites-enabled/default因为nginx.conf中引用了此文件,所以可在此文件内配置
     4)配置如下:
           添加server端口监听,proxy_pass后http://test的test名称为upstream的名称
upstream test {server 192.168.10.13:8080;server 192.168.10.18:8080;}server{    listen 8081;    location / {        proxy_pass        http://test;    }}                    
     5)目前nginx的upstream支持的分配算法:
                轮询-----轮流处理请求(默认)在按本文搭建过后访问页面并不断刷新能明显看到13与18应用服务器不断切换
                权重(weight)-----配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。 
                ip_哈希算法(ip_hash)---每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,理论上可以解决session共享的问题,实际上并不是个好办法
     6)nginx其它配置
upstream test {server 192.168.10.13:8080 weight=2;server 192.168.10.18:8080;}           down
          表示单前的server暂时不参与负载
           Weight
           默认为1.weight越大,负载的权重就越大。
           max_fails
           允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
           fail_timeout
           max_fails 次失败后,暂停的时间。
           Backup 
     7)使用ip_hash配置    
upstream test {ip_hash;server 192.168.10.13:8080 ;server 192.168.10.18:8080 ;}     到此nginx配置完毕,当然如果没有安装多的虚拟机也可以使用一台机器进行测试,ip地址修改为localhost,两个tomcat使用不
一样的端口即可          
     启动与关闭nginx:
     停止:nginx -s stop;启动:nginx  ;重载:nginx -s reload
二、redis服务器安装
     1、安装命令:apt install redis
     2、配置文件 :/etc/redis/reids.conf  
           注释掉bind 127.0.0.1 即为本机所有网卡
     3、redis启动与关闭命令:
                      启动redis: /etc/init.d/redis-serverstart
           如果修改了redis端口,使用redis-cli客户端连接时,也需指定端口如:
                          redis-cli -p 6380
     4、配置requirepass为设置redis密码,配置后tomcat中配置相应增加:redispass="";
三、 使用两个虚拟机tomcat8模拟两台应用服务器tomcat端口号都为8080
     本次测试新建了一个web项目loadbalance并添加页面index.jsp内容如下:
 
     在13服务器上的内容:
<%@ page language="java" contentType="text/html;charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Insert title here</title></head><body>    currentIP :192.168.10.13    <h1style="color:red;">Tomcat A    </h1>    <tablealign="centre"border="1">    <tr>        <td>SessionID</td>        <td><%=session.getId()%></td>    </tr>    <tr>         <td>Createdon</td>        <td><%=session.getCreationTime()%></td>    </tr>    </table></body></html>sessionID:<%=session.getId()%><br>SessionIP:<%=request.getServerName()%><br>SessionPort:<%=request.getServerPort()%><%    out.println("This is TomcatServer A");%>    
           在18服务器上内容如下:
<%@ page language="java" contentType="text/html;charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>Insert title here</title></head><body>    current IP:192.168.10.18    <h1style="color:red;">Tomcat B    </h1>    <tablealign="centre"border="1">    <tr>        <td>SessionID</td>        <td><%=session.getId()%></td>    </tr>     <tr>        <td>Createdon</td>        <td><%=session.getCreationTime()%></td>    </tr>    </table></body></html>sessionID:<%=session.getId()%><br>SessionIP:<%=request.getServerName()%><br>SessionPort:<%=request.getServerPort()%><%    out.println("This is TomcatServer BBBBBBB");%>          为tomcat8配置redis session共享     网上有很多都是tomcat8以下版本,需要为tomcat引入jar包:           tomcat-redis-session-manager.jar           jedis.jar           tomcat-juli.jar           tomact-juli-adapters.jar           commons-pool2.jar     但是这种配置并不支持tomcat8,要支持tomcat8需要修改tomcat-redis-session-manager原码,这里偷个懒,使用别人现成的已经改好的包。源码下载地址:https://github.com/chexagon/redis-session-manager   ,下载完成过后将项目引入到eclipse工程中,导出这个项目所需要的jar包,并将此项目导出为jar文件,最后将项目中jar文件除tomcat的jar文件全部及导出的这个jar文件包放入到tomcat的lib文件下。
     导出maven项目所有jar的方法如下:
          


     配置如下:mvndependency:copy-dependencies 弹出窗口中输入如下图所示
          



     点击run执行完成后,jar包文件位置及jar文件如下:



     将工程导出为redis-session-manager.jar包并将这个包引入到tomcat 的lib目录下
 
     tomcat文件配置 context.xml中添加如下内容:
<ManagerclassName="com.crimsonhexagon.rsm.redisson.SingleServerSessionManager"
      endpoint="redis://192.168.10.12:6379"/>
     全配置如下:
<Manager className="com.crimsonhexagon.rsm.redisson.ElasticacheSessionManager"
nodes="redis://node1.cache.amazonaws.com:6379 redis://node2.cache.amazonaws.com:6379 ..."
nodePollInterval="1000"
sessionKeyPrefix="_rsm_"
saveOnChange="false"
forceSaveAfterRequest="false"
dirtyOnMutation="false"
ignorePattern=".*\\.(ico|png|gif|jpg|jpeg|swf|css|js)$"
maxSessionAttributeSize="-1"
maxSessionSize="-1"
allowOversizedSessions="false"
masterConnectionPoolSize="100"
slaveConnectionPoolSize="100"
database="0"
password="<null>"
timeout="60000"
pingTimeout="1000"
retryAttempts="20"
retryInterval="1000"
/>
     到此tomcat配置完毕 
 
 
 
所有配置完成后访问:192.168.10.12:8081  应该能到tomcat的主页 ,输入192.168.10.12:8081/loadbalance可以看到显示的ip地址,sessionid等信息,不断刷新页面会发现sessionid不变,但是页面的ip地址在变化 ,到此配置成功  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: