nginx负载均衡+动静分离
架构解析
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://服务池名
配置将访问请求转发给后端服务器池的服务器处理
Nginx动静分离实现原理
服务器接收来自客户端的请求中,既有静态资源也有动态资源,静态资源(音频,图片等)由Nginx提供服务,动态资源Nginx转至后端( tomcat等)
Nginx静态处理优势
Nginx处理静态页面的效率远高于Tomcat的处理能力
若Tomcat的请求量为1000次,则Nginx的请求量为6000次
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
Nginx处理静态资源的能力是Tomcat处理的6倍
配置流程
环境准备
准备1,2,3,4,5,6号主机
1,2作为nginx服务器,IP地址分别为20.0.0.10和20.0.0.20
3,4作为tomcat服务器,IP地址分别为20.0.0.30和20.0.0.40
5作为网页存储器,IP地址为20.0.0.50
6作为客户端,IP地址为20.0.0.60
5nfs网页存储器配置
安装nfs
yum -y install rpcbind nfs-utils
创建网页(为有效区分创建两个不同的网页)
mkdir /web1
vi /web1/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>
mkdir /web2
vi /web2/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 20.0.0.30(ro)
/web2 20.0.0.40(ro)
重启服务后检查挂载
systemctl restart rpcbind
systemctl restart nfs
showmount -e
3,4tomcat服务器配置
解压java软件包
tar zvxf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91/ /usr/local/java
设置环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/java #设置java根目录
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre #在PATH环境变量中添加JAVA根目录下的bin子目录,jre/子目录
source /etc/profile ##java.sh脚本导入到环境变量,使其生效
echo $PATH
安装tomcat
解压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/shutdown.sh /usr/bin/tomcatdown
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
创建站点目录
mkdir /webapp
挂载
mount 20.0.0.50:/web1 /webapp
编辑配置文件
vi /usr/local/tomcat8/conf/server.xml
<Context docBase="/webapp" path="" reloadable="false">
</Context>
tomcatup #启动tomcat
netstat -anpt | grep 8080
curl http://localhost:8080 #查看
在浏览器中查看
同样的方式配置4 tomcat
在浏览器中查看
1,2nginx服务器配置
编译安装nginx
安装依赖包
yum -y install pcre-devel zlib-devel
创建不可登录用户
useradd -M -s /sbin/nologin nginx
解压软件包
tar zxvf nginx-1.13.7.tar.gz
编译安装
cd nginx-1.13.7/
./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/
编辑配置文件
vi /etc/nginx.conf
upstream tomcat_server {
server 20.0.0.30:8080 weight=1;
#节点 权重
server 20.0.0.40:8080 weight=1;
}
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
} #服务器地址池名
nginx -t #检查语法
nginx #启动服务
netstat -anpt | grep 80 #查看
在客户机浏览器上访问20.0.0.10/index.jsp
无法显示图片,因为图片作为静态资源需从本地调用将图片文件放入后
将图片文件放入默认的网页目录下后,再次访问
同样的方式配置2nginx
安装keepalived
安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
解压缩
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
vi /etc/init.d/keepalived
kconfig: 35 21 79 #运行级别
给予权限
chmod 755 /etc/init.d
chkconfig --add keepalived
chkconfig --list
编辑配置文件
vi /etc/keepalived/keepalived.conf
global_defs {
router_id nginx1 # 本服务器的名称
}
vrrp_script chk_http_port { #vrrp脚本
script "/usr/local/src/nginx.sh" #脚本路径 最后手动执行此脚本,以确保脚本能够正常运行
interval 2 #检测间隔时间 单位秒
weight 2
}
vrrp_instance vi_1 { #实例名称
state MASTER #指定keepalived的角色,MASTER为主,BACKUP为备
interface ens33 #当前进行vrrp通讯的网络接口卡
virtual_router_id 51 #虚拟路由编号,主从要一致
priority 110 #优先级,数值越大,获取地址优先级越大0
adver_int 1 #检查间隔,默认为1s (vrrp组播周期秒数)
authentication { #认证方式
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #调用检测脚本
}
virtual_ipaddress {
20.0.0.100 #定义虚拟ip
}
}
编辑脚本文件
vi /usr/local/src/nginx.sh
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 #启动服务
在2nginx服务器安装完keepalived之后将配置文件和脚本文件复制给另一个nginx服务器
在2nginx服务器上修改配置
vi /etc/keepalived/keepalived.conf
router_id nginx2 服务器名称
state BACKUP 指定服务器性质,MASTER为主,BACKUP为备
priority 105 优先级
启动服务
systemctl start keepalived.service
在浏览器上访问
模拟主调度器故障,备调度器获取飘逸地址,正常访问
在1nginx服务器上停止调度服务
systemctl stop keepalived
再次访问