nginx+Tomcat实现负载均衡
nginx +tomcat负载均衡集群
一台tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于上产环境下
所以需要一套可靠的解决方案来完善web站点架构
而Nginx只能访问静态页面,需要通过tomcat去解析jsp的页面。
实验为了缓解Nginx访问压力,做了两台tomcat做负载均衡,目的实现Nginx访问时,可以访问jsp页面
由tomcat做解析
Nginx,是一款非常优秀的http服务器软件,并且内存,cpu等系统资源消耗非常低,目前很多大型网站都用nginx服务器做后端网站
程序的反向代理及负载均衡器,来提升整个站点的负载并发能力
nginx 服务器 192.168.30.24
tomcat 服务器1 192.168.30.21
tomcat 服务器2 192.168.30.22
安装tomcat8步骤
rm -rf /usr/bin/java
java -version
tar xf jdk-8u191-linux-x64.tar.gz
mv jdk1.8.0_191/ /usr/local/java
vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
java -version
tar xf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat8
/usr/local/tomcat8/bin/startup.sh
netstat -anpt |grep :8080
安装tomcat1和tomcat2配置一样,测试页可以修改成test2,可以看到区别
vim /usr/local/tomcat8/conf/server.xml
148 <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp" path="" reloadable="flase" >
</Context>
cp /usr/local/tomcat8/conf/server.xml{,bak} 把配置文件做备份,并放在同一目录下
mkdir /web
cd /web
mdkir webapp
vim /web/webapp/index.jsp
建立一个web目录,并在里面建立一个webapp 目录,用于存放网站文件
在webapp目录下建立一个index.jsp的测试页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("Welcome to test site,http://www.test2.com");%>
</body>
</html>
/usr/local/tomcat8/bin/shutdown.sh
/usr/local/tomcat8/bin/startup.sh
测试:http://192.168.30.22:8080,出现http://www.test2.com
配置Nginx
cp /usr/lcoal/nginx/conf/nginx.conf{,.bak}
vim /usr/local/nginx/conf/nginx.conf
upstream连接指定上两台tomcat
user nginx;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
upstream tomcat_server {
server 192.168.30.21:8080 weight=1;
server 192.168.30.22:8080 weight=1;
server 192.168.30.23:8080 weight=1 backup;
}
server {
listen 80;
server_name localhost;
charset utf-8;
access_log logs/local.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~\.jsp$ {
proxy_pass http://tomcat_server;
}
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
}
server {
listen 81;
server_name www.cloud.com;
charset utf-8;
access_log logs/cloud.access.log main;
location / {
root html/cloud;
index index.html index.html;
}
}
}
重启Nginx,killall -HUP nginx
访问http://192.168.30.24/index.jsp切换,可以访问到其他两台tomcat上的内容
upstream 相当于负载均衡 把server下的指定web(tomcat)上的服务器解析,请求上游,发送
至下游,给proxy_pass,解析出jsp页面
proxy_pass 相当于反向代理 把jsp页面的文件代理给tomcat_server
公司也可以做一个备份源的tomcat,这个页面的话,如果配置文件添加backup,那么正常开启的情况下
不会访问到这台服务器,如果tomcat原始的服务器宕机,那么这个备份的tomcat会自动匹配到这台
服务器上
keepalive_timeout 65;
upstream tomcat_server {
server 192.168.30.21:8080 weight=1;
server 192.168.30.22:8080 weight=1;
server 192.168.30.23:8080 weight=1 backup;
}
实验/usr/local/tomcat8/bin/shutdown.sh Tomcat1
/usr/local/tomcat8/bin/shutdown.sh Tomcat2
访问http://192.168.30.24/index.jsp,这个页面会切换到tomcat3上