目录
一、什么是负载均衡
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。
负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。具体实现方法是将过载节点上的任务转移到其他轻载节点上,尽可能实现系统各节点的负载平衡,从而提高系统的吞吐量。负载共享有利于统筹管理分布式系统中的各种资源,便于利用共享信息及其服务机制扩大系统的处理能力。
动态负载共享策略是指把系统中各节点上已有的负载作为参考信息,在运行过程中,根据系统中各节点的负载状况,随时调整负载的分配,使各节点尽可能保持负载的平衡。
负载:负载共享算法中的关键问题是如何确定负载。根据任务负载可以判断某一任务在特定节点的响应时间,确定在该节点上的执行性能。曾经被研究及使用的负载包括CPU队列长度、某时间内的平均CPU队列长度、CPU利用率等。Kunz发现负载的选取对系统性能有着重要的影响,而最有效的负载计算方式是CPU队列长度。
动机:用户将任务提交给系统处理,由于任务到达的随机性导致了某些处理机处于过载而某些处理处于空闲或轻载状态。负载共享能够通过将过载处理机上的任务迁移到轻载处理机上执行来提高性能。
性能:从静态角度看,高性能是指各处理机上的负载基本平衡。从动态角度看,性能的尺度是任务的平均响应时间,而任务的响应时间是指任务从提交到开始执行的持续时间。
负载平衡策略:
动态负载平衡策略包含四个部分:转移策略、选择策略、定位策略和信息策略。
二、什么是动静分离
动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
因为NGINX处理静态页面的效率远远高于Tomcat的处理能力(大概处理能力比值在6:1左右);同时动态资源和静态资源分开,服务器结构会更加清晰明了。
三、Nginx+Tomcat动静分离
3.1配置nginx
#关闭防火墙
[root@naginx ~]# systemctl stop firewalld.service
[root@naginx ~]# setenforce 0
#安装依赖环境包
yum -y install \
gcc \
gcc-c++ \
pcre-devel \
zlib-devel
#解压
[root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
#编译及安装
cd nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make
make install
useradd -M -s /sbin/nologin nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx nginx-1.12.2]# nginx #开启服务
#语法检查
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
使用service控制管理
[root@nginx nginx-1.12.2]# cd /etc/init.d/
[root@nginx init.d]# vim nginx
//编写以下内容
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
#增加执行权限
[root@nginx init.d]# chmod +x nginx
[root@nginx init.d]# chkconfig --add nginx
[root@nginx init.d]# chkconfig --level 35 nginx on
[root@nginx init.d]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22379/nginx: master
3.2节点服务器部署Tomcat
[root@tomcat ~]# systemctl stop firewalld
[root@tomcat ~]# setenforce 0
[root@tomcat ~]# 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 PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
使环境变量生效
[root@tomcat ~]# source /etc/profile
[root@tomcat ~]# tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
#重命名为tomcat
[root@tomcat ~]# cd /usr/local/
[root@tomcat ~]# mv apache-tomcat-8.5.16/ tomcat
启动tomcat
/usr/local/tomcat/bin
shutdown.s:控制服务关闭
startup.sh:控制服务开启
#设置服务开启关闭的超链接 便于管理
[root@tomcat]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
[root@tomcat]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#启动程序
[root@tomcat]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
#查看端口
[root@tomcat]# netstat -ntap | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 19537/java
3.3配置动静分离
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
#access_log logs/host.access.log main;
//添加
location ~.*.jsp$ { #匹配的jsp页面跳转代理服务器
proxy_pass http://14.0.0.10:8080;
proxy_set_header Host $host;
}
[root@nginx init.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面!</h1>
<p>这是个静态页面</p>
</body>
</html>
toamca节点服务器配置动态页面
[root@tomcat01 ~]# cd /usr/local/tomcat/webapps/
[root@tomcat01 webapps]# mkdir test
[root@tomcat01 webapps]# cd test/
[root@tomcat01 test]# vim index.jsp
//编写动态页面
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ htm14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content"text/thml; charaset=YTF-8">
<title>动态页面01</title>
</head>
<body>
<div>动态页面01</div>
</body>
</html>
#启动服务
[root@tomcat test]# startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.8.0_91/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
访问测试
在Tomcat上的动态页面插入一张图片
[root@tomcat01 test]# vim /usr/local/tomcat/webapps/test/index.jsp
<div>动态页面02</div>
//下面
<img src="images.jpg"/> //插入一张图片
编辑Nginx配置文件
#access_log logs/host.access.log main;
//下面插入内容
location ~.*\.(gif|jpg|jpeg|png|bmp|swf|scc)$ { //扩展名结尾
root html; //在自己站点找到相应资源
expires 30d; //客户浏览器缓存30天
}Nginx创建站点目录并并上传图片
[root@nginx ~]# cd /usr/local/nginx/html/
[root@nginx html]# mkdir test
[root@nginx html]# cd test/
[root@nginx test]# rz -E
rz waiting to receive.
[root@nginx test]# ls
images.jpg
#重启nginx服务
[root@nginx test]# service nginx stop
[root@nginx test]# service nginx start
四、nginx和tomcat负载均衡
4.1配置tomcat站点
[root@localhost local]# mkdir -pv /web/webapp1
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/webapp1"
[root@localhost local]# vim /web/webapp1/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动态页面</title>
</head>
<body>
<h1>动态页面01</h1>
<p>这是个动态页面01</p> ##此处节点2编辑为<p>这是个动态页面02</p>,其余相同
</body>
</html>
.在tomact的主配置文件中添加指定web应用的文档基准目录区段
[root@localhost local]# vim /usr/local/tomcat/conf/server.xml
#在第148行<Host>字段下面添加<Context>字段参数
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/webapp1" path="" reloadable="false">
</Context>
注:docBase:web应用的文档基准目录
reloadable:设置监视“类”是否变化
path="":设置默认“类”
nginx负载均衡配置
[root@localhost test]# vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcat_server { #配置后端服务器池,以提供响应数据,权重为1:1
server 14.0.0.20:8080 weight=1;
server 14.0.0.30:8080 weight=1;
}
server {
listen 80;
...省略内容
location ~ .*.jsp$ {
proxy_pass http://tomcat_server; #将java文件请求转发到Tomcat服务器池处理
proxy_set_header Host $host;
}
[root@nginx1 html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx1 html]# systemctl stop firewalld.service
[root@nginx1 html]# setenforce 0
[root@nginx1 html]# nginx
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201130224913884.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80OTIyODcyMQ==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201130231032398.png)