> 文章列表 > nginx加tomcat动静分离,负载均衡

nginx加tomcat动静分离,负载均衡

nginx加tomcat动静分离,负载均衡

tomcat是什么:java开发的开源服务器

处理动态页面,静态页面处理能力一般

 jvm参数优化

配置添加 在119行之前

以2cpu 4G内存为例

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"

cygwin=false之前

-server 一定要作为第一个参数,再多个cpu时使用

-Xmx 堆内存的最大大小

-Xms 内存初始大小

-Xmx  -Xms最好相等且等于内存的一半,避免回校后机制后重新整理堆

-Xmn新创建的对象给的内存空间

-xx:premSizea:非堆内存初始值

 -xx:maxPermSize:非堆的最大   

伸缩堆带来的大小

-xx:parallelGCThreads:设置并行垃圾收集器的线程数最好等于cpu数

-xx:premSizea -xx:maxPermSize:最好设置相且等于物理内存的四分之一

-Djava.awt.headless=true 避免再linux/unix环境下web网页不能正常显示图片

-XX:+DisableExplicitGC 关闭系统级别的垃圾回收机制,以防大起打落导致响应变慢

两个tomcat实例

Nginx+Tomcat负载均衡,动j静分离群集

 

 nginx负载均衡是通过反向代理实现的

 upstream

proxy_pass转发http://服务名称

 location匹配请求通过 http反向代理转发给后台

 nginx配置

 #定义tomcat服务器组集群

 weight权重,默认为1proxy_pass http://

 优化,图片内容保存

负载均衡模式:

rr模式轮询

每个请求按时间顺序逐一分配到不同的后端服务器,超过最大失败次数后(max_files默认为1)后端服务器死机,自动剔除故障,时访问不受影响

least_conn最少连接

优先将客户机请求调度到当前连接最少的服务器

ip_hash

每个球球按IP的hash结果分配会话断开保持

每个顾客固定一个服务器session共享问题可用后端的session共享同步

fair 第三方负载

按照后端服务器的响应时间进行分配,响应时间段的优先分配

url_hash(第三方)

根据用户请求的u人来做hash,对每个url的hash结果分配

 反向代理两种模式

 七层转发

动静分离基于七层反向代理

http{

stream{

upstream 服务器组名称{

       server IP1:PORT 【weight=1 ...】 ;

       server ip2:  PORT;

       . . . . .

       调度算法(rr轮询/加权轮询/least_conn最小链接,ip_hash,url_hash,fair/)

server {

   location ~ . . . {

      proxy_pass http://tomcat_server;

      proxy set header HosT $host;

      proxy set header X-Real-Ip $remote addr;

      proxy set header X-Forwarded-For $proxy_add_x_forwarded_for;

 }

}

}

四层反向代理:配置--with-stream 模块

http模块添加同一级的stream块(一般配置在http块上面)

proxy_pass

 关闭长连接keeptimeout=0四层代理

tomcat的长连接

四层反向代理

 stream {

  upstream 服务器组名称 {

       server ip1:PORT ;

       server ip2:  PORT;

       server ip3:PORT;

         . . . . .

   }

}

server {

   listen 监听端口;

   server_name 网站主机名;

   proxy_ pass 服务器组名称

}

}

总结nginx支持哪些类型的反向代理

基于七层的http/https/mail等应用协议的代理

基于四层的ip+tcp或udp端口的代理

例题

三台nginx需要重新编译,添加 --with-stream  编译安装

到源安装的nginx目录下

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream

make

然后把 新的objs目录下的nginx复制usr/local/nginx/sbin/下的ningx

nginx -V查看是否加载模块成功

四层反向代理的nginx配置

http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  0;# keepalive_timeout  65;#gzip  on;
upstream tomcat_server {server 192.168.232.33:8080;server 192.168.232.105:8080;
}

server

{

listen 81;

server_name localhost;

#charset koi8-r;

如果使用80端口,需要将下面localhost端口改为80之外的端口,这里设为81.

七层反向代理的配置

upstream tomcat_server {server 192.168.232.33:8080;server 192.168.232.105:8080;
}

在tomcat中创建动态网页 :

cd /usr/local/tomcat/webapps/
 
vim index.jsp
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

在nginx中创建静态网页:

cd /usr/share/nginx/html
vim index.html
 
<html>
<body>
<h1>this is nginx1 test web!</h1>
</body>
</html>

动态页面一定要在webapps下建立test要不会跳到tomcat默认页面

测试