Nginx+Tomcat 负载均衡集群
案例分析
通常情况下,一台Tomcat站点由于可能出现单点故障及无法应对多客户复杂多样性的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构。
Nginx是一款非常优秀的http服务器软件,他能够支持最高达50000个并发连接数的响应,拥有强大的静态 资源处理能力,运行稳定,并且内存、cpu等系统资源消耗非常低。目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升站点的负载并发能力。
本案例我们以Nginx作为负载均衡器,Tomcat作为应用服务器的负载集群的设置方法。
准备:
环境:CentOS 6.5
关闭iptables防火墙
nginx-1.8.1.tar.gz
jdk-7u65-linux-x64.gz
apache-tomcat-7.0.54.tar.gz
安装与配置
1.安装与配置Tomcat服务
(1)在两台Tomcat服务器中安装JDK和Tomcat构建Tomact服务
安装方法参考:http://www.cnblogs.com/zhichaoma/p/7533398.html
(2).分别在两台Tomcat服务器上创建不同站点实例,以便测试
创建站点实例参考:http://www.cnblogs.com/zhichaoma/p/7533398.html
第一个Tomcat服务站点的测试页面代码为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title> JSP TEST 1 page </title> </head> <body> <% out.println("Welcome to test 1 site");%> </body> </html>
第二个Tomcat服务站点的测试页面代码为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title> JSP TEST 2 page </title> </head> <body> <% out.println("Welcome to test 2 site");%> </body> </html>
(3).分别测试两个站点是否可以访问
2. 安装Nginx服务
(1)安装nginx相关依赖包
yum -y install pcre-devel zlib-devel openssl-devel
(2)创建Nginx运行用户
useradd -M -s /sbin/nologin nginx
(3)编译并安装Nginx
tar zxvf nginx-1.8.1.tar.gz -C /usr/src/ #解包 cd /usr/src/nginx-1.8.1/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_moudle --with-http_ssl_module #配置 make && make install #编译并且安装
配置参数说明:
--user,--group:指定运行的用户和组; --with-file-aio:启用文件修改支持; --with-http_stub_status_module:启用统计状态; --with-http_gzip_static_module:启用gzip静态压缩; --with-http_flv_moudle:启用flv模块,提供寻求内存使用基于时间的偏移量文件; --with-http_ssl_module:启用SSL模块
3.配置Nginx服务
修改Nginx配置文件 nginx.conf
//Nginx所用用户和组,window下不指定 #user niumd niumd; //工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processes 1; //错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; //指定pid存放文件 pid logs/nginx.pid; events { //使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。 #use epoll; //允许最大连接数 worker_connections 2048; } http { include mime.types; default_type application/octet-stream; //定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; sendfile on; tcp_nopush on; tcp_nodelay on; #keepalive_timeout 75 20; #include gzip.conf; //***增加 upstream tomcat_server{ //Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配 //1、轮询(默认) // 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 //2、weight // 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 //3、ip_hash // 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 //3、fair(第三方) // 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 //4、url_hash(第三方) // 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 #ip_hash; //选择算法,启用ip_hash算法 //weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.10.101:8080 weight=1; //两台Tomcat服务器的ip+port server 192.168.10.102:8088 weihght=1; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; //***增加 proxy_connect_timeout 3; //nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 30; //后端服务器数据回传时间(代理发送超时) proxy_read_timeout 30; //连接成功后,后端服务器响应时间(代理接收超时) proxy_pass http://tomcat_server; //填写定义的tomcat的列表名 #主要 } } }
4.测试Nginx配置文件是否正确
/usr/local/nginx/sbin/nginx -t
5.启动Nginx
/usr/local/nginx/sbin/nginx
6.查看Nginx服务进程和 查看端口号及PID号
ps aux | grep nginx #查看Nginx进程服务 netstat -anpt | grep nginx #查看端口号及PID号
7.访问Nginx服务器的IP地址验证