利用Nginx + tomcat实现负载均衡

来源:互联网 发布:网络危机公关联系方式 编辑:程序博客网 时间:2024/05/16 00:33

1. Nginx简介

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯。

Nginx支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多.

2. Nginx优点

(1)Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.2.6稳定版已经于2012年12月11日发布,[1]1.3.10开发版已经于2012年12月25日发布,如果新建站点,建议使用最新稳定版作为生产版本,已有站点升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。

(2)Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll andkqueue作为开发模型。

(3)Nginx 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。

(4)Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

 

3. Nginx安装

3.1 安装依赖包

每次安装软件都必须,默认会少几个包,必须安装

[root@ xiechs nginx]# yum install autoconfautomake zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc

3.2 下载Nginx相关模块

nginx:可以去官网 http://nginx.org/ 下载最新版

[root@ xiechs nginx]# wgethttp://nginx.org/download/nginx-1.7.8.tar.gz

缓存模块ngx_cache_purge:可以去http://labs.frickle.com/nginx_ngx_cache_purge/ 下载最新版本

[root@ xiechs nginx]# wgethttp://labs.frickle.com/files/ngx_cache_purge-2.2.tar.gz

#解压

[root@ xiechs nginx]# tar zxvfnginx-1.7.8.tar.gz

[root@ xiechs nginx]# tar zxvfngx_cache_purge-2.2.tar.gz


3.3 编译安装

[root@ xiechs nginx]# ./configure--user=www --group=www \

--with-http_ssl_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--with-mail \

--with-mail_ssl_module \

--add-module=../ngx_cache_purge-2.2

按回车执行配置

然后执行make命令

[root@ xiechs nginx]# make & makeinstall

安装好之后,默认的nginx根目录为 /usr/local/nginx

//为了能够启动服务因此要把控制脚本放到搜索路径去,因此要编辑/etc/profile文件

[root@ xiechs nginx]# vim /etc/profile

 哈哈哈哈

//重新读取该文件

[root@xiechs nginx]# . /etc/profile

//测试有没有语法错误

[root@xiechs ~]# nginx -t

nginx: the configuration file/etc/nginx/nginx.conf syntax is ok

nginx: [emerg] getpwnam("nginx")failed

nginx: configuration file/etc/nginx/nginx.conf test failed

从上面看出现错误,原因是没有创建用户和组

//创建用户和组

[root@xiechs ~]# groupadd -r nginx

[root@xiechs ~]# useradd -r -g nginx nginx

//由于编译过程中指明了/var/tmp/nginx/client/目录和/var/tmp/nginx/proxy/目录,因此要创建这两个目录。

[root@xiechs ~]# mkdir -pv/var/tmp/nginx/client

[root@xiechs ~]# mkdir -pv/var/tmp/nginx/proxy 

//启动nginx服务,并查看端口

[root@xiechs ~]# nginx

[root@xiechs ~]# netstat -tupln |grep nginx

tcp       0     0 0.0.0.0:80         0.0.0.0:*        LISTEN      10868/nginx   //这显示端口号为80表明nginx已经启动

//通过网页进行访问,看nginx是否成功,结果如下:

 哈哈

到此nginx整个安装配置已经完成。

4. Nginx负载均衡配置

先来简单了解下什么是负载均衡,单从字面上的意思来理解就是N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况;某台服务器宕机其它服务器还能继续提供服务,提高系统的可靠性。可见负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。

测试环境:

由于没有真实域名可用,所以本次测试直接host指定域名,然后在VMware里安装一台CentOS作为虚拟主机。本机(Win7)和192.168.10.33则作为真实服务器运行tomcat。

测试域名:test.com

虚拟主机:CentOS(192.168.2.129) 用于充当负载均衡服务器

服务器A:   192.168.2.117:8080(本机)真实服务器,处理客户请求

服务器B: 192.168.10.33:8089真实服务器,处理客户请求

部署思路:

CentOS作为虚拟主机,域名直接解析到CentOS服务器(192.168.2.129)上,由CentOS服务器负载均衡到服务器A和服务器B上。

域名解析:

由于不是真实环境,域名随便使用test.com作为测试,所以test.com的解析只能在hosts文件设置。

1)   打开C:\Windows\System32\drivers\etc\hosts;

2)   在文件末尾添加192.168.10.129     test.com;

3)   保存退出。打开cmd窗口ping test.com看解析是否成功。

哈哈

从上图看,解析已经成功。

 虚拟主机(负载均衡服务器)配置

打开nginx.conf,文件位置在nginx安装目录的cong目录下。

      [root@xiechs ~]# vi /etc/nginx/nginx.conf

      在http段加入以下配置

      server {

         listen      80;

         server_name  test.com; 

  location / {

          proxy_pass http://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;

       }

}

upstream test.com {

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

server 192.168.10.117:8080 weight=1;

      server 192.168.10.33:8089weight=1;

 }

保存配置文件,重启nginx。

查看负载均衡效果

为了区分A,B两台服务器,我在A服务器的主界面加入了aaaa字样。首次访问test.com/projectName(运行的项目名称),主界面有aaaa字样,可见访问的是A服务   器;

然后我把A服务器的tomcat停掉,再次访问test.com/ projectName(运行的项目名称),主界面没有aaaa字样,可见负载均衡起了作用。

测试到此结束。

Nginx是一个很强大的负载均衡代理,以上测试只是验证了基本功能,还有很多东西等待我们在实践中探索。

 

参考资料:

http://www.php100.com/html/program/nginx/2013/0905/5525.html

http://tyjhz.blog.51cto.com/8756882/1426185

http://www.cnblogs.com/kreo/p/4378086.html
1 0
原创粉丝点击