这篇文章主要是应对web方面的架构,而且不是什么很新鲜的东西了(对于新的东西,各个公司都有保密协议),Nginx负载均衡。
什么是Nginx
什么是负载均衡
使用Nginx实现负载均衡
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。
为什么选用Nginx实现负载均衡
1、因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。
2、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构。
3、Nginx对网络的依赖比较小。
4、Nginx安装和配置比较简单。
5、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发(数据来自2013年的测试)
6、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等, 并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。
7、Nginx对请求的异步处理可以帮助节点服务器减轻负载。
8、Nginx能支持http和Email,这样就在适用范围上面小很多,专门精于http和Email方面。
Nginx负载均衡实现的原理
Nginx采用的是反向代理技术,代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。
Nginx负载均衡的优缺点
优点:基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的,性价比高,实际上如果几台服务器,用F5之类的硬件产品显得有些浪费,而用软件就要合算得多,因为服务器同时还可以跑应用做集群等。
缺点:负载能力受服务器本身性能的影响,性能越好,负载能力越大,不能存储session,有文件的上传下载问题。
综述:对我们管理系统应用环境来说,由于负载均衡器本身不需要对数据进行处理,性能瓶颈更多的是在于后台服务器,通常采用软负载均衡器已非常够用且其商业友好的软件源码授权使得我们可以非常灵活的设计,无逢的和我们管理系统平台相结合。
实现nginx负载均衡
1.创建三台虚拟机,分别是安装httpd的httpd01和httpd02,安装Nginx的nginx01。
yum安装nginx步骤
- rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- yum install nginx
2.在httpd的虚拟机放入测试的网页
比如我放入的网页是显示他们ip的网页,存放位置/var/www/html
3.配置nginx负载均衡
那我们看看Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配
-
轮询(默认), 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
-
weight, 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
-
ip_hash, 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
-
fair(第三方), 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
-
url_hash(第三方), 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
一,配置轮询模式
首先,配置/etc/nginx/nginx.conf文件
http{
.......#原配置保持不动,添加一下配置
upstream www.test.com {
server 192.168.1.201:80;
server 192.168.1.202:80;
}
}
其次,配置/etc/nginx/conf.d/default.conf文件
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://www.test.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
该模式下的访问页面

这是第一次访问

这是第二次访问的时候
二、weight指定轮询几率
其实就是在第一步的基础上添加一个参数
修改/etc/nginx/nginx.conf文件
upstream www.test.com{ server 192.168.1.201:80 weight=1; server 192.168.1.202:80 weight=2; }
这个参数的意思是202的访问次数是201的两次,这样可以实现在服务器配置不相同的时候实现访问的均衡,不会因为某个服务器的配置过低导致宕机
三、ip_hash实现负载均衡,解决session问题
upstream www.test.com{ ip_hash; server 192.168.1.201:80; server 192.168.1.202:80; }
四、fair实现最短响应时间(这个需要安装fair第三方插件)
upstream www.test.com{ server 192.168.1.201:80; server 192.168.1.202:80; fair; }
五、url_hash实现url分类缓存
upstream www.test.com{
server 192.168.1.201:80;
server 192.168.1.202:80;
hash $request_uri;
hash_method crc32;
}
文章评论