Nginx+tomcat搭建高性能web服务器集群

来源:互联网 发布:ipad mini2插卡网络差 编辑:程序博客网 时间:2024/05/29 16:04

Nginx是目前应用广泛的web服务负载均衡器,相较于Apache来讲nginx属于轻量级的web负载均衡器,运行过程中占用更少内存及资源。nginx能够支持上万并发,这得益于nginx处理请求是异步非阻塞型的,而apache 则是阻塞型,在高并发下nginx仍 能保持较低的资源消耗,其中核心区别于apache同步多进程模型连接对应进程;nginx异步多连接(万级别)对应进程。nginx确实在某些方面性能上优于Apache,尤其是在处理静态文件上,Nginx 静态处理性能比 Apache 高 3倍上,但这并不是说nginx已经完全超越Apache,Apache仍有他无法取代的优点,比如Apache的稳定性要远高于nginx,Apache组件比nginx要多。所以对于两者的选择要根据实际情况来定,如果对性能要求或需要处理大量静态资源则使用nginx,如果对稳定性要求高或处理大量动态请求则推荐Apache。闲话不多说了,下面介绍下如何安装配置nginx。

1.首先下载nginx,官方下载地址:http://nginx.org/en/download.html

2.将下载好的压缩包解压到安装目录。

3.首先检查默认配置是否有问题,打开命令行窗口,进入到nginx的HOME目录,输入nginx.exe -t 命令,如果出现如图所示则说明nginx.conf配置文件没有问题

4.接下来需要修改该配置文件,让他真正实现负载均衡了,下面是修改后的配置文件内容

worker_processes  1;  events {    worker_connections  1024;}  http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;      upstream aaa{    server 192.168.0.37:8009 weight=10;    #真实服务器A(sxwgf-PC)  #server 115.183.28.98:7071 weight=10;        server 192.168.0.37:8006 weight=1;    #真实服务器B(hzdk-vpc)    }      server {    #Nginx代理服务器        listen       8088;          server_name  localhost www.ha97.com ha97.com;          location / {            root   html;            index  index.html index.htm;        #proxy_pass  http://www.kuqin.com;proxy_pass  http://aaa;        proxy_redirect  default;        }          error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }        #图片缓存时间设置        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$        {            expires 10d;         }        #JS和CSS缓存时间设置        location ~ .*\.(js|css)?$       {           expires 1h;        }      }}


观察上面的配置文件需要注意的地方有以下几点:

1.tomcat集群名称一定要与代理服务器的dialing路径一样,也就是nginx代理服务器的proxy_pass一定要与upstream名称相同。

2.在tomcat集群中server定位一定要遵循ip+端口形式,否则检测将不会通过。

3.worker_processes的值应设为小于等于CPU总核心数,决定着nginx启动的进程数目

4.worker_connections为单个进程最大连接数(最大连接数=连接数*进程数)

5.upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。

一切准备完毕之后测试下实验成果,本人属于懒人,姑且开启两个版本的tomcat(tomcat6和tomcat7)通过其不同的展现页面来区分nginx将请求分配到了哪个物理服务器上,根据以上配置多次请求localhost:8088/这个地址依次出现如下两幅画面:

上图表示访问到的是tomcat7,下图表示访问到的是tomcat6

由此说明我们配置的nginx实现负载均衡的效果实现了,那么究竟为啥nginx的性能就要比Apache高呢?我们知道线程执行过程中有五种状态,分别是:就绪,运行,阻塞,就绪,死亡。当一个线程启动(调用start方法后)之后进入就绪状态等待获取cpu资源,而一旦该线程获取了cpu资源之后变灰处于运行状态执行run方法,当处于运行状态的线程等待I/O资源或执行sleep方法后就会暂时让出cpu资源进入阻塞状态,当该线程重新获取到了I/O资源或sleep结束后线程便重新进入就绪状态进入就绪队列等待cpu,得到cpu资源后继续运行直到线程结束。而当web服务器如处理大量请求时,会频繁进行磁盘IO读写操作,CPU轮训时会使运行状态的请求进入“阻塞”状态,这就是阻塞产生的原因,nginx独特的master/worker模式很好的解决了并发问题。它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。同一时刻只有一个worker建立连接,用到了锁的概念来保证只有一个worker处理请求。采用多线程好处,如果一个worker挂掉,对于其他没有影响。


0 0
原创粉丝点击