기사 디렉토리
1. 클러스터 개요
- 정상적인 상황에서 Tomcat 사이트는 단일 장애 지점이있을 수 있으며 너무 많은 고객의 복잡하고 다양한 요청에 대처할 수 없으며 프로덕션 환경에서만 사용할 수 없으므로보다 안정적인 솔루션이 필요합니다.
- Nginx는 매우 우수한 http 서버 소프트웨어로 최대 5000 개의 동시 연결을 지원할 수 있으며 강력한 정적 리소스 처리 기능, 안정적인 작동 및 메모리 및 CPU와 같은 시스템 리소스의 매우 낮은 소비를 가지고 있습니다.
- 현재 많은 대형 웹 사이트는 Nginx 서버를 역방향 프록시로 사용하고 백엔드 웹 사이트의로드 밸런서를 사용하여 전체 사이트의로드 동시성을 향상시킵니다.
Nginx를로드 밸런서로 사용하고 Tomcat을 애플리케이션 서버의로드 클러스터로 사용하면 웹 사이트 토폴로지가 다음 그림에 표시됩니다.
Nginx 서버를 프런트 엔드로, Tomcat 서버를 백 엔드로, 웹 페이지 요청은 Nginx 서비스에 의해 전달
되지만 모든 웹 요청 은 전달 되지 않습니다. 처리를 위해 Nginx 서버에 정적 페이지를 요청하는 대신 동적 페이지 요청이 처리를 위해 백엔드 Tomcat 서버로 전달됩니다.그러나 우리가 아는 한 Tomcat은 경량 응용 프로그램 서버이며 허용 가능한 액세스 양이 충분하지 않을 수 있으므로 여러 Tomcat 서버가 필요하며 Nginx 구성 가중치를 통해 처리 할 Tomcat 서버를 선택하고로드 균형 조정 중 하나를 선택합니다. 전략
두, Nginx
Nginx 서버 :
- 홈페이지는 정확한 일치를 사용합니다.
- 정적 페이지는 일반 일치를 사용하여 자체 처리
- 동적 페이지는 jsp의 끝에서 요청을 일치시키기 위해 정규 일치를 사용하고 proxy_pass를 사용하여 Tomcat 서버로 전달합니다.
Nginx 정적 처리 장점
- Nginx의 정적 페이지 처리 효율성은 Tomcat보다 훨씬 높습니다.
- Tomcat이 1000 번 요청하면 Nginx는 6000 번 요청합니다.
- Tomcat의 초당 처리량은 0.6M이고 Nginx의 초당 처리량은 3.6M입니다.
- Nginx의 정적 리소스 처리 능력은 Tomcat의 6 배입니다.
Nginx 동적 및 정적 분리 원리 :
- 서버가 클라이언트로부터 요청을 받으면 정적 및 동적 리소스가 모두 있습니다.
- Nginx에서 정적 리소스를 제공합니다.
- 백엔드로 전달되는 동적 리소스 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 |
- 소프트웨어 패키지 포털 : https://pan.baidu.com/s/1crfygqLQQsO-HByrF1YZ8g (추출 코드 : k3e6)
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 응용 프로그램 서버 배포
- 구체적인 이론과 실제 작동에 대해서는 이전 블로그 인 포털을 참조하십시오 : https://blog.csdn.net/weixin_51486343/article/details/112746276
- 원 클릭 배포 Tomcat 서버 스크립트도 있습니다.
- 먼저 두 패키지를 / opt 디렉토리로 드래그해야합니다.
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. 동적 및 정적 분리 구성
- 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
- Tomcat Server2 구성
기본적으로 Tomcat Server1 구성과 동일
mkdir /usr/local/tomcat/webapps/xcf2
#记得重启
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
5. Nginx 서버 구성
- 정적 페이지 및 정적 이미지 준비
echo '<html><body><h1>这是默认目录静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/xiaoxu
- 부하 분산을위한 서버 목록 구성
가중치 매개 변수는 가중치를 나타내며 가중치가 높을수록 할당 될 확률이 높아집니다.
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;
- 동적 페이지 요청을 처리하고 처리를 위해 .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;
}
- 정적 이미지 요청을 처리하도록 Nginx 구성
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/xiaoxu;
expires 10d;
}
- 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를 방문하세요.