Nginx 服务器 之Nginx与tomcat实现负载均衡
http://images2015.cnblogs.com/blog/704904/201612/704904-20161201135814990-1773388573.png本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡。
一、nginx与tomcat实现负载均衡
1、在/usr/local/ngnix/conf创建文件 nginx-tomcat.conf
文件内容:
http://common.cnblogs.com/images/copycode.gif
usernobody;
worker_processes2;
events {
worker_connections1024;
}
http{ # upstream 配置一组后端服务器,
# 请求转发到upstream后,nginx按策略将请求指派出某一服务器
# 即配置用于负载均衡的服务器群信息 upstream tomcats{
fair;
server 121.42.41.143:8080;
server 219.133.55.36;
}
server {
listen 80;
server_name121.42.41.143;
access_loglogs/tomcat-nginx.access.logcombined; # 反向代理设置,将所有/路径下请求发给本机上的tomcat
location / { #root html; indexindex.html index.htm; #==========Nginx提供的代理============
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcats;
}
}
}
http://common.cnblogs.com/images/copycode.gif
2、使用该配置文件启动nginx (启动前先关闭nginx)
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-tomcat.conf
二、配置文件详解:
http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif View Code
三、fair策略的安装
fair策略:根据各个服务器的性能的不同,自动选择使用响应能力强的服务器。该策略是第三方提供的,所以要先安装。
安装步骤
1、下载 gnosek-nginx-upstream-fair-a18b409.tar.gz
2、解压tar zxvf gnosek-nginx-upstream-fair-a18b409.tar.gz
3、将解压后的文件移动到 /usr/local目录下并 改名为 nginx-upstream-fair
http://images2015.cnblogs.com/blog/704904/201612/704904-20161201113407006-1690136784.png
4、将该模块添加到我们安装的nginx中
a、首先进入nginx-1.8.1源文件目录下在执行:
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-upstream-fair/
b、执行:make 进行编译
c、进入 nginx-1.8.1/objs/下将最新的nginx启动项 覆盖原来的 /usr/local/nginx/sbin/nginx启动项。
# cp nginx /usr/local/nginx/sbin
d、开启Nginx 看看是可以使用
四、在分布式服务器集群中session共享问题
问题:当我们的用户在tomcat1服务器上登录后,tomcat1会保存用户的登录信息,但当用户的请求被代理服务器分配给tomcat2/tomcat3服务器时,这时就会出现tomcat2/tomcat3无法获取用户登录信息,从而导致用户需要重新登录的现象。我们有三种解决方案:
1、同一个用户的请求锁定在同一台服务器上,这样就不会存在session在不同服务器之间共享问题。这种方案简单,但缺乏容错性(一旦服务器故障,那用户的请求将被分配给其他服务器,这时就需要重新登录)
实现方式:设置集群策略为 ip_hash ;
upstream tomcats{
ip_hash;
}
2、session复制方式: 当任何服务器中session值发生改变,他都会将该改变广播给其他服务器,当其他服务器收到广播后也做相应的改变,从而实现session在所有服务器中一直。缺点 当集群中tomcat服务器很多时会增加网络负荷,性能低下。实现方式:
a、在tomcat的server.xml中配置session广播
http://common.cnblogs.com/images/copycode.gif
http://common.cnblogs.com/images/copycode.gif
b、在我们的分布式应用的web.xml 中添加 标签
:作用是公告我们的应用可以处于集群环境中。
3、通过创建额外的共享空间用来管理session,一般我们使用分布式缓存技术redis、memcached缓存技术,在这里我么使用memcached。
a、memcached的安装:http://www.cnblogs.com/jalja/p/6121978.html
b、memcached 的 session共享原理
粘性共享:
http://images2015.cnblogs.com/blog/704904/201612/704904-20161201151805209-1152739181.png
非粘性:
http://images2015.cnblogs.com/blog/704904/201612/704904-20161201152318818-270616454.png
c、tomcat访问memcached的相关环境(我们使用的是tomcat7)
1. 复制jar包到tomcat/lib目录,jar分三类
1)spymemcached.jar memcached java客户端
2)memcached相关的包memcached-session-manager-{version}.jar 核心包 memcached-session-manager-tc{tomcat-version}-{version}.jar Tomcat版本相关的包
3)序列化工具包,有多种可选方案,不设置时使用jdk自带序列化,其它可选kryo,javolution,xstream,flexjson等 msm-{tools}-serializer-{version}.jar其它序列化工具相关包一般第三方序列化工具不需要实现serializable接口
http://images2015.cnblogs.com/blog/704904/201612/704904-20161201153008193-1882179177.png
d、配置Context,加入处理session的ManagerMemcachedBackupSessionManager
Context配置查找顺序:
1)conf/context.xml 全局配置,作用于所有应用
2) conf///context.xml.default 全局配置,作用于指定host下全部应用
3) conf///.xml 只作用于contextpath指定的应用
4) 应用META-INF/context.xml 只作用于本应用
5) conf/server.xml 下 作用于Context docBase指定的应用
如果只希望session管理作用于特定应用,最好用3,4方式设置,希望作用全体,可用1,2,5设置
conf/context.xml的配置:
http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif View Code
四、集群环境开发注意事项
1、实体类要序列化( implements Serializable)
private static final long serialVersionUID = 3349238980725146825L;
2、获取客户端请求地址的方式 。在nginx-tomcat.conf中添加如下配置:
server {
location / {
proxy_set_header X-Real-IP $remote_addr; # 真实的客户端IP }
}
java代码:
public static StringgetIp(HttpServletRequest request){
String remoteIp =request.getRemoteAddr();
String headIp=request.getHeader("X-Real-IP"); return headIp==null?remoteIp:headIp;
}
3、动静分离
把静态文件放在nginx服务器中(css、js、图片)
页:
[1]