Nginx+Tomcat负载平衡、动静分离

[复制链接]
发表于 2026-2-1 01:46:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Nginx+Tomcat负载平衡、动静分离

一、Nginx 应用

Nginx是一款非常精良的HTTP服务器软件,支持高达50,000个并发毗连数的相应,拥有强大的静态资源处理处罚本事。其运行稳固,且对内存、CPU等体系资源的斲丧非常低。如今,许多大型网站都应用Nginx服务器作为后端网站步调的反向署理及负载平衡器,以提拔整个站点的负载并发本事。
二、正向署理和反向署理

1.1 正向署理

1.1.1 什么是正向署理

正向署理署理的是客户端去访问服务器,目标是加快访问速率。当客户端访问一台服务器有停滞时,可以通过一台可以访问到该服务器的署理服务器来实现访问。客户端发送哀求给署理服务器,署理服务器再去访问目标服务器,并将返回数据转达给客户端。正向署理可以屏蔽或埋伏客户端的信息。
1.2 反向署理(单级)

1.2.1 什么是反向署理

反向署理署理的是服务端,常用于负载平衡。反向署理服务器埋伏了服务器的信息,常用于多台服务器的分布式摆设。客户端发来的哀求先由反向署理服务器吸收,然后按肯定规则分发到详细的服务器,客户端无法知道详细是哪台服务器相应了哀求。
三、负载平衡模式

1.1 轮询(Round Robin)

1.1.1 轮询算法

轮询算法是Nginx的默认分流算法,按序次将哀求依次分配给每一台后端服务器,直到末了一台服务器,然后重新从第一台服务器开始。这种方法简单且匀称地分配流量。
设置示例:
  1. upstream backend {
  2.     server backend1.example.com;
  3.     server backend2.example.com;
  4.     server backend3.example.com;
  5. }
复制代码
1.2 最少毗连数(Least Connections)

1.2.1 最少毗连数算法

最少毗连数算法将哀求分配给当前活动毗连数最少的服务器,实用于哀求处理处罚时间不匀称的情况,可以有用平衡服务器的负载。
设置示例:
  1. upstream backend {
  2.     least_conn;
  3.     server backend1.example.com;
  4.     server backend2.example.com;
  5.     server backend3.example.com;
  6. }
复制代码
1.3 IP 哈希(IP Hash)

1.3.1 IP 哈希算法

IP 哈希算法通过盘算客户端 IP 地点的哈希值,将哀求始终分配给同一台服务器,实用于须要将特定客户端的哀求固定在同一台服务器上的场景。
设置示例:
  1. upstream backend {
  2.     ip_hash;
  3.     server backend1.example.com;
  4.     server backend2.example.com;
  5.     server backend3.example.com;
  6. }
复制代码
1.4 加权轮询(Weighted Round Robin)

1.4.1 加权轮询算法

加权轮询算法允许为每台服务器设置权重,权重越大的服务器将会得到更多的哀求,实用于服务器性能不平衡的情况。
设置示例:
  1. upstream backend {
  2.     server backend1.example.com weight=3;
  3.     server backend2.example.com weight=1;
  4.     server backend3.example.com weight=2;
  5. }
复制代码
1.5 最少时间算法(Least Time)

1.5.1 最少时间算法

最少时间算法基于哀求的相应时间,将哀求分配给相应时间最短的服务器。这种算法实用于须要最大化相应速率的场景。
设置示例:
  1. upstream backend {
  2.     least_time header;
  3.     server backend1.example.com;
  4.     server backend2.example.com;
  5.     server backend3.example.com;
  6. }
复制代码
1.6 划一性哈希(Consistent Hashing)

1.6.1 划一性哈希算法

划一性哈希算法包管当集群中某台服务器故障时,只有部分哀求会重新分配到其他服务器,而不是全部重新分配,这在缓存等场景中非常有用。
设置示例:
  1. upstream backend {
  2.     hash $request_uri consistent;
  3.     server backend1.example.com;
  4.     server backend2.example.com;
  5.     server backend3.example.com;
  6. }
复制代码
四、规划摆设负载平衡和反向署理

1.1 摆设Nginx负载平衡器

1.1.1 安装和设置Nginx

起首克制防火墙并关闭SELinux:
  1. systemctl stop firewalld
  2. setenforce 0
复制代码
然后安装所需依赖,并创建Nginx用户:
  1. yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
  2. useradd -M -s /sbin/nologin nginx
复制代码
接下来下载并解压Nginx源代码,进入目次举行设置:
  1. cd /opt
  2. tar zxvf nginx-1.20.2.tar.gz -C /opt/
  3. cd nginx-1.20.2/
  4. ./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 --with-http_ssl_module
  5. make && make install
