利用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- 利用Nginx + tomcat实现负载均衡
- nginx tomcat实现负载均衡
- nginx+tomcat实现负载均衡
- Nginx+tomcat实现负载均衡
- nginx+tomcat实现负载均衡
- nginx+tomcat实现负载均衡
- Nginx+Tomcat实现负载均衡
- Nginx+Tomcat实现负载均衡
- nginx+tomcat 实现负载均衡
- Nginx+Tomcat 实现负载均衡
- Nginx+Tomcat实现负载均衡
- Nginx+Tomcat实现负载均衡
- nginx+tomcat实现负载均衡
- 负载均衡设计Nginx+Tomcat实现负载均衡(一)
- 负载均衡设计Nginx+Tomcat实现负载均衡(二)
- 负载均衡设计Nginx+Tomcat实现负载均衡(三)
- 利用Nginx+Keepalived实现web负载均衡
- 利用nginx实现数据库的负载均衡
- Java常见面试题
- Android面试过程描述
- XML 转 String 的一种方法 Java - 修改 0 次
- 美团笔试题:拜访
- ***没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案
- 利用Nginx + tomcat实现负载均衡
- 关于Maven的Pom.xml报错的个人解决办法!!!
- gcc的简单使用
- android面试经验谈
- CF 708C. Centroids 树形dp
- 方法体写入工具类的情形
- 【Android 分享】ShareSDK微信分享详解
- Android中Mvp模式的简单示例
- 缓存(cache)的理解