目的

先说说我要干什么,如题:使用nginx实现多个tomcat服务器的负载均衡。

nginx

大名鼎鼎,相信很多人都听过,以前感觉很厉害,用了之后发现真的很厉害。nginx可以做以下几件事:

  • 反向代理
  • 负载均衡
  • 动静分离
  • 网页、图片缓存

需要明确的是nginx并不是应用服务器,也就是说nginx不能处理动态请求(和apache一样,熟悉apache应该知道),比如jsp、php等页面,nginx把这些请求转发给能处理这些页面的程序。

反向代理

好吧,之前我也为这个问题纠结挺久,为什么叫反向?既然有反向,那肯定有正向,现有客户端x,代理服务器y,最终服务器z,现在x直接访问z:x->z,通过代理服务器y:x->y->z,无论正反代理服务器y都是位于x、z之间,正反是根据代理服务器代理的是谁来判断的

  • 正向:代理服务器y代理的是客户端,站在客户端的角度上是正向的,所以是正向代理
  • 反向:代理服务器y代理的是最终服务器z,站在客户端的角度上是反向的,所以是反向代理

好吧,这是我的理解,可能不够详细,这里给大家推荐一片文章,介绍的挺好的:http://bbs.51cto.com/thread-967852-1-1.html

负载均衡

现在客户端所有请求都经过nginx了,那么nginx就可以决定将这些请求转发给谁,如果服务器A的资源更充分(CPU更多、内存更大等等),服务器B没有服务器A处理能力强,那么nginx就会吧更多的请求转发到A,转发较少的请求到服务器B,这样就做到了负载均衡,而且就算其中一台服务器宕机了,对于用户而言也能正常访问网站。

动静分离

借助于nginx强大的转发功能,可以通过配置实现网站的动态请求和静态文件进行分离,将动态请求发送到服务器A,将静态文件转发到服务器B,这样便于nginx做静态文件的缓存和后期对网站使用CDN。

实现多tomcat负载均衡

tomcat和nginx安装再次不再赘述,不过注意如果多个tomcat安装在同一台机器上的话,注意修改server.xml(在%tomcat_home%/conf/server.xml)中的端口号,以下是我的tomcat配置情况

tomcat A:10.10.31.11:8888

tomcat A:10.10.31.11:9999

