http://my.oschina.net/u/273709/blog/77827
1.apache version:2.2.15 ,tomcat version :6
2.httpd.conf 解开注释httpd-vhosts.conf
3.httpd-vhosts.conf 增加如下内容:
80:为本地http server端口
<VirtualHost *:80> #stickysession 会话级别负载均衡,不配置的时候是请求级别负载均衡 bybusyness 按照繁忙程度均衡
ServerAdmin test@test.com #异常时发送邮件的地址
ServerName www.**.com #代理访问名
ServerAlias www.**.com #访问的别名
ProxyRequests Off # 反向代理打开
ProxyPreserveHost On # 传送原始请求的Host信息给被代理的机器
#代理和反向代理,要访问/zlex路径时,将跳转到balancer://zlex,实现负载均衡 (session复制的时候要这样:/zlex)
ProxyPass /zlex balancer://zlex/ lbmethod=bybusyness
ProxyPassReverse /zlex balancer://zlex
#session唯一,粘性会话模式
#ProxyPass /zlex balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID|jsessionid nofailover=Off timeout=5 maxattempts=3
# ProxyPassReverse /zlex balancer://zlex
<Proxy balancer://zlex>
BalancerMember ajp://192.168.140.129:8009/zlex loadfactor=1 route=jvm1
BalancerMember ajp://192.168.140.129:8010/zlex loadfactor=1 route=jvm2
</Proxy>
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>
4 修改context.xml:
<Context distributable="true">
5 修改server.xml: (不同机器时不用修改1,2,3的端口)
<!--0 modify port -->
<Server port="8101" shutdown="SHUTDOWN">
<!-- 1 modify port -->
<Connector URIEncoding="UTF-8" executor="tomcatThreadPool" port="8081" protocol="HTTP/1.1" enableLookups="false" acceptCount="700" maxSpareThreads="100"
connectionTimeout="30000"
redirectPort="8443" />
<!--2 modify port -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
<!--3 modify jvmRoute -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<!--4 tomcat6 以上不用配置 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
6.解注释httpd-info.conf:
<Location /server-status>
SetHandler server-status
Order deny,allow
#Deny from all
Allow from all
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
#Deny from all
Allow from all
</Location>
<Location /balancer-manager>
#用来负责监控
SetHandler balancer-manager
Order deny,allow
#Deny from all
Allow from all
</Location>
以上步骤所基本的配置
步骤:
- 安装Apache基本模块
- 后台监控
- 负载均衡简单测试
- 配置Tomcat相关模块(AJP)
- 保持Session唯一,粘性会话
- Tomcat集群,Session复制
1.安装Apache相关模块
负载均衡需要的主要是代理模块!
经过几次Apache配置尝试,在Ubuntu下配置Apache实在是太容易了。加载什么模块、取消什么模块两个命令搞定。
- #启用模块
- sudo a2enmod <model>
- #禁用模块
- sudo a2dismod <model>
这里,我们需要让Apache提供代理服务,其中又包含基于http、ftp、ajp等等协议的代理功能,同时还需要负载均衡模块。我们可以通过命令逐个加载:
- #代理核心模块
- sudo a2enmod proxy
- #代理AJP模块
- sudo a2enmod proxy_ajp
- #代理负载均衡模块
- sudo a2enmod proxy_balancer
- #代理HTTP模块
- sudo a2enmod proxy_http
- #代理FTP模块
- sudo a2enmod proxy_ftp
完成上述操作后,系统会提示重启Apache!
先不着急重启,现学现卖,了解下Apache的目录结构。在Ubuntu下配置Apache主要是在 /etc/apache2目录下:
分述:
- apache2.conf核心配置文件,一般不需要修改!
- conf.d目录,里面包含了一些字符集设置,文档等设置!
- dav_svn.authz和dav_svn.passwd是前面做SVN时,相关权限、密码文件。
- envvars定义了运行时的用户身份——www-data。
- httpd.conf是Apache留给我们自己折腾的配置文件,默认为空。apache2.conf会加载这个文件。
- ports.conf端口默认配置。apache2.conf会加载这个文件。
- magic为mod_mime_magic模块服务。
- mods-enabled和mods-available mods-enabled会被apache2.conf加载,里面包含*.load和*.conf文件。*.load文件中是加载相应的模块(位于/usr/lib/apache2/modules/中),而*.conf中是对应的基本配置。但这些文件其实都是链接到mods-available中相应的文件上。当我们通过a2enmod操作时,实际上正是操作了这些软链接。
- sites-available和sites-enabled 与 mods-enabled和mods-available的关系类似,只是其中包含的是站点内容。
罗嗦了一堆,下面配置负载均衡部分。
执行修改:
- sudo vi /etc/apache2/mods-available/proxy.conf
上图红框中的内容是原始内容,白框中的内容是我新加的部分。
注意红框中的配置:
- <Proxy *>
- AddDefaultCharset off
- Order deny,allow
- #Deny from all
- Allow from localhost ip6-localhost
- </Proxy>
在默认配置中,Deny from all处于可用状态。当我们配置其他代理节点时,将导致杜绝访问!使用 Allow from localhost ip6-localhost 限制仅允许本机访问!
再说,白框中的内容:
- <Proxy balancer://zlex>
- BalancerMember http://localhost:8080/
- BalancerMember http://192.168.49.1:8080/
- </Proxy>
这里,我配置了一个负载均衡节点 balancer://zlex,其中包含了两个服务 http://localhost:8080/和 http://192.168.49.1:8080/,一个是虚拟机上的Tomcat、一个是真机上的Tomcat。这里使用的Http的转发方式,当然,使用AJP未尝不可,稍后详述!
这里的节点次序会有一个先后关系,Apache会将请求按照FIFO的方式调度顺次分配到各个节点上!如果其中有一个节点挂掉,将跳过该节点顺次寻找可用节点。
再说代理和反向代理:
- ProxyPass /zlex balancer://zlex
- ProxyPassReverse /zlex balancer://zlex
这里配置,如果要访问 /zlex路径时,将跳转到 balancer://zlex上,也就是享受负载均衡!
2.后台监控
我们如何知道某个节点负载多少,响应时间多久,服务是否正常呢?Apache提供了负载均衡监控平台: http://localhost/balancer-manager。但是,这个服务默认是不存在。
除了用于负载均衡配置、监控的 balancer-manager还有 http://localhost/server-status和 http://localhost/server-info
我们需要添加info模块:
- #系统信息模块
- sudo a2enmod info
同时,为了能够使用 balancer-manager,我们需要配置: