阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 12721阅读
  • 6回复

[解决方案]阿里云linux下Nginx整合Tomcat实现负载均衡集群

级别: 论坛版主
发帖
3414
云币
8980

前几天简单说了一下Nginx和tomcat的知识,今天重点说一下Nginx整合Tomcat实现负载均衡集群 sZL#xZ5 Df  
A%D7bQ  
'6xQT-sUih  
Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)(下面只介绍负载均衡集群) ni6{pK4Wqm  
1、负载均衡集群(Load Balance Cluster) bV8!"{  
负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据集群和应用服务集群都属于这种类型。 YR>B_,Gl  
g|<]B$yN#  
$T`<Qq-r  
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。 PB/IFsJ  
:bWUuXVtJ  
B:e @0049  
2、负载均衡系统: 负载均衡又有DNS负载均衡(比较常用)、IP负载均衡、反向代理负载均衡等,也就是在集群中有服务器A、B、C,它们都是互不影响,互不相干的,任何一台的机器宕了,都不会影响其他机器的运行,当用户来一个请求,有负载均衡器的算法决定由哪台机器来处理,假如你的算法是采用round算法,有用户a、b、c,那么分别由服务器A、B、C来处理; +[ R/=$  
cu%C"  
@*qz(h]\  
3、分布式是指将不同的业务分布在不同的地方。 r ; xLP  
而集群指的是将几台服务器集中在一起,实现同一业务。 AwTJJ0>  
分布式中的每一个节点,都可以做集群。 Mnz!nWhk  
而集群并不一定就是分布式的。 +\|Iu;w  
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。 XvE9 b5}  
而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。 Pp| *J^U 4  
分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。 baP^<w^  
========================================================================== +=mkCU  
以上是对集群 做一个简单的介绍、不要单纯的为了集群而集群、最起码要理解其中的意思。 @EDs~ lPv  
m^#rB`0;L  
Z0*ljT5|  
集群分为横向集群和纵向集群: TP"1\O  
纵向意思就是在一台服务器上安装多个web服务(公用内存,CPU), 横向就是多台服务,每台服务器都各的web服务。大体基本就是这么个意思。 .>mr%#p  
~",`,ZXQy  
!O#dV1wAa  
,uPJ_oZs  
一、安装所需软件 i-'9AYyw  
nginx-1.9.4、apache-tomcat-7.0.63、jdk7 (三者的安装这里不做介绍、假设都已经安装好) ^RP)>d9Xp{  
gCN$}  
]b=P=  
二、架构图 `d[1`P1i[  
sk 2-5S  
S_T1y  
r)1'ePI"  
说明:1、这里选择三台服务器、每台服务器安装一个tomcat。 `KCh*i  
2、所有的代码都存放在内容服务器上,内容服务器提供文件共享,集群机通过cifs方式映射为web目录,这样便于统一管理和即时同步。 #."Hh<C  
cI=r+ OGk*  
(如何使用NFS以后将做一篇教程实现) ?  BE6  
!j\" w p  
三、整合Nginx和Tomcat由于本身就是一台服务器、所以这里选择纵向集群、使用一台服务器安装Nginx和2台Tomcat。 \/SQ,*O  
(下面的配置如果没有安装过Nginx和Tomcat、请自行补脑) E%'~'[Q  
1、cd  /usr/local/nginx/conf  切换到conf目录下。 :mS# h@l  
H> '>3]G  
|8.(XsN  
2、mkdir balance  #新建负载均衡目录、目的是为了区分 h@@nR(<i  
<d<mvXbw_@  
$rhgzpZ!X_  
3、vi upstream.conf  加入一下代码: p[@5&_u(z  
  1. upstream love {
  2.      server localhost:8082 weight=1  max_fails=2 fail_timeout=30s;
  3.      server localhost:8083 weight=1  max_fails=2 fail_timeout=30s;
  4. }
4、vi  vhost.conf  加入一下代码: Khe!g1=&X  
  1. server {
  2.         listen       80;
  3.         server_name  love.52itstyle.com;
  4.         charset utf8;
  5.         location / {
  6.              proxy_next_upstream http_502  http_504 error timeout invalid_header;
  7.              proxy_set_header        Host $host;
  8.              proxy_set_header        X-Real-IP $remote_addr; #获取真实IP
  9.              proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
  10.              proxy_pass      http://love;
  11.         }
  12.         location ~ .*\.(jsp|action|do)?$ {
  13.              proxy_set_header        Host $host;
  14.              proxy_set_header        X-Real-IP $remote_addr; #获取真实IP
  15.              proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
  16.              proxy_pass      http://love;
  17.         }
  18.         location ~ /purge(/.*) {
  19.             #设置只允许指定的IP或IP段才可以清除URL缓存。
  20.             #allow   192.168.1.66;
  21.             #deny    all;
  22.             proxy_cache_purge  cache $host$1$is_args$args;
  23.             error_page 405 =200 /purge$1;
  24.         }
  25.         location ~ .*.(css|png|gif|jpg|js)$
  26.         {
  27.             proxy_pass      http://love;
  28.             proxy_cache cache;
  29.             add_header Nginx-Cache $upstream_cache_status;
  30.             proxy_set_header Accept-Encoding 'gzip';
  31.             expires 30d;
  32.         }
  33.       
  34.     }
5、把以上2个文件导入nginx.conf 1O!/g  
+dP L>R  
Hi yc#-4  
  1. http {
  2.     include       mime.types;
  3.     default_type  application/octet-stream;
  4.     include       proxy.conf;  #一定要指向代理文件
  5.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  6.                       '$status $body_bytes_sent "$http_referer" '
  7.                       '"$http_user_agent" "$http_x_forwarded_for"'
  8.                       '"$upstream_cache_status"';
  9.     sendfile        on;
  10.     keepalive_timeout  65;
  11.   
  12.     include balance/upstream.conf;
  13.     include balance/vhost.conf;
  14. }
e.*%K!(  
重启 Nginx  ./nginx -s reload =L5GhA~  
k`{@pt.  
WH$e2[+Y  
演示地址 :  http://love.52itstyle.com  仅仅是做着玩的。 c\q   
.p ls!  
(Si=m;g  
大家看网站标题会在我爱你和I Love You之间切换、说明负载时配置成功,不是JS实现的哈。 S#b-awk  
y')RT R{>M  
jr /lk  
[ 此帖被小柒2012在2015-10-15 21:37重新编辑 ]
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 沙发  发表于: 2015-10-15
满满地都是干货啊
级别: 论坛版主
发帖
3414
云币
8980

只看该作者 板凳  发表于: 2015-10-15
回 1楼(ivmmff) 的帖子
前段时间 项目中 太忙了  最近 整理下项目中出现的问题~~
级别: 布道狮
发帖
2103
云币
2754
只看该作者 地板  发表于: 2015-10-15
给力,确实名字变了。
级别: 新人
发帖
7
云币
18
只看该作者 4楼 发表于: 2015-12-13
Re阿里云linux下Nginx整合Tomcat实现负载均衡集群
希望做一篇完整的教程,零基础都可以学习的
级别: 论坛版主
发帖
3414
云币
8980

只看该作者 5楼 发表于: 2015-12-16
回 4楼(wkzw) 的帖子
可以 参考以前的帖子
级别: 程序猿
发帖
323
云币
414
只看该作者 6楼 发表于: 2016-01-09
可以复制的干货才是好干货
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)