Nginx 集群环境搭建

来源:互联网 发布:岗亭设计图软件 编辑:程序博客网 时间:2024/05/21 05:08

Nginx是什么?

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。一直纳闷这个X是怎么来的在网上查了查原来X代表很牛逼的样子,Nginx就是代表一个非常牛逼的引擎服务器系统,在很多年以前记得都是用的apache来作为分流以及负载均衡的作用,在过了几年中一个俄罗斯人又开发了一个性能更高的服务器来处理客户端向浏览器发出的各种请求,它从技术角度解决了大数量高并发的用户量访问,官网上面写的并发数量可以达到5万,实际项目应用中可能也打不到这么多,如果可以达到2、3万并发访问量,也是一个用户非常多的网站了。

下面我们就结合具体的例子以及特点原理啥的来应该这个技术到我们项目中来。


Nginx与Apache服务器对比 

1.轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 。nginx运行起来占用的资源CUP非常少,对于启动、重启都非常快速,在低配电脑上也可以快速的运行。
2.Nginx 配置简洁, Apache 复杂 
对于这一点使用过nginx的用户来说就会深有体会,如果不是学习他的原理以及各种细节,几乎一会的时间就可以搭起来一个nginx集群服务器,搭建可以按着下面的步骤自己搭建。
3.最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
4.nginx的负载能力比apache高很多
如果你的网站有大量的高并发用户访问可以试着使用nginx来作为负载均行。

典型案例

中国大陆使用nginx网站用户有:新浪、网易、腾讯等。这么大的公司都在使用nginx作为网站的负载均衡可以说,它已经是一个比较成熟的框架,值得我们去学习和了解,通过学习和了解这个服务器也了解了一些多线程、阻塞、非阻塞的概念,多线程是一个很不错的提升性能的解决方案,但有时在多个线程之间切换以及创建关闭线程很消耗系统资源,接触的一些多线程模式可以解决多线程带来的并发访问问题,如果master/worker,fulture,生产者/消费者模式等等,在nginx里面就用到了一个多线程模式,master/worker模式,这个模式在nginx中起着重要的作用。


Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已。 Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和内核的修改,它只是单纯地把用户的请求转发到后面的机器上。这就意味着,后端的 RS 不需要配置公网。

一、实验环境

Nginx 调度器 (public 172.16.254.200 privite 192.168.0.48)
RS1只有内网IP (192.168.0.18)
RS2只有外网IP (192.168.0.28)

二、配置文件

在nginx调度器上编辑配置文件

# vim /usr/local/nginx/conf/vhosts/lb.conf

添加如下内容:

upstream test {  ip_hash;  server 192.168.0.18;  server 192.168.0.28;}server {  listen 80;150  server_name www.aminglinux.com;  location / {    proxy_pass http://test/;    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 代理配置如出一辙,只是多了一个upstream,这个 upstream 用来定义后端的 RS,可以只写一个。 ip_hash 为 nginx 的一种调度算法,加上这一行后会达到这样的效果,即一个用户的请求会适中被分发到固定的一个 RS上。这样的好处是,可以避免把同一个用户的请求分发到不同的机器上而导致 session 丢失的情况。 upstream 里面, RS 后面的 ip 后面还可以加权重,比如"server 192.168.31.100 weight=100;"。还有一点要注意, upstream 后面的 test 是自定义的一个名字,可以随便写,唯一的要求是要和 proxy_pass 后面保持一致。

1  .upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。在上面的设定中,通过upstream指令指定了一个负载均衡器的名称test 。这个名称可以任意指定,在后面需要用到的地方直接调用即可

2.  Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方调度算法。  

  • 轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。Weight 指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。

  • ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。

  • fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

  • url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

3.upstream 支持的状态参数

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:      

  • down,表示当前的server暂时不参与负载均衡。

  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

注,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。


0 0
原创粉丝点击