nginx配置,nginx.conf

  1. #user www-data;
  2. worker_processes 3;
  3. #pid /run/nginx.pid;
  4.  
  5. events {
  6. #use epoll
  7. worker_connections 8192;
  8. # multi_accept on;
  9. }
  10.  
  11. http {
  12.  
  13. ##
  14. # Basic Settings
  15. ##
  16.  
  17. sendfile on;
  18. tcp_nopush on;
  19. tcp_nodelay on;
  20. keepalive_timeout 65;
  21. types_hash_max_size 2048;
  22. # server_tokens off;
  23.  
  24. # server_names_hash_bucket_size 64;
  25. # server_name_in_redirect off;
  26.  
  27. include /etc/nginx/mime.types;
  28. default_type application/octet-stream;
  29.  
  30. ##
  31. # SSL Settings
  32. ##
  33.  
  34. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
  35. ssl_prefer_server_ciphers on;
  36.  
  37. ##
  38. # Logging Settings
  39. ##
  40.  
  41. access_log /var/log/nginx/access.log;
  42. error_log /var/log/nginx/error.log;
  43.  
  44. ##
  45. # Gzip Settings
  46. ##
  47.  
  48. gzip on;
  49. gzip_disable "msie6";
  50.  
  51. # gzip_vary on;
  52. # gzip_proxied any;
  53. # gzip_comp_level 6;
  54. # gzip_buffers 16 8k;
  55. # gzip_http_version 1.1;
  56. # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  57.  
  58. ##
  59. # Virtual Host Configs
  60. ##
  61.  
  62. include /etc/nginx/conf.d/*.conf;
  63. include /etc/nginx/sites-enabled/*;
  64.  
  65.      # 在这儿配置多个服务器
  66. upstream web_app{
  67. server 10.10.31.11:8888;
  68. server 10.10.31.11:9999
  69. }
  70.  
  71. server{
           # nginx监听80端口
  72. listen 80;
           # 特别注意server_name配置,这儿在实际使用中配置多个域名,比如test.com www.test.com,
  73. server_name localhost 127.0.0.1;
  74. location / {
  75. root html;
  76. index index.html;
  77. proxy_pass http://web_app;
  78. proxy_set_header X-Real-IP $remote_addr;
  79. client_max_body_size 100m;
  80. }
  81. }
  82. }

验证

service nginx start

访问:localhost或者127.0.0.1会发现两个tomcat首页在交替(为了区分两个tomcat,建议修改%tomcat_home%/weapps/ROOT/index.jsp页面,如修改两个title分别为8888, 9999)

很简单的配置,只有简单的负载均衡,而且两台服务器的权重也是一样的,这样配置主要是为了解决一个问题:因为系统已经上线了,如果在使用过程中发现了bug需要赶修复并重新部署,不能每次部署就shutdown-start吧,用户突然就不能访问网站了,还有一种方法就是等夜深人静没人访问网站的时候部署,更科学的方法是使用nginx做负载均衡,这样启动两台服务器A、B,部署A的时候B还在正常运行,部署完A,启动A,再部署B。

当然了,使用nginx做负载均衡之后还有一个很重要的问题亟待解决——session集群共享,接下来想使用shiro和redis做session集群共享,这样子随着业务的增长,后期有更多的服务器需要负载均衡也算是有基础了。

正文完。


最近一段时间感觉压力有点略大,经常做梦都在想项目上的事儿,每天醒来都感觉心里有点慌慌的感觉。希望自己还是要注意到这个问题,调节好。

还有一个感触就是:时势造英雄,有好多技术自己没有应用场景去学习的时候总感觉少了点什么,比如这次nginx的使用,以前也试着学习过,可是感觉也是不得要领,但是这次因为系统上线之后需要在不间断访问的前提下替换部署,感觉用起来挺快,理解起来也更流畅。业务发展才是促进技术发展的源动力,对于技术发展而言是这样,对于个人技术积累也是这样。在还没有遇到相应的业务场景的时候只能是不断提高自己的学习能力,在业务场景真的到来之际,能应用自己的能力解决实际问题,提高自己的技术和能力,而这里的业务场景就是程序员的时势。不断提高自己,然后等待时势的到来。

nginx多tomcat负载均衡的更多相关文章

  1. 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...

  2. Linux配置Nginx+Tomcat负载均衡

    cd /usr/local/tomcat1/webapps/ROOT/ tar -zxvf nginx-1.14.2.tar.gz -C /usr/local 一.Linux配置Nginx 一.下载N ...

  3. Nginx+Tomcat 负载均衡、动静分离集群

    目录: 一.Nginx负载均衡实现原理 二.Nginx动静分离实现原理 三.Nginx+Tomcat 负载均衡.动静分离集群部署 一.Nginx负载均衡实现原理 1.Nginx实现负载均衡是通过反向代 ...

  4. 配置apache和nginx的tomcat负载均衡

    概述 本篇文章主要介绍apache和nginx的相关配置,tomcat的相关安装配置我在前面有写过一篇,详细介绍通过两种配置方法配置nginx. tomcat配置参考:http://www.cnblo ...

  5. CentOS系统下做nginx和tomcat负载均衡

    系统总是频繁更新,为了避免更新系统的时候领导看不到东西,打算用ngix做代理,后台部署两个tomcat做负载均衡,避免更新一台就无法使用系统的问题,这两天看了写资料,把几个关键点记录在这里以便备忘. ...

  6. Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  7. Nginx和Tomcat负载均衡实现session共享

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  8. CentOS7+Nginx配置Tomcat负载均衡环境

    1.准备两个Tomcat 配置两个Tomcat一个端口是8080另外一个端口是8081,分别在webapps下面添加一个测试用的web项目,修改index.jsp文件,8080端口的index.jsp ...

  9. nginx配置tomcat负载均衡,nginx.conf配置文件的配置

随机推荐

  1. C++矩阵加速经典题目:Warcraft III 守望者的烦恼 [vijos 1067]

    Warcraft III 守望者的烦恼 背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫"闪烁", ...

  2. Web打印控件Lodop实现表格物流单的打印

    Web打印控件Lodop实现表格物流单的打印 一.lodop打印预览效果图 LODOP.PRINT_SETUP();打印维护效果图 LODOP.PREVIEW();打印预览图 二.写在前面 最近项目用 ...

  3. 第三次OO总结

    规格化设计的调研 随着50年代高级语言的出现,编译技术不断完善,涌现出多种流派的语言,其中就有里程碑式的Pascal语言:进入70年代,由于众多语言造成的不可移植.难于维护,Ada程序设计语言诞生了, ...

  4. 滚动公告--jq

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 与我们息息相关的internet服务(2)---WWW服务

    在起步一个公司,从组建的技术上,可能要准备很多东西,其中一个就是我们熟悉的公司网站    网站,在初中,那时浏览一个网页可叫网上冲浪,听起来似乎比洗澡还爽快,可现在这词就是土鳖,网上冲浪火起来主要是应 ...

  6. CentOS---zabbix使用sendEamil发送报警

    一.sendEmail简介 sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php ...

  7. Eclipse项目里面看源码和文档

    Eclipse项目里面看源码 1.新建项目列表 2.进入struts2-core-2.3.20.jar,双击之后,看不到源码 3.右键struts2-core-2.3.20.jar,选择propert ...

  8. XML学习总结一

    1.声明 <?xml version="1.0"  encoding="gb2312"?> version属性指定该文档遵守的版本号,通常为1.0X ...

  9. #254 Check for Palindromes

    Check for Palindromes 检查回文字符串 如果给定的字符串是回文,返回true,反之,返回false. 如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符 ...

  10. Windows Server2012 搭建域错误“本地Administraor账户不需要密码”

    标签:MSSQL/SQLServer/域控制器提升的先决条件验证失败/密码不符合要求 概述 在安装WindowsServer2012域控出现administrator账户密码不符合要求的错误,但是实际 ...