码迷,mamicode.com
首页 > Web开发 > 详细

6,Tomcat 的负载均衡---Tomcat + httpd(mod_proxy)

时间:2020-09-17 21:23:24      阅读:37      评论:0      收藏:0      [点我收藏+]

标签:实现   share   request   一个   负载均衡。   and   ajp   技术   ssi   

技术图片

当httpd端采用mod_proxy和tomcat连接时,可以采用ajp或http协议进行连接。

要使用mod_proxy与Tomcat连接,需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat负载均衡时用到)等模块。使用rpm包安装的httpd一般默认已经启用它们,如果是编译httpd,则在编译选项中加上以下对应几项:

--enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer

如果是已经编译好的Httpd,则可以使用apxs工具,向httpd中添加这几个新模块。添加方法见:httpd添加新模块

确保proxy相关的模块已经加载了。

[root@xuexi ~]# httpd -M | grep proxy

Syntax OK

 proxy_module (shared)

 proxy_balancer_module (shared)

 proxy_ftp_module (shared)

 proxy_http_module (shared)

 proxy_ajp_module (shared)

 proxy_connect_module (shared)

5.1 配置httpd代理到tomcat

基于ajp连接协议和tomcat连接时,向httpd添加以下配置文件。如果要基于http协议连接tomcat,将上面配置文件的ajp协议改为http协议,并修改端口即可。

[root@xuexi ~]# cat /etc/httpd/conf.d/ajp.conf

<Location /status>

  SetHandler balancer-manager

  Proxypass !              表示此LocationURL不进行反向代理

  Require ip 192.168.100

</Location>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

  ProxyPassMatch    "^/(.*\.jsp)$"  ajp://192.168.100.22:8009/$1

  ProxyPassReverse  "^/(.*\.jsp)$"  ajp://192.168.100.22:8009/$1

 

<Proxy *>

  Require all granted

</Proxy>

重启httpd。注意,重启前将前面mod_jk实验的配置文件删除掉。

关于如上apache配置的几个指令,解释如下。httpd反向代理的详细内容,可参见:详细分析apache httpd反向代理的用法

  • ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用"Via:",主要用于在多级代理中控制代理请求的流向。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加"Via:";Full表示每个"Via:"行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的"Via:"都会被移除。
  • ProxyRequests {On|Off}:是否开启apache正向代理的功能;如果为apache设置了ProxyPass即反向代理,则必须将ProxyRequests设置为Off。
  • ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的"Host:"行发送给后端的服务器,而不再使用ProxyPass指定的服务器IP地址。如果后端一个IP上可能会有多个虚拟主机,则需要开启此项明确转发给哪台虚拟主机,否则就无需打开此功能。
  • ProxyPassReverse:在反向代理环境中必须使用此指令避免重定向报文绕过proxy服务器,属性设置为ProxyPass一样基本上就可以。
  • ProxyPass [path] !|[url [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以"/"结尾,则对应的url也必须以"/"结尾,反之亦然。
  • ProxyPassMatch [regex] !|url [key=value [key=value ...]]:正则格式的ProxyPass。

5.2 通过mod_proxy负载均衡tomcat

关于httpd反向代理的负载均衡配置方式,参见详细分析apache httpd反向代理的用法

在httpd.conf中配置如下内容:

<proxy balancer://TomcatLB>

BalancerMember ajp://192.168.100.38:8009 loadfactor=5

BalancerMember ajp://192.168.100.36:8009 loadfactor=10

</proxy>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

ProxyPassMatch   "^/(.*\.jsp)$" balancer://TomcatLB/$1

ProxyPassReverse "^/(.*\.jsp)$" balancer://TomcatLB/$1

 

<Proxy *>

  Require all granted

</Proxy>

 

<Location /status>

  SetHandler balancer-manager

  Proxypass !

  Require ip 192.168.100

</Location>

重启httpd并在浏览器中输入192.168.100.17/test/index.jsp测试,测试时会轮调两次tomcatB再轮调一次tomcatA。

技术图片

如果要实现session粘滞(绑定),则修改httpd配置文件如下:

<proxy balancer://TomcatLB>

BalancerMember ajp://192.168.100.22:8009 loadfactor=5  route=TomcatA

BalancerMember ajp://192.168.100.23:8009 loadfactor=10 route=TomcatB

ProxySet  lbmethod=byrequets

</proxy>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

ProxyPassMatch   "^/(.*\.jsp)$" balancer://TomcatLB/$1 stickysession=JSESSIONID

ProxyPassReverse "^/(.*\.jsp)$" balancer://TomcatLB/$1 stickysession=JSESSIONID

 

<Proxy *>

  Require all granted

</Proxy>

 

<Location /status>

  SetHandler balancer-manager

  Proxypass !

  Require ip 192.168.100

</Location>

然后分别配置tomcatA和tomcatB的engine组件,分别加上jvmRoute="TomcatA"和jvmRoute="TomcatB"属性。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">

重启httpd和tomcatA、tomcatB,然后测试结果,再测试时同一客户端将总是得到同一个结果,不会出现负载均衡。

 

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/8414043.html

 

6,Tomcat 的负载均衡---Tomcat + httpd(mod_proxy)

标签:实现   share   request   一个   负载均衡。   and   ajp   技术   ssi   

原文地址:https://www.cnblogs.com/k8s-pod/p/13648367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!