一、安装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服务器上内容如下:
为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地址在变化 ,到此配置成功