文章目录
一、Tomcat重要目录
- bin:存放启动和关闭Tomcat脚本
- conf:存放Tomcat不同的配置文件
- doc:存放Tomcat文档
- lib:存放Tomcat运行需要的库文件
- logs:存放Tomcat执行时的LOG文件
- src:存放Tomcat的源代码
- webapps:Tomcat的主要Web发布目录
- work:存放jsp编译后产生的class文件
二、Nginx应用
- Nginx是一款非常优秀的HTTP服务器软件
- 支持高达50000个并发连接数的响应
- 拥有强大的静态资源处理能力
- 运行稳定
- 内存、cpu等系统资源消耗非常低
- 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力
三、Nginx负载均衡实现原理
- Nginx实现负载均衡是通过反向代理实现的
- Nginx配合反向代理的主要参数
- upstream服务池名 {}
- 配置后端服务器池,以提供响应数据
- proxy_pass http://服务池名
- 配置将访问请求转发给后端服务器池的服务器处理
- upstream服务池名 {}
四、Nginx动静分离实现原理
- 动静分离原理
- 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
- Nginx静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
五、案例部署
5.1 案例环境
以Nginx作为负载均衡器,Tomcat作为应用服务器
环境配置
Nginx服务器1:192.168.40.10
Nginx服务器2:192.168.40.20
Tomcat服务器1:192.168.40.30
Tomcat服务器2:192.168.40.40
nfs服务器:192.168.40.50
client:192.168.40.60
5.2 NFS服务器
yum -y install rpcbind nfs-utils
mkdir /web1
mkdir /web2
cd /web1
vi index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head><title>tomcat1</title></head>
<body>
<% out.println("this is tomcat1 server!!!");%>
<div>动态页面1</div><br/><img src="a.jpg" />
</body>
</html>
cd /web2
vi index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head><title>tomcat2</title></head>
<body>
<% out.println("this is tomcat2 server!!!");%>
<div>动态页面2</div><br/><img src="b.jpg" />
</body>
</html>
vi /etc/exports
/web1 192.168.40.30(ro)
/web2 192.168.40.40(ro)
showmount -e
5.3 tomcat1服务器
查看发布情况
showmount -e 192.168.40.50
安装JDK
tar zxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91/ /usr/local/java
cd /etc/profile.d/
vim java.sh
export JAVA_HOME=/usr/local/java ##设置java根目录
export PATH=$PATH:$JAVA_HOME/bin ##在PATH环境变量中添加JAVA根目录下的bin子目录
source java.sh ##java.sh脚本导入到环境变量,使其生效
安装tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16/ /usr/local/tomcat8
##优化执行路径
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
mkdir /webapp1
mount 192.168.40.50:/web1 /webapp1
vi /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
## 添加以下内容
<Context docBase="/webapp1" path="" reloadable="false">
</Context>
tomcatup ##启动tomcat
netstat -anpt | grep 8080
curl http://localhost:8080
[root@tomcat1 ~]# curl http://localhost:8080
<html>
<head><title>tomcat1</title></head>
<body>
this is tomcat1 server!!!
<div>动态页面1</div><br/><img src="a.jpg" />
</body>
</html>
5.4 tomcat2服务器
查看发布情况
showmount -e 192.168.40.50
安装JDK
tar zxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91/ /usr/local/java
cd /etc/profile.d/
vim java.sh
export JAVA_HOME=/usr/local/java ##设置java根目录
export PATH=$PATH:$JAVA_HOME/bin ##在PATH环境变量中添加JAVA根目录下的bin子目录
source java.sh ##java.sh脚本导入到环境变量,使其生效
安装tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16/ /usr/local/tomcat8
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
mkdir /webapp2
mount 192.168.40.50:/web2 /webapp2/
vi /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
## 添加以下内容
<Context docBase="/webapp2" path="" reloadable="false">
</Context>
tomcatup ##启动tomcat
netstat -anpt | grep 8080
curl http://localhost:8080
[root@tomcat2 ~]# curl http://localhost:8080
<html>
<head><title>tomcat2</title></head>
<body>
this is tomcat2 server!!!
<div>动态页面2</div><br/><img src="b.jpg" />
</body>
</html>
5.5 nginx1服务器
编译安装nginx
tar zxvf nginx-1.12.2.tar.gz
yum -y install pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx
cd nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/conf/nginx.conf /etc/
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd
vi /etc/nginx.conf
nginx -t
nginx
netstat -anpt | grep 80
修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
##添加以下内容
upstream tomcat_server {
server 192.168.40.30:8080 weight=1;
server 192.168.40.40:8080 weight=1;
}
location / {
root html;
index index.html index.htm;
}
## 添加z
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
}
nginx -t ## 查看语法是否正确
nginx ## 启动服务
netstat -anpt | grep 80
编译安装keepalived
modprobe ip_vs ##加载LVS内核模块
cat /proc/net/ip_vs
yum -y install ipvsadm
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel ##下载keepalived依赖环境
## 编译安装keepalived
tar -zxvf keepalived-2.0.13.tar.gz ## 安装包自行移动到站点下
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/
systemctl enable keepalived ## 开机自启
vi /etc/init.d/keepalived
# chkconfig: 35 21 79
chkconfig --add keepalived
chmod +x /etc/init.d/keepalived
## 编辑keepalived配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx1
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx.sh"
interval 2
weight 2
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 110
adver_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.40.100
}
}
## 编写脚本
vim /usr/local/src/nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ]
then /usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
then exit 1
else exit 0
fi
else
exit 0
fi
chmod +x /usr/local/src/nginx.sh ##为脚本增加执行权限
systemctl start keepalived.service
5.6 nginx2服务器
nginx的安装和配置文件的修改和nginx1一致
keepalived编译安装
modprobe ip_vs ##加载LVS内核模块
cat /proc/net/ip_vs
yum -y install ipvsadm
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel ##下载keepalived依赖环境
## 编译安装keepalived
tar -zxvf keepalived-2.0.13.tar.gz ## 安装包自行移动到站点下
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d/
systemctl enable keepalived ## 开机自启
vi /etc/init.d/keepalived
# chkconfig: 35 21 79
chkconfig --add keepalived
chmod +x /etc/init.d/keepalived
## 编辑keepalived配置文件
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx2
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx.sh"
interval 2
weight 2
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
adver_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.40.100
}
}
## 编写脚本
vim /usr/local/src/nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ]
then /usr/local/nginx/sbin/nginx
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
then exit 1
else exit 0
fi
else
exit 0
fi
chmod +x /usr/local/src/nginx.sh ##为脚本增加执行权限
systemctl start keepalived.service
5.7 验证
客户机访问漂移地址192.168.40.100
第一次访问:
第二次访问:
模拟主调度器故障,备调度器获取飘逸地址,正常访问
systemctl stop keepalived
第一次访问:
第二次访问: