目录
nginx构建动静分离
工作原理
部署配置Nginx+apache+tomcat动静分离
1、拓扑结构图:
2、服务器配置表
3、安装配置nginx server服务器
4、安装LAMP server服务器
5、安装配置tomcat
6、访问测试
部署配置Nginx+apache+tomcat群集调度
负载均衡介绍
1、为什么需要负载均衡
2、负载均衡的原理
3、负载均衡的作用
4、负载均衡的分类
5、最常见的四层和七层负载均衡
6、负载均衡应用场景
nginx项目拓扑图 (群集调度)
1、nginx 群集基本配置
2、配置步骤
3、访问测试 (超链接)
-
nginx构建动静分离
工作原理
Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat、Resin、apache 处理动态页面。
Resin [ˈrezɪn]是一个非常流行的支持servlets 和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。虽然它可以显示动态内容,但是它显示静态内容的能力也非常强...
软件类型:应用服务器 |授权协议:GPLv2|开发语言:Java、C/C++
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开。如下图所示:
说明:
- 代理服务器和静态服务器即为一台服务器上,这里只是为了明显区分动静分离所处服务器的不同
2、静态服务器中,存放的资源主要是源代码文件、图片、属性、样式以及其它所有非动态的资源文件;
3、调度规则,即为代理服务器,这里是Nginx的服务器调度规则;
4、动态服务器,其种类比较繁多,可以是Apache、Tomcat、IIS以及其它Web服务器,它们一般分别隶属于一台服务器;
实现说明
如上图所示,当客户端访问代理服务器时:
首先,加载和显示存放在静态服务器中的静态资源,这里以html为例;
其次,如果上一步没有匹配对应的资源,我们就认为是动态访问请求,那么就直接访问参与负载均衡的服务器列表中的某一台服务器的动态操作;
最后,Nginx作为Web服务器加载静态资源(html、css、js、image),而静态资源如果需要动态获取数据,并填充到页面显示,会自动去往负载服务器获取并返回,在实现了动态分离的同时,也参与了服务器的负载均衡。
部署配置Nginx+apache+tomcat动静分离
1、拓扑结构图:
2、服务器配置表
| 服务器名 | 安装软件 | IP 地址 |
| nginxserver | nginx | 192.168.6.10 |
| LAMPserver | httpd php mariadb-sever | 192.168.6.20 |
| tomcatserver | tomcat | 192.168.6.30 |
3、安装配置nginx server服务器
3-1、配置ip地址:192.168.6.10
3-2、安装nginx服务
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[yum]
baseurl=file:///media
enabled=1
gpgcheck=0
[root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar -zxf nginx-1.12.0.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/nginx-1.12.0/
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost nginx-1.12.0]# make && make install
[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin
[root@localhost nginx-1.12.0]# vim /etc/rc.d/init.d/nginx
添加:
#!/bin/bash
#chkconfig: 345 85 21
case $1 in
start)
/usr/local/sbin/nginx
;;
stop)
killall -9 nginx
rm -f /var/run/nginx.pid
;;
restart)
$0 stop
$0 start
;;
*)
echo "start|stop|restart"
;;
esac
[root@localhost nginx-1.12.0]# chmod a+x /etc/rc.d/init.d/nginx
[root@localhost nginx-1.12.0]# chkconfig --add nginx
[root@localhost nginx-1.12.0]# chkconfig nginx on
[root@localhost nginx-1.12.0]# systemctl start nginx
[root@localhost nginx-1.12.0]# systemctl status nginx
3-3、配置nginx
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
修改:在 server{ }选项中添加两组location选项
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#
location ~ .php$ {
proxy_pass http://192.168.6.20;
}
location ~ .jsp$ {
proxy_pass http://192.168.6.30:8080;
}
3-4、重启服务
[root@localhost nginx-1.12.0]# killall -9 nginx
[root@localhost nginx-1.12.0]# nginx
4、安装LAMP server服务器
4-1、配置IP地址:192.168.6.20
4-2、安装服务
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[yum]
baseurl=file:///media
enabled=1
gpgcheck=0
[root@localhost ~]# yum -y install httpd* php* mariadb mariadb-server mariadb-devel
4-3、配置mariadb服务
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# mysqladmin -uroot password 123.com
[root@localhost ~]# mysql -uroot -p123.com
MariaDB [(none)]> grant all on *.* to 'root'@'192.168.6.%' identified by '123.com';
MariaDB [(none)]> exit
4-4、配置PHP服务
[root@localhost ~]# vim /etc/php.ini
修改:
default_charset = "UTF-8" 692
short_open_tag = On 211
4-5、配置httpd服务
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
修改:在以下容器中添加内容
DirectoryIndex index.php index.html
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
[root@localhost ~]# systemctl restart httpd
5、安装配置tomcat
5-1、配置IP地址:192.168.6.30
解压tomcat
[root@localhost ~]# tar zxf tomcat-8.5.16.tar.gz -C /usr/src/
[root@localhost ~]# cp -r /usr/src/apache-tomcat-8.5.16/ /usr/local/tomcat
5-2、启动服务
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
5-3、配置tomcat
[root@localhost ~]# mkdir /myweb
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
在上面添加:
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
6、访问测试
6-1、在nginx server服务器上创建html测试页
[root@localhost nginx-1.12.0]# echo "这是html静态页面测试,连接nginx服务器" > /usr/local/nginx/html/index.html
原本有页面,可以不改
6-2、在 LAMPserver 服务器上创建php测试页
[root@localhost ~]# vim /var/www/html/index.php
添加:
$link=mysqli_connect('192.168.6.20','root','123.com');
if($link) echo "恭喜你,数据库连接成功啦!!";
?>
[root@localhost ~]# systemctl restart mariadb
-
- 在tomcat server服务器上创建jsp脚本测试页
[root@localhost ~]# vim /myweb/index.jsp
添加:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<% out.println("www这是tomcat服务器的数据");%>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
测试:启动客户端192.168.6.50
访问测试静态页面测试:
php页面测试:
jsp 脚本测试:
部署配置Nginx+apache+tomcat群集调度
负载均衡介绍
1、为什么需要负载均衡
1、为什么需要负载均衡
当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。
从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式。将相同的应用部署到多台机器上。解决访问统一入口问题,我们可以在集群前面增加负载均衡设备,实现流量分发。
2、负载均衡的原理
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。
纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。
因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力。
比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。这就是典型的集群和负载均衡架构: 如下图:
应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)
3、负载均衡的作用
1).解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);
2).提供故障转移,实现高可用;
3).通过添加或减少服务器数量,提供网站伸缩性(扩展性);
4).安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)
4、负载均衡的分类
1)二层负载均衡(mac)
根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应
2)三层负载均衡(ip)
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应
3)四层负载均衡(tcp)
在三次负载均衡的基础上,用ip+port接收请求,再转发到对应的机器。
4)七层负载均衡(http)
根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
5、最常见的四层和七层负载均衡
1)四层的负载均衡就是基于IP+端口的负载均衡:
在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡。
对应的负载均衡器称为四层交换机(L4 switch),主要分析IP层及TCP/UDP层,实现四层负载均衡。此种负载均衡器不理解应用协议(如HTTP/FTP/MySQL等等)。
实现四层负载均衡的软件有:
F5:硬件负载均衡器,功能很好,但是成本很高。
lvs:重量级的四层负载软件
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
haproxy:模拟四层转发,较灵活
F5方案:
负载均衡,英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。需要说明的是:负载均衡设备不是基础网络设备,而是一种性能优化设备。对于网络应用而言,并不是一开始就需要负载均衡,当网络应用的访问量不断增长,单个处理单元无法满足负载需求时,网络应用流量将要出现瓶颈时,负载均衡才会起到作用。
2)七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡
对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议。
实现七层负载均衡的软件有:
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
apache:功能较差
Mysql proxy:功能尚可。
总的来说,一般是lvs做4层负载;nginx做7层负载;haproxy 比较灵活,4层和7层负载均衡都能做。
MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等
6、负载均衡应用场景
场景一:应用于高访问量的业务
如果您的应用访问量很高,您可以通过配置监听规则将流量分发到不同的服务器上。
场景二:横向扩张系统
您可以根据业务发展的需要,通过随时添加和移除服务器,来扩展应用系统的服务能力,适用于各种Web服务器和App服务器。
场景三:消除单点故障
当其中一部分服务器发生故障后,负载均衡会自动屏蔽故障的服务器,将请求分发给正常运行的服务器,保证应用系统仍能正常工作。
场景四:同城容灾 (多可用区容灾)
为了提供更加稳定可靠的负载均衡服务,当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内切换到另外一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务,保证服务依然正常运行。
nginx项目拓扑图 (群集调度)
1、nginx 群集基本配置
| 服务器名 | 安装软件 | IP 地址 |
| nginxserver | nginx | 192.168.6.10 |
| LAMP-1 | httpd php mariadb-server | 192.168.1.20 |
| LAMP-2 | httpd php mariadb-server | 192.168.6.1 |
| tomcat-1 | tomcat | 192.168.1.30 |
| tomcat-2 | tomcat | 192.168.6.2 |
2、配置步骤
根据之前的内容,分别安装配置 LAMP-1、LAMP-2、tomcat-1、tomcat-2 等服务器在每台服务器上分别创建内容不同的测试页面。
第二台LAMP:
配置IP地址:192.168.6.1
安装服务
[root@localhost ~]# mount /dev/cdrom /media/
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[yum]
baseurl=file:///media
enabled=1
gpgcheck=0
[root@localhost ~]# yum -y install httpd* php* mariadb mariadb-server mariadb-devel
配置mariadb服务
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# mysqladmin -uroot password 123.com
[root@localhost ~]# mysql -uroot -p123.com
MariaDB [(none)]> grant all on *.* to 'root'@'192.168.6.%' identified by '123.com';
MariaDB [(none)]> exit
配置PHP服务
[root@localhost ~]# vim /etc/php.ini
修改:
default_charset = "UTF-8" 692
short_open_tag = On 211
配置httpd服务
vim /etc/httpd/conf/httpd.conf
修改:在以下容器中添加内容
DirectoryIndex index.php index.html
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
[root@localhost ~]# systemctl restart httpd
LAMP-1的页面:(不动)
LAMP-2的页面:
[root@localhost ~]# vim /var/www/html/index.php
添加:
$link=mysqli_connect('192.168.6.20','root','123.com');
if($link) echo "恭喜我,数据库连接成功啦!!";
?>
[root@localhost ~]# systemctl restart mariadb
第二台tomcat:
配置IP地址:192.168.6.2
解压tomcat
[root@localhost ~]# tar zxf tomcat-8.5.16.tar.gz -C /usr/src/
[root@localhost ~]# cp -r /usr/src/apache-tomcat-8.5.16/ /usr/local/tomcat
配置tomcat
[root@localhost ~]# mkdir /myweb
[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml
在上面添加:
启动服务
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
tomcat-1的页面:(不动)
tomcat-2的页面:
[root@localhost ~]# vim /myweb/index.jsp
添加:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<% out.println("这是tomcat2服务器的数据");%>
在nginx server服务器上正常安装nginx软件,进行配置:
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
添加:
在http{ 之内,server{ 上一行添加服务器池
upstream apache-server {
server 192.168.6.20:80 weight=1;
server 192.168.6.1:80 weight=1;
}
upstream tomcat-server {
server 192.168.6.30:8080 weight=1;
server 192.168.6.2:8080 weight=1;
}
在server{ 中添加:
location ~ .php$ {
proxy_pass http://apache-server;
}
location ~ .jsp$ {
proxy_pass http://tomcat-server;
}
3、访问测试 (超链接)
在nginx server上创建静态页面
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/html/index.html
添加:
这是nginx构建的静态页面
点击此处访问PHP页面
点击此处访问JSP页面
[root@localhost nginx-1.12.0]# killall -9 nginx
[root@localhost nginx-1.12.0]# nginx
客户端访问测试:
访问静态页面:
访问php页面:
刷新页面后:
返回主页,访问jsp页面
刷新页面:



