Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy


httpd版本: httpd-2.4.17

参考来源:

Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)

Apache (2) —— Mac 下安装多个Apache Tomcat实例

Apache httpd mod_proxy

Apache httpd mod_proxy_ajp

Apache负载均衡配置

Apache学习之二、HTTPD的负载均衡

Apache配置反向代理、负载均衡和集群(mod_proxy方式)

准备

首先我们参照下面两篇文章配置好httpd和两个Tomcat实例

其中Tomcat的两个实例node-a和node-b分别存放与"./servers/cluster/tomcat/node-a"和"/servers/cluster/tomcat/node-b"下

对应的配置分别为:

  • Server Port: 8015 与 8025
  • Connector: 8081 与 8082
  • AJP: 8019 与 8029

另分别为连个实例添加jvmRoute的配置

  • node-a

      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  • node-b

      <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
注意:不要忘记修改供测试的页面特征

配置httpd负载均衡(Load Balancer)

httpd负载均衡Tomcat的方式主要可以分为两类

  1. httpd自带的mod_proxy
  2. Tomcat提供了专门的JK插件来负责Tomcat和HTTP服务器的通信mod_jk
*注意 本篇文章主要关注第一类配置

mod_proxy的两种实现

  1. http方式
  2. ajp方式

1. mod_proxy使用http方式实现负载均衡

  • 加载mod_proxy的so库

我们在"./servers/cluster/httpd/node-a/conf/"下修改httpd.conf文件

配置http balancer
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8081 loadfactor=3
BalancerMember http://127.0.0.1:8082 loadfactor=3
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/
开启so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
启动httpd
$ ./bin/httpd -f /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf -k start
AH00526: Syntax error on line 515 of /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf:
ProxySet: unknown lbmethod lbmethod=byrequests; balancer://mycluster

在Terminal中出现错误提示"unknown lbmethod lbmethod=byrequests"

发现忘记配置lbmethod相关模块(如果只使用byrequests方式,可以按需开启以下模块)

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
修改后重启Tomcat

发现仍然无法正常访问,在"./node-a/log/error_log"中出现错误提示

[Tue Dec 08 17:16:13.028078 2015] [proxy_balancer:emerg] [pid 10235:tid 140735135085312] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Tue Dec 08 17:16:13.028176 2015] [:emerg] [pid 10235:tid 140735135085312] AH00020: Configuration Failed, exiting

仍有模块没有配置

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
修改后重启Tomcat

通过浏览器访问

http://localhost:81/test

刷新浏览器我们会发现下面两句话会交替出现

If you're seeing this, you've successfully installed Tomcat. Congratulations! Node - A!!

.

"If you're seeing this, you've successfully installed Tomcat. Congratulations! Node - B!!"

2. mod_proxy使用ajp方式实现负载均衡

配置ajp balancer

将之前的http配置注解掉,加入一下配置

<Proxy balancer://mycluster>
BalancerMember ajp://127.0.0.1:8019 loadfactor=2 route=tomcat1
BalancerMember ajp://127.0.0.1:8029 loadfactor=2 route=tomcat2
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/

需要开启ajp相关模块

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
重启Tomcat

用浏览器访问出现错误

查看error_log

[Wed Dec 09 08:45:34.824060 2015] [proxy:warn] [pid 10582:tid 4338487296] [client ::1:54735]
AH01144: No protocol handler was valid for the URL /test. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

这是因为ajp的底层是依赖TCP的。

查看httpd Apache官网上关于mod_proxy_ajp的相关说明

The AJP13 protocol is packet-oriented. A binary format was presumably chosen over the more readable plain text for reasons of performance. The web server communicates with the servlet container over TCP connections. To cut down on the expensive process of socket creation, the web server will attempt to maintain persistent TCP connections to the servlet container, and to reuse a connection for multiple request/response cycles.

最后我们为这个httpd的Load Balancer配置一个管理器——Load Balancer Manager

在httpd.conf中,增加配置

<Location /balancer-manager>
SetHandler balancer-manager #Order Deny,Allow
#Deny from all
#Allow from .example.com
Order Deny,Allow
Allow from all
</Location>

同时将Proxy Cluster的配置修改成

<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8081 loadfactor=3
BalancerMember http://127.0.0.1:8082 loadfactor=3
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse / balancer://mycluster/

然后通过浏览器访问

“http://localhost:81/balancer-manager”

得到结果

这样就完成一个以httpd单节点为负载均衡器分发到不同Tomcat的简单架构。

* 扩展

  • lbmethod具体代表什么意思?
  • Load Balancer有哪些具体算法?
  • 为什么通过Proxy访问的时候目标页面没有样式和图片?
  • loadfactor、stickysession有什么作用
  • ProxyRequests、ProxyPass、ProxyPassReverse又有什么作用?

