Nginx + Tomcat 부하 분산 (동적 및 정적 분리) 클러스터


1. 클러스터 개요

  • 정상적인 상황에서 Tomcat 사이트는 단일 장애 지점이있을 수 있으며 너무 많은 고객의 복잡하고 다양한 요청에 대처할 수 없으며 프로덕션 환경에서만 사용할 수 없으므로보다 안정적인 솔루션이 필요합니다.
  • Nginx는 매우 우수한 http 서버 소프트웨어로 최대 5000 개의 동시 연결을 지원할 수 있으며 강력한 정적 리소스 처리 기능, 안정적인 작동 및 메모리 및 CPU와 같은 시스템 리소스의 매우 낮은 소비를 가지고 있습니다.
  • 현재 많은 대형 웹 사이트는 Nginx 서버를 역방향 프록시로 사용하고 백엔드 웹 사이트의로드 밸런서를 사용하여 전체 사이트의로드 동시성을 향상시킵니다.

Nginx를로드 밸런서로 사용하고 Tomcat을 애플리케이션 서버의로드 클러스터로 사용하면 웹 사이트 토폴로지가 다음 그림에 표시됩니다.
표
Nginx 서버를 프런트 엔드로, Tomcat 서버를 백 엔드로, 웹 페이지 요청은 Nginx 서비스에 의해 전달
되지만 모든 웹 요청 은 전달 되지 않습니다. 처리를 위해 Nginx 서버에 정적 페이지를 요청하는 대신 동적 페이지 요청이 처리를 위해 백엔드 Tomcat 서버로 전달됩니다.

그러나 우리가 아는 한 Tomcat은 경량 응용 프로그램 서버이며 허용 가능한 액세스 양이 충분하지 않을 수 있으므로 여러 Tomcat 서버가 필요하며 Nginx 구성 가중치를 통해 처리 할 Tomcat 서버를 선택하고로드 균형 조정 중 하나를 선택합니다. 전략


두, Nginx

Nginx 서버 :

  1. 홈페이지는 정확한 일치를 사용합니다.
  2. 정적 페이지는 일반 일치를 사용하여 자체 처리
  3. 동적 페이지는 jsp의 끝에서 요청을 일치시키기 위해 정규 일치를 사용하고 proxy_pass를 사용하여 Tomcat 서버로 전달합니다.

Nginx 정적 처리 장점

  1. Nginx의 정적 페이지 처리 효율성은 Tomcat보다 훨씬 높습니다.
  2. Tomcat이 1000 번 요청하면 Nginx는 6000 번 요청합니다.
  3. Tomcat의 초당 처리량은 0.6M이고 Nginx의 초당 처리량은 3.6M입니다.
  4. Nginx의 정적 리소스 처리 능력은 Tomcat의 6 배입니다.

Nginx 동적 및 정적 분리 원리 :
표

  1. 서버가 클라이언트로부터 요청을 받으면 정적 및 동적 리소스가 모두 있습니다.
  2. Nginx에서 정적 리소스를 제공합니다.
  3. 백엔드로 전달되는 동적 리소스 Nginx

Nginx 구성 역방향 프록시의 주요 매개 변수 :

配置后端服务器池,以提供响应数据
upstream 服务器名 {
    
    }

配置将访问请求转发给后端服务器池名
proxy_pass http://服务器名

세, 구성 단계

1. 환경

  • VMware 16 Pro (16.1.0)
  • 네트워크 어댑터가 NAT 모드에 있습니다.
  • 네트워크 카드는 IP를 정적으로 얻도록 구성됩니다.
  • 로컬 YUM 소스 창고
  • 소스 코드 컴파일 및 설치
주최자 대응하다 IP 주소 필수 소프트웨어
Nginx 서버 CentOS 7-1 192.168.126.11 nginx-1.12.2.tar.gz
Tomcat 서버 1 CentOS 7-2 192.168.126.12 apache-tomcat-9.0.16.tar.gz 、 jdk-8u201-linux-x64.rpm
톰캣 서버 2 CentOS 7-3 192.168.126.13 apache-tomcat-9.0.16.tar.gz 、 jdk-8u201-linux-x64.rpm

