第一个分布式项目总结(5)——Nginx与负载均衡

本文介绍了Nginx作为轻量级的HTTP服务器和反向代理服务器,以及其在负载均衡中的应用。通过正向和反向代理的概念对比,展示了Nginx如何作为反向代理实现负载均衡,包括轮询、权重、ip_hash、least_conn等策略。此外,还提到了第三方插件和url_hash策略,以及通过Jmeter测试验证了负载均衡的效果。
摘要由CSDN通过智能技术生成

Nginx…怎么看怎么奇怪的单词…没办法它是俄罗斯人整出来的。
0.Nginx概述

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

概念性的就不多说了,说说他能干啥…
HTTP服务器: 首先这东西能很好的替代Apache,毕竟Apache这个东西,对高并发访问实在没什么好的支持。
代理服务器: 他能做很多代理服务器比如POP3、SMTP代理服务器
负载均衡服务器: Nginx可以作为反向代理进行负载均衡的实现。

对比项ApachheNginx
热部署不支持支持
系统压力很小
静态文件处理一般很好
反向代理一般很好

1.正/反向代理
1.1正向代理
画个图…正向代理如下:

PC0
PC1
正向代理服务器
远程网络资源

正向代理最大的特点是客户端非常明确要访问的服务器地址,正向代理,“它代理的是客户端,代客户端发出请求”。
1.2反向代理
反向代理如下图所示

PC0
PC1
正向代理服务器
业务服务器0
业务服务器1
业务服务器2

反向代理,“它代理的是服务端,代服务端接收请求”。
用起来…
我们以Nginx代理tomcat服务器为例。(毕竟项目里就这么用的)
首先搭建好Nginx和tomcat服务
Tomcat:JDK一装tomcat一装完事(JDK建议使用oracle的。OPENJDK有可能出版本冲突,我部署的时候刚开始就是OpenJDK,部署就抛异常JDK版本冲突改成oracle的就好使。我的开发环境是oracle的1.8)
Nginx:C语言开发的所以得有个gcc环境,以及几个库,怎么搭建不是本篇重点就不仔细介绍了。
都整完了我们把tomcat服务器启动。OK不用管它了。
Nginx需要做点配置,需要修改nginx.conf文件。
路径:nginx/conf/nginx.conf,留在负载均衡讲具体应该怎么写。
2.负载均衡
2.1Nginx负载均衡策略
1)轮询(默认方式):简单一人一次,在轮询中,如果服务器down掉了,会自动剔除该服务器。
也是我在用的…毕竟服务器性能都一样…

server {
        listen       80;#监听端口
        server_name  manager.eas.cn;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://manager.eas.cn;#域名
            index  index.html index.htm;
        }
    }
upstream manager.eas.cn {#转发给的Tomcat ip地址
	server 192.168.125.1:8080;#Tomcat1
	server 192.168.125.2:8080;#Tomcat2
    }

域名是通过DNS修改器SwitchHosts改的…
说个参数…backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。一定程度上实现高可用。
2)权重(weight):在轮询策略的基础上指定轮询的几率。用上面的例子改一下。

upstream manager.eas.cn {#转发给的Tomcat ip地址
	server 192.168.125.1:8080 weight=2;#Tomcat1
	server 192.168.125.2:8080 weight=1;#Tomcat2
    }

比例和配置的数字成正比,也就是说数越大负载量越大。权重越高分配到需要处理的请求越多。此策略比较适合服务器的硬件配置差别比较大的情况。Tomcat2就是Tomcat1的二倍。
3)指定IP地址(ip_hash):指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器。(一定程度上可以解决session跨域问题,都一台服务器有啥跨域…)

upstream manager.eas.cn {#转发给的Tomcat ip地址
	ip_hash; 
	server 192.168.125.1:8080 weight=2;#Tomcat1
	server 192.168.125.2:8080 weight=1;#Tomcat2
    }

ip_hash不能与backup同时使用。
4)least_conn:把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream manager.eas.cn {#转发给的Tomcat ip地址
	least_conn; 
	server 192.168.125.1:8080 weight=2;#Tomcat1
	server 192.168.125.2:8080 weight=1;#Tomcat2
    }

第三方插件方式
5)fair:按照服务器端的响应时间来分配请求,响应时间短的优先分配。
6)url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
在这里插入图片描述 用Jmeter做个测试…线程设了500个,只对两个Tomcat做负载均衡。我们一看出来在第二天Tomcat没启动之前响应时间一直在增高,启动之后开始下降。能看出来点效果…毕竟笔记本线程整太多就崩了…
补充下…反向代理也相当于做了缓存可以进一步提高性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值