声明

该文章由大牛 马哥 的相关linux视频资料整理而来。若认为内容侵权请及时通知本人。

相关文章


[TOC]

说明

最终结果

httpd-tomcat

  • 反向代理和后端tomcat之间的通信协议有两种
    • http
    • ajp(Apache Jserv Protocol)
  • 反向代理和后端tomcat之间的模块也有两种
    • mod_proxy
    • mod_jk

所以配置方式也就种了。
这里只说明使用mod_proxy的方式。

tomcat配置文件

c2:192.168.1.103-server.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<Engine name="Catalina" defaultHost="c2" jvmRoute="tomcatA">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- ........ -->
<Host name="c2" appBase="/web" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="webapps/test-1" reLoadable="true"/>
</Host>
</Engine>

c3:192.168.1.163-server.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<Engine name="Catalina" defaultHost="c3" jvmRoute="tomcatB">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- ... -->
<Host name="c3" appBase="/web" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="webapps/test-1" reLoadable="true"/>
</Host>
</Engine>

mod_proxy方式

环境准备

请确保httpd加载了相关的代理模块

1
2
3
4
5
6
7
8
9
10
[root@c2 httpd]# service httpd -D DUMP_MODULES | grep proxy
proxy_module (shared)
proxy_connect_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_fcgi_module (shared)
proxy_scgi_module (shared)
proxy_ajp_module (shared)
proxy_balancer_module (shared)
proxy_express_module (shared)

httpd配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
ProxyRequests Off
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lb_cluster_1>
BalancerMember ajp://c2:8009 loadfactor=1 route=tomcatA
BalancerMember ajp://c3:8009 loadfactor=1 route=tomcatB
#BalancerMember http://c2:8080 loadfactor=1 route=tomcatA
#BalancerMember http://c3:8080 loadfactor=1 route=tomcatB
#ProxySet lbmethod=bybusyness|bytraffic|byrequests
ProxySet stickysession=ROUTEID
</proxy>
<VirtualHost *:80>
#ServerName my-proxy-host
ProxyVia Off
ProxyPass / balancer://lb_cluster_1/ nofailover=Off
ProxyPassReverse / balancer://lb_cluster_1/
<Proxy *>
Require all granted
</Proxy>
<Location />
Require all granted
</Location>
</VirtualHost>

参数说明

  • lbmethod:apache实现负载均衡的调度方法,
    • 默认是byrequests,即基于权重将统计请求个数进行调度
    • bytraffic则执行基于权重的流量计数调度
    • bybusyness通过考量每个后端服务器的当前负载进行调度
  • maxattempts:放弃请求之前实现故障转移的次数,默认为1,其最大值不应该大于总的节点数
  • nofailover:取值为On或Off,设置为On时表示后端服务器故障时,用户的session将损坏;因此,在后端服务器不支持session复制时可将其设置为On
  • stickysession:调度器的sticky session的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID
  • 其他参数请参考 httpd系列-02-反向代理tomcat-standalone