i3geek.com
闫庚哲的个人博客

Java Web分布式集群搭建(二)——Apache+Tomcat集群负载均衡

在分布式中,为了防止应用在单服务器因受压力过大而崩溃,而利用多个Tomcat集群进行部署,使应用可以无状态的访问到任何一个Tomcat服务器,从而进行合理的负载均衡操作,保证应用的可靠和稳定运行。(本节中暂不考虑Session同步的问题)

主要方式

mod_proxy、mod_proxy_blancer、mod_jk

mod_proxy

mod_proxy是一种分工合作的方式,利用反向代理的技术,将任务跳转给各个服务器,并不能实现负载均衡,仅仅是访问跳转。

主要用途:反向单例 单IP多域名多站点的功能

mod_proxy_blancer

mod_proxy_blancer是mod_proxy的扩展,支持负载平衡

可以按轮询策略、权重分配策略和请求相应负载均衡策略进行调度

mod_jk

mod_jk是专门针对tomcat的方法,通过AJP协议链接Tomcat

比较

  • mod_proxy缺点:当集群中一台服务器停止,apache仍然会转发请求过去,导致502网关错误。(解决办法:启动停止的服务器)
  • mod_jk优点:Apache 会自动检测到停止掉的tomcat服务器,然后不再发请求过去。
  • mod_jk缺点:当停止的Tomcat服务器被检测到并停止转发请求后,即使重新启动服务器也不会被Apache发现并继续转发请求。
  • mod_proxy和mod_jk共同优点:可以只将Apache置于公网,节省公网IP地址资源。可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和servlet等动态请求。
  • mod_proxy和mod_jk共同缺点:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。
  • mod_proxy和mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。
  • mod_proxy_balancer和mod_jk都需要修改tomcat的配置文件配合<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"

综合这三种方式来说,mod_proxy_balancer和mod_jk的负载均衡能力更好,mod_jk的设置能力更强是真对Tomcat而专门的负载均衡方法。

当然Apache自带的是mod_proxy和mod_proxy_balancer模块,该模块主要提供两种集群实现方式:第一种是分工模式,固定为不同服务器分配不同的任务。第二种是可以检测到服务器的状态,如果服务器停止了,就停止发送请求,并转发给其他的服务器。但是第一种比第二种的效率更高。

安装实例 —— mod_jk模式

系统Ubuntu 12.04 程序Apache2和Tomcat7

安装程序

apt-get install apache2
apt-get install libapache2-mod-jk

配置文件

#进入配置文件目录
cd /etc/apache2/mods-available
vim jk.conf

在配置文件中,分别添加JkOptions +RejectUnsafeURIJkMount /* loadbalancer

#配置work.properties文件
vim /etc/libapache2-mod-jk/workers.properties

修改workers.tomcat_homeworkers.java_home为自己的tomcat和java路径.

默认路径:java:/usr/lib/jvm/java-1.7.0-openjdk-amd64 tomcat:/usr/share/tomcat7

配置worker.list

#配置
vim /etc/apache2/sites-available/000-default.conf

在<VirtualHost *:80>中添加JkMount /* loadbalancer

修改每个节点/var/lib/tomcat7/conf/server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">添加jvmRoute标签(要和前面对应上)

在<Engine/>标签中添加以下这段代码:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

重启服务 service tomcat7 restart

安装实例——Ubuntu mod_proxy_blancer模式

系统Ubuntu 12.04 程序Apache2和Tomcat7

加载模块

#进入apapche的配置目录
cd /etc/apache2/mods-enabled
#采用链接的方式加载必要模块
ln -s ./../mods-available/proxy.load proxy.load
ln -s ./../mods-available/proxy_http.load proxy_http.load
ln -s ./../mods-available/proxy_balancer.load proxy_banancer.load
#需要的支持文件
ln -s ./../mods-available/slotmem_shm.load slotmem_shm.load
ln -s ./../mods-available/lbmethod_byrequests.load lbmethod_byrequests.load
ln -s ./../mods-available/lbmethod_bybusyness.load lbmethod_bybusyness.load
ln -s ./../mods-available/lbmethod_bytraffic.load lbmethod_bytraffic.load
ln -s ./../mods-available/lbmethod_heartbeat.load lbmethod_heartbeat.load

执行完上述模块的加载后,可以重启apache,如果发送错误可以查看错误日志

#重启apache2
/etc/init.d/apache2 restart
#或
service apache2 restart

#错误日志
/var/log/apache2/error.log

配置反向代理(负载均衡)

vi /etc/apache2/sites-available/000-default.conf

如下配置内容:

<VirtualHost *:80>
ServerAdmin admin@bit.com
ProxyRequests Off
Proxypass / balancer://proxy/
ProxyPassReverse / balancer://proxy/
<Proxy balancer://proxy>
Order Deny,Allow
Allow from all
ProxySet lbmethod=bybusyness
BalancerMember http://172.29.131.139:8080 loadfactor=1
BalancerMember http://172.29.131.140:8080 loadfactor=1
</Proxy>
</VirtualHost>

注意:

  • lbmethod=byrequests 按照请求次数均衡(默认)
  • lbmethod=bytraffic 按照流量均衡
  • lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

然后重启服务器,就完成了配置工作

/etc/init.d/apache2 restart
赞(0)
未经允许不得转载:爱上极客 » Java Web分布式集群搭建(二)——Apache+Tomcat集群负载均衡
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址