【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy的更多相关文章

  1. 【高可用HA】Nginx (1) —— Mac下配置Nginx Http负载均衡(Load Balancer)之101实例

    [高可用HA]Nginx (1) -- Mac下配置Nginx Http负载均衡(Load Balancer)之101实例 nginx版本: nginx-1.9.8 参考来源: nginx.org [ ...

  2. 【高可用HA】Apache (4) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk httpd版本: httpd-2.4.17 jk版本: tomcat-connectors-1.2.41 参考 ...

  3. Hadoop 高可用(HA)的自动容灾配置

    参考链接 Hadoop 完全分布式安装 ZooKeeper 集群的安装部署 0. 说明 在 Hadoop 完全分布式安装 & ZooKeeper 集群的安装部署的基础之上进行 Hadoop 高 ...

  4. Mac下配置Apache Httpd的Https/SSL

    Mac下配置Apache Httpd的Https/SSL httpd版本: httpd-2.4.17 jdk版本: jdk1.8.0_65 参考来源: Mac下安装Apache Httpd Mac O ...

  5. 【高可用HA】Apache (1) —— Mac下安装Apache Httpd到自定义路径(非/etc/apache2)

    Mac下安装Apache Httpd httpd版本: httpd-2.4.17 参考来源: Tomcat Clustering - A Step By Step Guide Apache HTTP ...

  6. Mac下配置Apache,PHP

    注:如果觉得终端下编辑太麻烦,也可以直接将文件拖出来手动编辑后在放回原文件夹替换即可 1.启用Apache: 在Mac下打开终端,输入“sudo apachectl start”(不包含引号,下同) ...

  7. Mac下配置Apache服务

    这篇文章主要是针对Mac用户,第一次搭建本地开发环境的同学,已经搭建过的同学可以忽略. Mac自带的Apache还是XAMPP? That is a question. 其实自带的apache也够用了 ...

  8. Mac下配置apache

    一.前言 今天遇到问题,怎么配置apache在Mac上,原来Mac自带apache,只需要自己开启配置一下就行了. 二.步骤: 1.修改apache的http_conf文件 打开finder前往/pr ...

  9. Mac下配置Apache服务器

    有的时候,我们需要在内网工作组中分享一些文件或是后台接口没有及时给出,你又想要模拟真实数据,直接在项目里创建plist也可以做到这种需求,但难免让工程变得冗余且看起来比较Low.这个时候就看出配置本地 ...

随机推荐

  1. UltraEdit程序设置添加到右键菜单

    http://hellofs.blog.51cto.com/6109153/1180681 以前安装UltraEdit软件,在安装过程中选择将其添加到右键菜单,安装完成后就可以正常显示在右键菜单,这样 ...

  2. Spring MVC+Mybatis 执行存储过程,使用Map进行参数的传递

    研究了一天mybatis如何执行存储过程,基本了解了ORM的设计思想,在map层面进行对象关系映射有两种思路. 根据不同的业务使用不同的思路: 一.实体类和数据库映射,就是将数据库中的字段和java实 ...

  3. JMeter ----内置函数列表

    Jmeter有两种类型的函数: 用户定义的静态值(或变量) 内置函数 用户定义的静态值允许用户定义变量时被替换为静态的值测试树编译并提交运行.需要注意的是,变量目前无法嵌套,即${Var${N}}不起 ...

  4. DBA_实践指南系列11_Oracle Erp R12性能调优基础(案例)

    http://www.itpub.net/thread-1412437-1-1.html

  5. socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)

    在前面的系列网络编程文章中,我们都是使用socket 自己实现客户端和服务器端来互相发数据测试,现在尝试使用socket 客户端发 送http 请求给某个网站,然后接收网站的响应数据.http 协议参 ...

  6. Java WebService 简单实例(转

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

  7. mysql-5.7 group commit 详解

    一.mysql group commit 的官方定义: InnoDB, like any other ACID-compliant database engine, flushes the redo ...

  8. angular.js ng-repeat动态插入删除dom节点

    既然上面提到 angular.js 下无需用户直接操作dom ,而是在编译间断 dom 与 控制层model 实现了双向绑定,一方做出改变,另一方就会立即改变,那问题来了,我想插入一个文本框和按钮,并 ...

  9. HDU 2256 Problem of Precision(矩阵高速幂)

    题目地址:HDU 2256 思路: (sqrt(2)+sqrt(3))^2*n=(5+2*sqrt(6))^n; 这时要注意到(5+2*sqrt(6))^n总能够表示成an+bn*sqrt(6); a ...

  10. OpenGl学习glMatrixMode()函数理解

    glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项 ...