负载均衡原理及其使用nginx反向代理实现

原理篇介绍负载均衡和nginx反向代理的原理,实现篇就是nginx实现的负载均衡demo介绍

------------------------------------------------原理篇

负载均衡

原理:将访问流量根据转发策略分发到后端多台云服务器(ECS实例)的流量分发控制服务

概述:通过设置虚拟服务地址,将添加的ECS实例虚拟成一个高性能、高可用的应用服务池,并根据转发规则,将来自客户端的请求分发给云服务器池中的ECS实例。

优点:

扩展了应用的服务能力,增强了应用的可用性,简称:SLB。

解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

提供故障转移,实现高可用;

通过添加或减少服务器数量,提供网站伸缩性(扩展性);

安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

 

反向代理

代理与反向代理:VPN服务就是我们常用的一种代理(正向代理),用户将请教交给代理服务器,代理服务器访问网站获取数据,之后代理服务器再将数据返还给用户。在这个过程中,应用服务器并不知道用户的存在。只知道代理浏览器的访问。 
反向代理是指在服务器端的代理,代理服务器接收用户的请求,再转发给真实服务器,之后再返回给代理服务器再给用户,在这个过程中,用户并不知道真实服务器的存在。

一句话概括:普通代理方式是客户使用代理访问多个外部Web服务器,反向代理模式是多个客户使用它访问内部Web服务器,而非访问外部服务器

反向代理服务器管理了一组服务器,当用户访问时,代理服务器根据负载均衡算法将请求转发到真实服务器,真实服务器也通过反向代理服务器返还数据。内部服务器不对外部提供服务,所以不需要外部IP,而反向代理服务器需要两个网卡,一个IP用于外部用户访问使用,另外一个用于内部使用。

如上图所示,当用户发起访问,请求访问的ip地址是114.100.20.200,到达反向代理服务器时,根据负载均衡算法得到一个真实服务器的IP地址,并将用户请求转发到该服务器上,当真实服务器处理完之后将数据返回到反向代理服务器。反相代理服务器再将该响应的内容返回给用户。

优点:反向代理服务器位于应用层,负载均衡方案和反向代理服务器集成在了一起,部署简单
缺点:反向代理服务器用户处理所有的请求和响应,其性能可能成为服务器集群的瓶颈
(这部分内容原文链接反向代理

 

Nginx支持的负载均衡调度算法:

1.weight轮询(默认,常用):
接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

2.ip_hash(常用):
每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

3.fair:
智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

4.url_hash:
按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。
(这部分内容原文链接nginx支持的负载均衡方式

 

------------------------------------------------实现篇

注意:①必须是不同的tomcat。②必须是同名项目,才能达到多服务器(集群)的目的

1、找到tomcat安装目录,复制整个文件夹,改名为tomcat01(名字是为了好记,复制了之后可以把webapps下的项目都删掉,减小容量,提高复制速度),然后复制tomcat01,改名tomcat02

2、找到tomcat02/conf目录下的server.xml,然后修改访问的各种端口,3个地方

<!-- change 8005  to  8006 -->
<Server port="8006" shutdown="SHUTDOWN">


<!-- change 8080  to  8081 -->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />


<!-- change 8009  to  8010 -->
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

3、准备一个简单的web项目,我的项目名为web_01,index.jsp内容如下。如果不想自己创建,可以下载我这里的war包,点击下载war。(下载所需的5分是系统自定义的,我也不想...)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% System.out.println("Servlet-01"); %>
<html>
  <head>
    <title>Servlet-01</title>
  </head>
  <body>
    Servlet-01
  </body>
</html>

4、打成war包,如web_01.war

5、复制web_01.war到tomcat01/webapps下,启动tomcat01,tomcat会自动解压,然后在浏览器中访问localhost:8080/web_01就可以看到Servlet-01字符串了,tomcat窗口也能看到这个Servlet-01提示信息.注意:不要关闭tomcat01

6、复制web_01.war到tomcat02/webapps下,建议启动tomcat02让tomcat自动解压,然后修改index.jsp,把Servlet-01改成Servlet-02,如下。把内容改了是用于验证本次负载均衡测试是否成功。然后在浏览器中访问localhost:8081/web_01就可以看到Servlet-02字符串。注意:不要关闭tomcat02

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<% System.out.println("Servlet-02"); %>
<html>
  <head>
    <title>Servlet-02</title>
  </head>
  <body>
    Servlet-02
  </body>
</html>

7、到这里,可能浏览器没有返回Servlet-02,每次都是返回Servlet-01或者报错。可能原因:

安装tomcat的时候,环境变量配置了%catalina_home%,导致启动第二个tomcat的时候,访问的还是第一个tomcat。每次启动tomcat,都会找到%catalina_home%对应的路径,然后不管启动多少个tomcat,响应的都是%catalina_home%对应的tomcat了

8、安装nginx,nginx是使用反向代理实现负载均衡的,这里我选择的负载均衡调度算法是weight轮询,通过配置权重,决定访问哪个tomcat的几率大小

9、修改nginx安装目录下的conf/nginx.conf文件

http {
	#让nginx找到对应目录下的所有配置文件,vhost这个名字是随便起的,然后在conf目录下新建该vhost文件夹
	include	vhost/*.conf;
    include       mime.types;
    default_type  application/octet-stream;



    #gzip  on;
	
	#配置访问的端口和权重
	upstream localhost{
		server localhost:8080 weight=1;
		server localhost:8081 weight=1;
	}

10、在新建的vhost文件夹下新建vhost.conf,这个名字可以随便起,内容如下。这部分主要是为了域名解析,因为我是单机。注意:修改完配置文件之后,要重新加载(如果你已经启动了nginx),cmd到nginx目录下,执行nginx -s reload命令

server {
	listen	80;
	#域名
	server_name	www.xxx.com;
	location	/	{ 
		#代理路径,http://localhost的这个localhost就是nginx.conf下的upstream localhost
        #这个localhost,然后转到底下的两个服务器,端口为8080,8081
		proxy_pass	http://localhost;
		#代理超时时间
		proxy_connect_timeout	500ms;
	}
}

11、修改C:\Windows\System32\drivers\etc\hosts文件,这里需要用管理员模式打开,可能会修改不了,具体解决办法就另外百度吧


# 配置本机域名解析,对应nginx底下的
127.0.0.1 www.xxx.com

12、启动nginx,localhost:80,如果这时候没有出现nginx的提示界面,而是其他,那就是端口被占用。win10都是被iis占用了,把iis服务停止就好

13、访问http://www.xxx.com/web_01/,多次访问,会发现有时候返回01,有时候返回02,但二者大概五五开,因为权重设置了1:1,从tomcat的cmd窗口也能看到这个结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值