与服务器一起的日子

  • mysql
  • linux
  • 高可用
  • nginx
与服务器一起的日子
冰冷的机器也熄不灭火热的心
  1. 首页
  2. linux
  3. 正文

linux闲谈——nginx负载均衡

2017年11月19日 847点热度 0人点赞 0条评论

这篇文章主要是应对web方面的架构,而且不是什么很新鲜的东西了(对于新的东西,各个公司都有保密协议),Nginx负载均衡。

什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

什么是负载均衡

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

使用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步骤

  1. rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. yum install nginx

2.在httpd的虚拟机放入测试的网页

比如我放入的网页是显示他们ip的网页,存放位置/var/www/html

3.配置nginx负载均衡

那我们看看Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配

  1. 轮询(默认), 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

  2.  weight, 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

  3. ip_hash, 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

  4.  fair(第三方), 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  5.  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;
    }
}

该模式下的访问页面

nginx轮询——第一次访问

这是第一次访问

nginx轮询——刷新后

这是第二次访问的时候

二、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;
}

 

标签: 暂无
最后更新:2017年11月19日

jhin

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 与服务器一起的日子. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang