ps -T -p <PID> 检查指定线程
1. 介绍
- 通常状况下,一个 Tomcat 站点因为可能出现单点故障及无法应付过多客户复杂多样的恳求等状况,不能单独应用于生产环境下,所以咱们需求一套更可靠的处理方案
- Nginx 是一款十分优异的
http 服务器
软件,它能够支撑高达 5000 个并发衔接数的呼应,具有强壮的静态资源处理才能,运转安稳,而且内存、CPU 等体系资源耗费十分低 - 现在许多大型网站都应用 Nginx 服务器作为后端网站的反向署理及负载均衡器,来进步整个站点的负载并发才能.
小结:
-
Nginx是一款十分优异的HTTP服务器软件
-
支撑高达50 000个并发衔接数的呼应
-
具有强壮的
静态资源处
理才能 -
运转安稳
-
内存,CPU等体系资源耗费十分低
1.1. Tomcat重要目录
目录 | 作用 |
---|---|
bin | 寄存发动和关闭Tomcat脚本 |
canf | 寄存tomcat不同的装备文件 |
doc | 寄存Tomcat文件 |
lib | 寄存Tomcat运转需求的库文件 |
logs | 寄存Tomcat执行时的LOG文件 |
src | 寄存Tomcat的源代码 |
webapps | Tomcat的首要web发布目录 |
work | 寄存jsp编译后发生的class文件 |
1.2. 反向署理
反向署理(Reverse Proxy)方法是指以署理服务器来承受 Internet 上的衔接恳求,然后将恳求转发给内部网络上的服务器,并将从服务器上得到的成果返回给 Internet 上恳求衔接的客户端,此刻署理服务器对外就表现为一个反向署理服务器。
反向署理是为服务端服务的,反向署理能够协助服务器接纳来自客户端的恳求,协助服务器做恳求转发,负载均衡等。
反向署理对服务端是透明的,对咱们对错透明的,即咱们并不知道自己拜访的是署理服务器,而服务器知道反向署理在为他服务。
反向署理的优势:
- 隐藏实在服务器;
- 负载均衡便于横向扩大后端动态服务;
- 动态别离,进步体系健壮性。
Nginx装备反向署理的首要参数
- upstream服务池名{}
- 装备后端服务器池,以供给呼应数据
- proxy_pass http://服务池名
- 装备将拜访恳求转发给后端服务器池的服务器处理
1.3. 动态别离原理
服务端接纳来自客户端的恳求中,既有静态资源也有动态资源,静态资源由Nginx供给服务,动态资源Nginx转发至后端
服务端接纳来自客户端的恳求中,既有动态资源,也有静态资源。静态资源由ngixn供给服务。动态资源由nginx 转发到后端tomcat 服务器。
静态页面一般 有html,htm,css 等途径, 动态页面则一般是jsp ,php 等途径。nginx 在站点的location 中 经过正则,或许 前缀,或许 后缀等方法匹配。当匹配到用户拜访途径中有 jsp 时,则转发给后端的处理动态资源的web服务器处理。假如匹配到的途径中有 html 时,则nginx 自己处理。
1.4. Nginx 静态处理优势
- Nginx处理静态页面的功率远高于Tomcat的处理才能
- 若Tomcat的恳求量为1000次,则Nginx的恳求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3 .6M
- Nginx处理静态资源的才能是Tomcat处理的6倍
1.5. 吞吐量 / 吞吐率
吞吐量是指体系处理客户恳求数量的总和,能够指网络上传输数据包的总和,也能够指事务中客户端与服务器交互数据量的总和。
吞吐率是指单位时刻内体系处理客户恳求的数量,也便是单位时刻内的吞吐量
。能够从多个维度衡量吞吐率:①事务视点:单位时刻(每秒)的恳求数或页面数,即恳求数 / 秒或页面数 / 秒;②网络视点:单位时刻(每秒)网络中传输的数据包巨细,即字节数 / 秒等;③体系视点,单位时刻内服务器所承受的压力,即体系的负载才能。
吞吐率(或吞吐量)是一种多维衡量的功能指标,它与恳求处理所耗费的 CPU、内存、IO 和网络带宽都强相关。
2. Nginx+Tomcat负载均衡、动态别离
1.布置Nginx 负载均衡器
关闭防火墙
systemctl stop firewalld
setenforce 0
安装
yum -y install 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 \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,供给对 flv 视频的伪流支撑
--with-http_ssl_module #启用 SSL模块,供给SSL加密功用
--with-stream
./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
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
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/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.布置2台Tomcat 应用服务器
systemctl stop firewalld
setenforce 0
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
source /etc/profile
tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -ntap | grep 8080
3.动态别离装备
(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
4 Nginx server 装备
#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#装备负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.85.60:8080 weight=1;
server 192.168.85.70:8080 weight=1;
server 192.168.85.80:8080 weight=1;
}
server {
listen 80;
server_name www.wa.com;
charset utf-8;
#access_log logs/host.access.log main;
#装备Nginx处理动态页面恳求,将 .jsp文件恳求转发到Tomcat 服务器处理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
#设置后端的Web服务器能够获取长途客户端的实在IP
##设定后端的Web服务器接纳到的恳求拜访的主机名(域名或IP、端口),默许HOST的值为proxy_pass指令设置的主机名。假如反向署理服务器不重写该恳求头的话,那么后端实在服务器在处理时会以为一切的恳求都来自反向署理服务器,假如后端有防进犯战略的话,那么机器就被封掉了。
proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为署理服务器时,设置的IP列表,会把经过的机器ip,署理机器ip都记录下来
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/img;
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
......
}
......
}
3. 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(运用后端服务器自身经过相关机制坚持session同步)。
- fair(第三方)负载均衡形式:
按后端服务器的呼应时刻来分配恳求,呼应时刻短的优先分配。
- url_hash(第三方)负载均衡形式:
依据用户恳求的uri做hash。和ip_hash算法类似,是对每个恳求按url的hash成果分配,使每个URL定向到同一个后端服务器,可是也会形成分配不均的问题,这种形式后端服务器为缓存时比较好。
算法 | 详解 |
---|---|
轮询(默许) | 每个恳求按时刻顺序逐—分配到不同的后端服务,假如后端某台服务器死机,主动剔除故障体系,运用户拜访不受影响 |
轮询权重值 | weight的值越大分配到的权限概率越高,首要用于后端每台服务器功能不均匀状况,或许仅仅为在主从的状况下设置不同的权重值,达到合理运用主机资源 |
原地址哈希 | ip_hash每个恳求按拜访IP的哈希成果分配,使来自同一个IP的访客固定拜访一台后端服务器,而且能够有用处理动态网页存在session同享问题 |
fair | 比weight、ip_hash更智能的负载均衡算法,依据页面巨细和加载时刻长短智能进行负载均衡,依据后端服务器呼应时刻来分配恳求。nginx不支撑fair,需求运用的话必须安装upstream_fair模块 |
url_hash | 按拜访url的哈希成果来分配恳求,使每个url定向到一台后端服务器,能够进一步进步后端缓存服务器的功率例如: hash $request_uriconsistent;#依据用户恳求的uri做hash |
least_conn | 最小衔接调度算法,优先将客户端恳求调度到当前衔接最少的服务器 |
Nginx 四层署理装备:
./configure --with-stream
和http同等级:所以一般只在http上面一段设置,
stream {
upstream appserver {
server 192.168.80.100:8080 weight=1;
server 192.168.80.101:8080 weight=1;
server 192.168.80.101:8081 weight=1;
}
server {
listen 8080;
proxy_pass appserver;
}
}
http {
......
7层署理与4层署理差异
署理方法 | 差异 |
---|---|
4层 | 依据IP+PORT(TCP+UDP)转发 |
7层 | 依据http,https,mail署理转发 |
总结
- Nginx 支撑哪些类型署理?
-
反向署理 署理服务端 7层方署理向署理 4层方向
-
正向署理 署理客户端 署理缓存
-
7层 依据 http,https,mail 等七层协议的反向署理
-
运用场景: 动态别离
-
特色:功用强壮,但转发功能较4层偏低
-
装备: 在http块里设置 upstream 后端服务池: 在seever块里用location匹配动态页面途径,运用 proxy_pass http://服务器池名 进行七层协议(http协议)转发
http {
upstream backersrver [weight= fail= ...]
server IP1: PORT1 [weight= fail= ...]
......
}
server {
listen 80;
server_name XXX;
location ~ 正则表达式 {
proxy_pass http://backeserer;
.......
}
}
}
- 4层 依据 IP+(tcp或许udp)端口的署理
-
运用场景: 负载均衡器 /负载调度器,做服务器集群的拜访入口
-
特色:只能依据IP+端口转发,但转发功能较好
-
装备: 和http块同一层,一般在http块上面装备
stream {
upstream backerserver {
server IP1:PORT1 [weight= fail= ...]
server IP2:PORT2 [weight= fail= ...]
.....
}
server {
listen 80;
server_name XXX;
proxy_pass backerserver;
}
调度算法 6种
轮询 加权轮询 最少/小衔接 ip_hash fair url_hash
会话坚持 ip_hash url_hash 可能会导致负载不均衡 经过后端服务器的session同享来实现
Nginx+Tomcat 动态别离
- Nginx处理静态资源恳求,Tomcat处理动态页面恳求
怎样实现动态别离
- Nginx运用location去正则匹配用户的拜访途径的前缀或许后缀去判别承受的恳求是静态的仍是动态的,静态资源恳求在Nginx本地进行处理呼应,动态页面经过反向署理转发给后端应用服务器
怎样实现反向署理?
-
先在http块中运用upstream模块定义服务器组名,运用location匹配途径在用porxy_pass http://服务器组名 进行七层转发转发
反向署理2种类型
- 依据7层的协议http,HTTPS,mail署理
- 依据4层的IP+(TCP/UDP)PORT的署理
4层署理装备:
-
在http块同一层上面装备stream模块,在stream模块中装备upstream模块定义服务器组名和服务器列表,在stream模块中的server模块装备监听的IP:端口,主机名,porxy_pass 服务器组名
Nginx调度战略/负载均衡形式算法6种
轮询rr 加权轮询weight 最少/小衔接least ip_hash fair url_hash
装备在upstream 模块中
Nginx怎么实现会话坚持
ip_hash url_hash
经过后端服务器session同享
运用stick——cookie——insert依据cookie来判别
经过后端服务器session同享实现