复制代码
创建Nginx服务:
  1. vim /lib/systemd/system/nginx.service
复制代码
内容如下:
  1. [Unit]
  2. Description=nginx
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. PIDFile=/usr/local/nginx/logs/nginx.pid
  7. ExecStart=/usr/local/nginx/sbin/nginx
  8. ExecReload=/bin/kill -s HUP $MAINPID
  9. ExecStop=/bin/kill -s QUIT $MAINPID
  10. PrivateTmp=true
  11. [Install]
  12. WantedBy=multi-user.target
复制代码
启动Nginx服务并设置开机启动:
  1. chmod 754 /lib/systemd/system/nginx.service
  2. systemctl start nginx.service
  3. systemctl enable nginx.service
复制代码
1.2 摆设2台Tomcat应用服务器

1.2.1 Tomcat服务器设置

起首克制防火墙并关闭SELinux:
  1. systemctl stop firewalld
  2. setenforce 0
复制代码
安装JDK:
  1. tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
复制代码
设置情况变量:
  1. vim /etc/profile
复制代码
添加以下内容:
  1. export JAVA_HOME=/usr/local/jdk1.8.0_91
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  4. export PATH=${JAVA_HOME}/bin:$PATH
复制代码
应用情况变量:
  1. source /etc/profile
复制代码
解压Tomcat并启动:
  1. tar zxvf apache-tomcat-8.5.16.tar.gz
  2. mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
  3. /usr/local/tomcat/bin/shutdown.sh
  4. /usr/local/tomcat/bin/startup.sh
复制代码
五、动静分离设置

1.1 Tomcat1 服务器设置

1.1.1 设置动态页面

在Tomcat1服务器上创建动态页面:
  1. mkdir /usr/local/tomcat/webapps/test
  2. vim /usr/local/tomcat/webapps/test/index.jsp
复制代码
添加以下内容:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. <title>JSP test1 page</title>
  5. </head>
  6. <body>
  7. <% out.println("动态页面 1,http://www.test1.com");%>
  8. </body>
  9. </html>
复制代码
编辑server.xml文件:
  1. vim /usr/local/tomcat/conf/server.xml
复制代码
设置内容如下:
  1. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
  2.         <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
  3.         </Context>
  4. </Host>
复制代码
重启Tomcat:
  1. /usr/local/tomcat/bin/shutdown.sh
  2. /usr/local/tomcat/bin/startup.sh
复制代码
1.2 Tomcat2 服务器设置

1.2.1 设置动态页面

在Tomcat2服务器上创建动态页面:
  1. mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
  2. vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
复制代码
添加以下内容:
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. <title>JSP test2 page</title>
  5. </head>
  6. <body>
  7. <% out.println("动态页面 2,http://www.test2.com");
  8. %>
  9. </body>
  10. </html>
复制代码
编辑server.xml文件:
  1. vim /usr/local/tomcat/tomcat1/conf/server.xml
复制代码
设置内容如下:
  1. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
  2.         <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
  3. </Host>
复制代码
重启Tomcat:
  1. /usr/local/tomcat/tomcat1/bin/shutdown.sh
  2. /usr/local/tomcat/tomcat1/bin/startup.sh
复制代码
1.3 Nginx 服务器设置

1.3.1 设置静态页面和负载平衡

创建静态页面和静态图片目次:
  1. echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
  2. mkdir /usr/local/nginx/html/img
  3. cp /root/game.jpg /usr/local/nginx/html/img
复制代码
编辑Nginx设置文件:
  1. vim /usr/local/nginx/conf/nginx.conf
复制代码
设置内容如下:
  1. http {
  2.     upstream tomcat_server {
  3.         server 192.168.10.23:8080 weight=1;
  4.         server 192.168.10.22:8080 weight=1;
  5.         server 192.168.10.22:8081 weight=1;
  6.     }
  7.     server {
  8.         listen 80;
  9.         server_name www.kgc.com;
  10.         charset utf-8;
  11.         location ~ .*\.jsp$ {
  12.             proxy_pass http://tomcat_server;
  13.             proxy_set_header HOST $host;
  14.             proxy_set_header X-Real-IP $remote_addr;
  15.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  16.         }
  17.         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
  18.             root /usr/local/nginx/html/img;
  19.             expires 10d;
  20.         }
  21.         location / {
  22.             root html;
  23.             index index.html index.htm;
  24.         }
  25.     }
  26. }
复制代码
六、测试结果

1.1 测试静态页面结果

在欣赏器中访问:

  • 静态页面:http://192.168.10.19/
  • 静态图片:http://192.168.10.19/game.jpg
1.2 测试负载平衡结果

不绝革新欣赏器访问:http://192.168.10.19/index.jsp,以测试负载平衡结果。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表