> 手机 > vivo > Tomcat服务在Nginx的负载均衡安装设置教程方法,Nginx负载均衡以及动静分离的原理与配置

Tomcat服务在Nginx的负载均衡安装设置教程方法,Nginx负载均衡以及动静分离的原理与配置

来源: 时间:2022-02-18 编辑: 手机版
Tomcat服务在Nginx的负载均衡安装设置教程方法,Nginx负载均衡以及动静分离的原理与配置,动静分离配置Nginx 负载均衡模式总结一、Nginx实现负载均衡原理Nginx实现负载均衡是通过反向代理实现Nginx 负载均衡模式rr 负载均衡模式:每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。least_conn 最少连接:优先将客户端请求调度到当前连接最少的服务器。ip_hash 负载均衡模式

 

一、Nginx实现负载均衡原理

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

Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权重来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略

Nginx服务器

1、首页使用精准匹配

2、静态页面使用正则匹配自己处理

3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器

 

二、Nginx动静分离原理

服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由 Nginx 提供服务,动态资源由 Nginx 转发至后端。

 

Nginx 静态处理优势

  • Nginx 处理静态页面的效率远高于 Tomcat 的处理能力
  • 若 Tomcat 的请求量为1000次,则 Nginx 的请求量为6000次
  • Tomcat 每秒的吞吐量为0.6M,Nginx 的每秒吞吐量为3.6M
  • Nginx 处理静态资源的能力是 Tomcat 处理的6倍

 

三、Nginx + Tomcat 动静分离、负载均衡配置步骤

 

环境准备:

Nginx 服务器:192.168.121.13

Tomcat 服务器1:192.168.121.12:8080 192.168.121.12:8081

Tomcat 服务器2:192.168.121.10

1、部署 Nginx 负载均衡服务器

首先将 nginx-1.12.0.tar.gz 压缩包上传到 /opt 目录下

systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

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

useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./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-http_ssl_module

make && make install

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

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

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

2、部署两台 Tomcat 应用服务器

所需安装包为:
apache-tomcat-9.0.16.tar.gz  
jdk-8u201-linux-x64.rpm 
#scp apache-tomcat-9.0.16.tar.gz root@192.168.121.10:/opt    #将所需的压缩包在Tomcat1上传给Tomcat2 server,当然我们也可以自己直接将压缩包拉到/opt目录下


systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

vim /etc/profile.d/java.sh
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

source /etc/profile.d/java.sh
java -version

cd /opt
vim abc.java
public class abc {
  public static void main(String[] args){
    System.out.println("Hello World!")
  }
}

[root@localhost?opt]#javac abc.java      #用来检测JDK环境是否设置成功
[root@localhost?opt]#java abc
Hello World!

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

##启动tomcat##
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep  8080


 

动静分离配置

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


vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
 </Context>
</Host>

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

(2)Tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

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


vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>

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


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


vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>

/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/

 

Nginx 负载均衡模式

rr 负载均衡模式:

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

least_conn 最少连接:

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

ip_hash 负载均衡模式:

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash。

fair(第三方)负载均衡模式:

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash(第三方)负载均衡模式:

和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。

 

总结

到此这篇关于Nginx负载均衡以及动静分离的原理与配置的文章就介绍到这了,更多相关Nginx负载均衡及动静分离内容请搜索元马网以前的文章或继续浏览下面的相关文章希望大家以后多多支持元马网!
Tomcat服务在Nginx的负载均衡安装设置教程方法,Nginx负载均衡以及动静分离的原理与配置相关文章内容介绍。


文章TAG:nginx动静分离配置负载均衡Tomcat