2. Nginx로드 밸런서 배포

  • Nginx 소스 코드 컴파일 및 설치에 대한 자세한 이론적 및 실제적 측면은 이전 블로그 포털을 참조하십시오. https://blog.csdn.net/weixin_51486343/article/details/112390348
  • 패키지 공유 리소스를 다운로드 한 후 Xshell을 열고 Nginx 패키지를 / opt / 디렉토리로 드래그합니다.
    표
  • 다음은 원 클릭 배포 Nginx Shell 스크립트입니다.
cd /opt/
vim nginx.sh

#!/bin/bash

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.12.2.tar.gz

cd nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 2 && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

killall -9 nginx
nginx

echo `[Unit]
Description=nginx
After=network.target
[Service]
Type=£orking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/ki11 -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target` > /lib/systemd/system/nginx.service

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service


. nginx.sh
#等待执行完毕
  • 확인
    표
    표

3. 2 개의 Tomcat 응용 프로그램 서버 배포

cd /opt
vim tomcat.sh

#/bin/bash

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm

echo 'export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH' > /etc/profile.d/java.sh

source /etc/profile

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

/usr/local/tomcat/bin/startup.sh


. tomcat.sh
#等待执行完毕

#验证
netstat -natp | grep 8080 
java -version
http://192.168.126.11:8080
(http://192.168.126.12:8080)

표
표

  • 다른 하나도 똑같이
    표

4. 동적 및 정적 분리 구성

  1. Tomcat 서버 1
mkdir /usr/local/tomcat/webapps/xcf1
#创建指定首页目录
#这里随后拖进来一张jpg格式的照片

vim /usr/local/tomcat/webapps/xcf1/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
        <html>
        <head>
        <title>JSP test2 page</title>
        </head>
        <body>
        <% out.println("这里是动态页面:123123");%>
        </body>
        </html>

표

vim /usr/local/tomcat/conf/server.xml
#编辑tomcat主配置文件

<Host name="TomcatServer1" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/xcf1" path="" reloadable="true" />
</Host>
#主机名:TomcatServer1
#工作目录:Webapps
#开启解压war包
#运行时有web应用自动部署
#首页文件在/usr/local/tomcat/webapps/xcf1目录中
默认文件:index.jsp

표

#重启
/usr/local/tomcat/bin/shutdown.sh

/usr/local/tomcat/bin/startup.sh

표

  1. Tomcat Server2 구성

기본적으로 Tomcat Server1 구성과 동일

mkdir /usr/local/tomcat/webapps/xcf2

표
표

#记得重启
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

표

5. Nginx 서버 구성

  1. 정적 페이지 및 정적 이미지 준비
echo '<html><body><h1>这是默认目录静态页面</h1></body></html>' > /usr/local/nginx/html/index.html

mkdir /usr/local/nginx/html/xiaoxu

표

  1. 부하 분산을위한 서버 목록 구성

가중치 매개 변수는 가중치를 나타내며 가중치가 높을수록 할당 될 확률이 높아집니다.

vim /usr/local/nginx/conf/nginx.conf
#编辑nginx主配置文件

    #gzip  on;

    upstream tomcat_server {
    
    
        server 192.168.126.12:8080 weight=1;
        server 192.168.126.13:8080 weight=1;
        }


    server {
    
    
        listen       80;
        server_name  www.xcf.com;

        charset utf-8;

표

  1. 동적 페이지 요청을 처리하고 처리를 위해 .jsp 파일 요청을 Tomcat 서버로 전달하도록 Nginx를 구성합니다.
	location ~ .*.jsp$ {
    
    
		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;  
	}

표

  1. 정적 이미지 요청을 처리하도록 Nginx 구성
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
    
    
		root /usr/local/nginx/html/xiaoxu;
		expires 10d;
	}

표

  1. nginx 서비스를 다시 시작하고 테스트하십시오.
systemctl restart nginx.service

정적 웹 페이지의 효과를 테스트합니다.

브라우저 액세스 : http://192.168.126.11/
표

브라우저 방문 http://192.168.126.11/cat.jpg
표

부하 분산 효과를 테스트하고 브라우저를 새로 고침하여 http://192.168.126.11/xcf/index.jsp를 방문하세요.
표
표

추천

출처blog.csdn.net/weixin_51486343/article/details/112759401