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


httpd版本: httpd-2.4.17

jk版本: tomcat-connectors-1.2.41

参考来源:

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

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

Working with mod_jk

How to Compile Tomcat mod_jk connector on Mac OS X Mavericks

Installing mod_jk for Apache 2.2 on Mac OS X 10.5 Leopard

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

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

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

配置httpd负载均衡(Load Balancer)

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

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

首先编译

在Apache的网站上下载tomcat-connectors-1.2.41,然后解压。

运行命令编译

  1. $ cd native
  2. $ ./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs
  3. $ make
  4. $ sudo make install
*注意 --with-apxs需要指向目标节点的apxs

此处我本地的路径为

  1. /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/bin/apxs

如果执行正常不出错,末尾几行的输出为

  1. ...
  2. config.status: creating common/list.mk
  3. config.status: creating common/jk_types.h
  4. config.status: creating common/config.h
  5. config.status: executing depfiles commands
  6. config.status: executing libtool commands

然后"./native"下运行make

期间会出现warning,可以暂时忽略不影响

  1. jk_lb_worker.c:1397:36: warning: address of array
  2. 'p->worker->session_cookie_path' will always evaluate to 'true'
  3. [-Wpointer-bool-conversion]
  4. if (p->worker->session_cookie_path && *p->worker->se...
  5. ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ ~~

make执行正常的最后几行输出为

  1. ...
  2. Making all in common
  3. make[1]: Nothing to be done for `all'.
  4. Making all in apache-2.0
  5. make[1]: Nothing to be done for `all'.

make install如果在非sudo状态下,最后会出现错误

  1. ...
  2. install: /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/modules/mod_jk.so: Permission denied
  3. apxs:Error: Command failed with rc=4653056
  4. .
  5. make[1]: *** [install_dynamic] Error 1
  6. make: *** [install-recursive] Error 1

sudo运行make install

  1. ...
  2. libtool: install: ranlib /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/modules/mod_jk.a
  3. chmod 755 /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/modules/mod_jk.so
  4. Please be sure to arrange /Users/Richard/Documents/Dev/servers/cluster/httpd/node-a/conf/httpd.conf...
  5. make[2]: Nothing to be done for `install-exec-am'.
  6. make[2]: Nothing to be done for `install-data-am'.

配置mod_jk

在node-a下新建文件夹"other",并创建文件workers.properties

  1. # Define two status worker:
  2. # - jk-status for read-only use
  3. # - jk-manager for read/write use
  4. worker.list=jk-status
  5. worker.jk-status.type=status
  6. worker.jk-status.read_only=true
  7. worker.list=jk-manager
  8. worker.jk-manager.type=status
  9. # We define a load balancer worker
  10. # with name "balancer"
  11. worker.list=balancer
  12. worker.balancer.type=lb
  13. worker.balancer.error_escalation_time=0
  14. worker.balancer.max_reply_timeouts=10
  15. worker.balancer.sticky_session=true
  16. worker.balancer.sticky_session_force=true
  17. # Now we add members to the load balancer First member is "tomcat1", most attributes are inherited from the template "worker.template".
  18. worker.balancer.balance_workers=tomcat1
  19. worker.tomcat1.reference=worker.template
  20. worker.tomcat1.host=127.0.0.1
  21. worker.tomcat1.port=8019
  22. worker.tomcat1.activation=A
  23. # Second member is "tomcat2", most attributes are inherited from the template "worker.template".
  24. worker.balancer.balance_workers=tomcat2
  25. worker.tomcat2.reference=worker.template
  26. worker.tomcat2.host=127.0.0.1
  27. worker.tomcat2.port=8029
  28. worker.tomcat2.activation=A
  29. # Finally we put the parameters
  30. worker.template.type=ajp13
  31. worker.template.socket_connect_timeout=5000
  32. worker.template.socket_keepalive=true
  33. worker.template.ping_mode=A
  34. worker.template.ping_timeout=10000
  35. worker.template.connection_pool_minsize=0
  36. worker.template.connection_pool_timeout=600
  37. worker.template.reply_timeout=300000
  38. worker.template.recovery_options=3
*注意上面的host配置都是127.0.0.1,会影响我们下面的测试

并同时在"./node-a/other/"下创建文件uriworkermap.properties

  1. /*.do=balancer
  2. /*.jsp=balancer
  3. #/*.gif=balancer
  4. #/*.jpg=balancer
  5. #/*.png=balancer
  6. #/*.css=balancer
  7. #/*.js=balancer
  8. #/*.htm=balancer
  9. #/*.html=balancer
  10. #/*.txt=balancer
  11. # Optionally filter out all .jpeg files inside that context
  12. # For no mapping the url has to start with exclamation (!)
  13. !/servlets-examples/*.jpeg=lb
  14. #
  15. # Mount jkstatus to /jkmanager
  16. # For production servers you will need to
  17. # secure the access to the /jkmanager url
  18. #
  19. /jk-manager=jk-manager
  20. /jk-status=jk-status

最后

为httpd.conf,添加配置

  1. # 加载jk配置文件
  2. Include conf/mod_jk.conf

测试

重新启动httpd,并用浏览器访问"localhost:81",提示"Service Unavailable"错误

查看"./node-a/log"目录下"mod_jk.log"文件

  1. [Wed Dec 09 15:00:31.403 2015] [13735:4417540096] [info] get_most_suitable_worker::jk_lb_worker.c (1119): all workers are in error state for session QUMQZVRPS1-4MX593EAOD71Y6YAFXUP1-U734UPHI-1
  2. [Wed Dec 09 15:00:31.403 2015] [13735:4417540096] [info] service::jk_lb_worker.c (1664): All tomcat instances failed, no more workers left (attempt=1, retry=1)
  3. [Wed Dec 09 15:00:31.403 2015] [13735:4417540096] [info] service::jk_lb_worker.c (1675): All tomcat instances are busy or in error state
  4. [Wed Dec 09 15:00:31.403 2015] [13735:4417540096] [error] service::jk_lb_worker.c (1680): All tomcat instances failed, no more workers left
  5. [Wed Dec 09 15:00:31.403 2015] [13735:4417540096] [info] jk_handler::mod_jk.c (2991): Service error=0 for worker=balancer

尝试访问

  1. 127.0.0.1:81

得到正常结果

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

*扩展

  • 如果将host改为"localhost"是否能正常访问?
  • 与另一篇中用httpd自带lb的方式不同映射的路径("./test"),这里是根目录,需要如何配置达到相同效果?
  • 这里测试结果可以正常显示样式和图片,是什么配置起的作用?

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

  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 (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy

    Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy httpd版本: httpd-2.4.17 参考来源: Apache (1) -- Mac下安装Apac ...

  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. CentOS6.6 32位 Minimal版本纯编译安装Nginx Mysql PHP Memcached

    声明:部分编译指令在博客编辑器里好像被处理了,如双横线变成单横线了等等,于是在本地生成了一个pdf版本,在下面地址可以下载. LNMP+Memcached CentOS是红帽发行的免费的稳定Linux ...

  2. ajax操作登录

    js文件中的内容(ajax.operate.js) ;(function ($, window) { var _ajaxOperate = window.ajaxOperate || {}; _aja ...

  3. 你的Android不好用,都是因为这几点原因

    Android早已是全球最大.用户最多的移动操作系统,不过它离全球最好用还差得很远. 大家随手就能举出些曾经历过的糟心体验,如手机卡顿!电量不禁用!广告弹窗老是出现!不过很少有人会追根寻底的去问为何如 ...

  4. Linux进程概述

    一.介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号.系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(pr ...

  5. Sublime Text 无法使用Package Control或插件安装失败的解决方法

    Sublime Text用了一年多了,公司搬家近期突然发现Package Control无法安装新插件了.尽管不影响原有功能的使用.还是要解决它.因为本人用Windows系统,仅仅讨论Windosw下 ...

  6. es6 generator 基础知识

    1.定义和使用 function *gen() { return 'first generator'; } // 有点类似类的实例化过程 let generatorResult = gen() // ...

  7. Latex文件如何拆分进行独立编译?

    Latex文件如何拆分并进行独立编译? --latex源文件分批独立编译     最近使用Latex编写长文档,对于文件的组织有些困扰.   如果LaTeX文档比较大,可以考虑拆分为几个部分.比如编辑 ...

  8. django中处理文件上传文件

    1 template模版文件uploadfile.html 特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multi ...

  9. js左侧三级菜单导航实例代码

    在左侧三级菜单导航想必大家都见到过吧,它的实现过程也并不复杂,下面有个不错的示例,感兴趣的朋友可以了解下 实例代码:   <!DOCTYPE html PUBLIC "-//W3C// ...

  10. RhinoMock学习-绑定回调

    Expect.Call(testClass.Test(new Arg())) .IgnoreArguments() .Return() .Callback(); return true; })); . ...