最近更新

  • MongoDB数据库在容器Docker内的安装教程,Docker 部署 MongoDB容器的方法

    MongoDB数据库在容器Docker内的安装教程,Docker 部署 MongoDB容器的方法,Docker是什么,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用,安装完成后,可以使用命令来运行 mongo 容器,最后可以通过 docker ps 命令查看容器运行信息,接着进入 mongo 容器内部,添加用户 admin 12345678,然后进行登录看是否创建成功

    vivo 日期:2022-02-18

  • Linux系统container of()函数内核编程的详细说明,linux内核编程container of()函数介绍

    在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢???为有字节对齐要求,所以该结构体大小为4bytes * 3 =12 bytes.   而&((struct test *)0)->k 的作用就是求 k到结构体temp起始地址的字节数大小(就是我们的size)。在这里0被强制转化为struct test *型, 它的作用就是作为指向该结

    vivo 日期:2022-02-18

  • VMware workstation V14.X版本的安装方法,最新虚拟机VMware 14安装教程

    VMware workstation V14.X版本的安装方法,最新虚拟机VMware 14安装教程,先给大家献上VMware 14 激活码FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWDCG54H-D8D0H-H8DHY-C6X7X-N2KG6ZC3WK-AFXEK-488JP-A7MQX-XL8YFAC5XK-0ZD4H-088HP-9NQZV-ZG2R4ZC5XK-A6E0M-080XQ-04ZZG-YF08DZY5H0-D3Y8K

    vivo 日期:2022-02-18

  • Linux系统下DHCP获取IP服务的安装教程,超详细讲解Linux DHCP服务

    目录一、DHCP服务(动态主机配置协议)1.背景2.概述3.优点4.DHCP报文类型5.DHCP 的分配方式二、安装 DHCP 服务器1.DHCP 服务软件2.主配置文件三、配置步骤1.使用 DHCP 动态的给 PC 机分配 IP 地址① eNSP②虚拟机③验证④进入命令行“ipconfig”测试,DHCP Discover——客户端用来寻找DHCP服务器的报文我向公司投简历来找工作DHCP Offer——DHCP服务器用来响应DHCP Discover报文的报文。该报文携带了各种配置信息,例如IP地址,

    vivo 日期:2022-02-18

  • nginx状态监控zabbix插件的安装方法,zabbix自定义监控nginx状态实现过程

    nginx状态监控zabbix插件的安装方法,zabbix自定义监控nginx状态实现过程zabbix自定义监控nginx状态1.开启状态界面2.写监控脚本3.配置监控项4.配置触发器5.测试zabbix自定义监控nginx状态Activeconnections2当前所有处于打开状态的连接accepts总共处理了多少个连接handled成功创建多少握手requests总共处理了多少个请求Readingnginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数Writingnginx返回给客

    vivo 日期:2022-02-18

  • Linux操作系统内CPU占用率居高不下的解决办法,linux下cpu飙高原因排查过程详解

    Linux操作系统内CPU占用率居高不下的解决办法,linux下cpu飙高原因排查过程详解前言开始步骤排查前言cpu飙高是很常见的线上问题,这都不会的话,属实有点拉跨兄弟萌不用慌,来我教你一套连招,先来个项目,整个api,到时候我们请求/cpu/{count}就能手动拉高cpu,机智鬼~其实我们现在已经知道是谁把cpu拉高了,但还不够细,只知道哪个项目出的问题远远不够,我们应该找到罪魁祸首,到底是哪个方法的多少行导致的问题,这才能让老大直呼内行

    vivo 日期:2022-02-18

  • Linux系统下LVM阵列增加硬盘扩容的操作教程方法,Linux里LVM磁盘扩容详细步骤

    Linux系统下LVM阵列增加硬盘扩容的操作教程方法,Linux里LVM磁盘扩容详细步骤,1、添加一块硬盘 2、查看分区情况:fdisk -l 3、设置分区: fdisk /dev/sdb 回车 m 回车 n 回车 p 回车 w 回车 4、再次查看分区:fdisk /dev/sdb 回车 t 回车 3 回车 L 回车 8e回车 w 回车 5、再看一次分区: 6、将新分区格式化为 ext3:mkfs.ext3 /dev/sdb1 7、 将分区转化为

    vivo 日期:2022-02-18

  • Docker Compose下模式Sidecar的使用教程,Docker Compose之Sidecar模式详解

    Docker Compose下模式Sidecar的使用教程,Docker Compose之Sidecar模式详解,什么是Docker Compose需求遇到不合适的语言实现方案什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到

    vivo 日期:2022-02-18