文章目录
一、动静分离架构
1.1 tomcat
1.1.1 概述
最初是由Sun的软件架构师詹姆斯.邓肯。戴维森开发
安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件
1.1.2 目录结构
- bin:存放启动和关闭Tomcat脚本
- conf:存放Tomcat不同的配置文件
- doc:存放Tomcat文档
- lib:存放Tomcat运行需要的库文件
- logs:存放Tomcat执行时的LOG文件
- src:存放Tomcat的源代码
- webapps:Tomcat的主要Web发布目录
- work:存放jsp编译后产生的class文件
1.2 nginx
1.2.1 nginx优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力;
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次;
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M;
- Nginx处理静态资源的能力是Tomcat处理的6倍。
1.2.2 Nginx动静分离实现原理
- 如下图所示,我们部署了 nginx 和 tomcat服务器,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在 tomcat 的webroot目录下面。
- 当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源。
- 如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能
二、实例实现高可用负载均衡
2.1 nfs存储服务器的配置
systemctl stop firewalld
setenforce 0
yum -y install nfs-utils rpcbind
mkdir -p /opt/web1/
mkdir -p /opt/web2/
# 网页内容的制作
vi /opt/web1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>tomcat1</title>
</head>(body><% out.println("this is tomcat1 server1");%>
<div>动态页面1</div><br/><img src="a.jpg" />
</body>
</html>
vi /opt/web2/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>tomcat2</title>
</head>(body><% out.println("this is tomcat2 server2");%>
<div>动态页面1</div><br/><img src="b/png" />
</body>
</html>
# nfs服务器分发的地址
vi /etc/exports
/opt/web1 192.168.10.13(ro)
/opt/web2 192.168.10.14(ro)
systemctl start nfs
systemctl restart rpcbind
最后可通过showmount -e 来查看nfs内容分发情况
2.2 tomcat动态节点
2.2.1 java环境的布置
tar zxvf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91/ /usr/local/java
vi /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre
source /etc/profile
echo $PATH
# 测试java环境
vi abc.java
public class abc {
public static void main (String[] args) {
System.out.println("你好,世界!");
}
}
javac abc.java
java abc
说明java环境已经布置好,可以进行tomcat的安装
2.2.2 tomcat的安装
tar zxvf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat8
mkdir /webapp1
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
vi /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/webapp1" path="" reloadable="false"> # 为补充项
</Context>
mount 192.168.10.19:/opt/web1 /webapp1/
tomcatup
netstat -anpt | grep 8080
# 然后在网页上面访问 http://localhost:8080 能够访问到动态网页即可
# 另一台tomcat节点上面的配置与本台节点相同
2.3 nginx调度器上面的配置
仅实现负载均衡,不实现高可用的情况下:
systemctl disable firewalld
setenforce 0
yum -y install pcre-devel openssl-devel zlib-devel
tar zxvf nginx-1.12.2.tar.gz
useradd -M -s /sbin/nologin nginx
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --usr=nginx --group=nginx
make && make install
ln -s /usr/local/nginx/conf/nginx.conf /etc/
ln -s /usr/local/nginx/sbin/nginx /usr/bin
vi /etc/nginx.conf
#gzip on;
upstream tomcat_server {
server 192.168.10.13:8080 weight=1;
server 192.168.10.14:8080 weight=1;
}
server {
listen 80;
server_name localhost;
}
location ~ \.jsp$ {
proxy_pass http://tomcat_server;
}
nginx
netstat -anpt | grep 80
# 通过网页可以访问到http://192.168.10.11链接到nginx网页,http://192.168.10.11/index.jsp被代理到tomcat节点,并且能够实现轮询负载均衡
通过keepalived实现高可用:
# 实现keepalive群集
tar zxvf keepalived-2.0.13.tar.gz
yum -y install popt-devel kernel-devel openssl-devel
cd keepalived-2.0.13
./configure --prefix=/
make && make install
cp keepalived-2.0.13/keepalived/etc/init.d/keepalived /etc/init.d/
vi /etc/init.d/keepalived
# chkconfig: 35 21 79 # 运行界面修改为35
chkconfig --add keepalived
chkconfig --list
vi /etc/keepalived/keepalived.conf # 需要重新配置文件里面的所有内容
! Configuration File for keepalived
globa_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
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.10.100
}
}
# 编写脚本
vi /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
systemctl start keepalived.service
systemctl status keepalived.service
# 另一台nginx调度器上面的配置过程与第一台相同,只不过在配置文件的时候需要修改一下三项:
vi /etc/keepalived/keepalived.conf
router_id nginx2
state BACKUP
priority 105
当我们将主调度器上面关闭keepalive服务后,虚拟地址将自行漂移到备用调度器上面,从而实现我们想要的高可用情景。