频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 系统 > Linux > 正文

Apache + Tomcat基于mod_jk模块实现反代、动静分离、热备和负载均衡

2018-12-26 14:35:08           
收藏   我要投稿
1、简单说明:

mod_jk是ASF的一个项目,是一个工作于Apache端基于AJP协议与Tomcat通信的连接器,是Apache的一个模块,是AJP协议的客户端,服务端是Tomcat的AJP连接器。

image.png

Web客户访问Tomcat JSP组件的两种方式:

image.png

2、演示环境:

IP

操作系统

部署程序

192.168.1.143

CentOS 7.6

Apache

192.168.1.144

CentOS 7.6

Tomcat

192.168.1.145

CentOS 7.6

Tomcat

3、192.168.1.144节点禁用HTTP/1.1连接器:

# cd /usr/local/tomcat/conf

# cp server.xml server.xml.bak

# vim server.xml,注释如下代码:

4、192.168.1.145节点禁用HTTP/1.1连接器:

# cd /usr/local/tomcat/conf

# cp server.xml server.xml.bak

# vim server.xml,注释如下代码:

5、192.168.1.144节点新增jvmRoute参数:# vim server.xml

修改为

jvmRoute="TomcatA">

6、192.168.1.145节点新增jvmRoute参数:# vim server.xml

修改为

jvmRoute="TomcatB">

7、192.168.1.144节点创建测试页:

# vim /usr/local/tomcat/webapps/ROOT/test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

TomcatA

color="red">TomcatA

Session ID <%= session.getId() %>

Created ON <%= session.getCreationTime() %>

8、192.168.1.145节点创建测试页:

# vim /usr/local/tomcat/webapps/ROOT/test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

TomcatB

color="blue">TomcatB

Session ID <%= session.getId() %>

Created ON <%= session.getCreationTime() %>

9、分别启动192.168.1.144节点和192.168.1.145节点上的Tomcat:

# catalina.sh stop # catalina.sh configtest # catalina.sh start # ss -tunlp | grep -w :8009

10、192.168.1.143节点安装Apache:

# yum -y install httpd

# cd /etc/httpd/conf

# cp httpd.conf httpd.conf.bak

# vim httpd.conf,新增代码:ServerName localhost:80

# httpd -t # systemctl start httpd.service # ss -tunlp | grep -w :80

11、192.168.1.143节点配置status状态页面:

# vim /etc/httpd/conf/httpd.conf,末尾新增如下代码:

SetHandler server-status

Require all granted

# httpd -t # systemctl reload httpd.service # ss -tunlp | grep -w :80

本地浏览器访问:

192.168.1.143

image.png

192.168.1.143/server-status

image.png

12、192.168.1.143编译安装tomcat-connectors(下载地址http://tomcat.apache.org/download-connectors.cgi):

# yum -y install gcc gcc-c++ httpd-devel

# ls /etc/httpd/modules | grep mod_jk.so //默认没有此模块

# tar -xf tomcat-connectors-1.2.46-src.tar.gz -C /usr/src

# cd /usr/src/tomcat-connectors-1.2.46-src/native

# which apxs --> /usr/bin/apxs

# ./configure --with-apxs=/usr/bin/apxs

# make && make install

# ls /etc/httpd/modules | grep mod_jk.so

image.png

13、192.168.1.143配置mod_jk模块,实现TomcatB为TomcatA的Hot Standby热备

(1)创建httpd-jk.conf配置文件:# vim /etc/httpd/conf.d/mod_jk.conf

LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf.d/workers.properties

JkMountFile conf.d/uriworkermap.properties

JkLogFile logs/mod_jk.log

JkLogLevel info

JkShmFile logs/mod_jk.shm

JkMount /* lbcluster

JkMount /jk-status jk-status

备注:常用指令说明

JkWorkersFile conf.d/workers.properties:JkWorkersFile用于定义worker实例的工作属性的配置文件

JkLogFile logs/mod_jk.log:JkLogFile用于指定mod_jk模块的日志文件

JkLogLevel info:JkLogLevel用于指定日志的级别

JkMount /* lbcluster:JkMount用于控制URL与worker实例的对应关系

(2)创建workers.properties配置文件:# vim /etc/httpd/conf.d/workers.properties

worker.list=lbcluster,jk-status

worker.lbcluster.balance_workers=TomcatA,TomcatB

worker.TomcatA.type=ajp13

worker.TomcatA.host=192.168.1.144

worker.TomcatA.port=8009

worker.TomcatA.lbfactor=1

worker.TomcatB.type=ajp13

worker.TomcatB.host=192.168.1.145

worker.TomcatB.port=8009

worker.TomcatB.lbfactor=1

worker.lbcluster.type=lb

worker.jk-status.type=status

worker.TomcatA.redirect=TomcatB

worker.TomcatB.activation=disabled

worker.lbcluster.sticky_session=0

备注:常用指令说明

worker.TomcatA.lbfactor=1:lbfactor负载均衡因数,数值越大,分配到此节点的请求越多

worker.TomcatA.type=ajp13:根据工作机制的不同,worker有多种不同类型的type,这是需要为每个worker定义的一项属性。常见的type类型如下:

2 ajp13:表示当前worker为一个运行着的Tomcat实例

2 lb:即load balancing,专用于负载均衡场景中的worker,此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker

2 status:显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例

(3)创建uriworkermap.properties配置文件:# vim /etc/httpd/conf.d/uriworkermap.properties

/*=lbcluster

/jk-status=jk-status

!/*.html=lbcluster

!/*.htm=*

!/*.gif=*

!/*.jpg=*

!/*.jpeg=*

!/*.png=*

!/*.bmp=*

!/*.ico=*

!/*.mp3=*

!/*.mp4=*

!/*.mid=*

!/*.wav=*

!/*.flv=*

!/*.swf=*

!/*.rar=*

!/*.zip=*

!/*.txt=*

!/*.md=*

!/*.doc=*

!/*.docx=*

!/*.xls=*

!/*.xlsx=*

!/*.js=*

!/*.css=*

!/*.exe=*

!/*.msi=*

备注:常用指令说明

/*=lbcluster:所有请求都转发给lbcluster负载均衡控制器处理

/jk-status=jk-status:包含jk-status的请求交由jk-status这个worker处理

!/*.html=lbcluster:所有以.html格式结尾的请求不交由lbcluster处理

!/*.htm=*:所有以.htm格式结尾的请求不交由任何worker实例处理

(4)192.168.1.143节点创建用于测试的静态页面:

# echo "

/var/www/html/a.html in 192.168.1.143

" > /var/www/html/a.html

# echo "

/var/www/html/b.htm in 192.168.1.143

" > /var/www/html/b.htm

(5)192.168.1.143节点配置jk-status访问控制:

# vim /etc/httpd/conf/httpd.conf,末尾新增如下代码:

JkMount jk-status

Options MultiViews

AuthType Basic

AuthName "Marion"

AuthUserFile conf.d/.htpasswd

require valid-user granted

# htpasswd -c /etc/httpd/conf.d/.htpasswd marion

image.png

# httpd -t # systemctl reload httpd.service # ss -tunlp | grep -w :80

本地火狐浏览器访问(效果比谷歌 Chrome浏览器明显):http://192.168.1.143/jk-status

image.png

image.png

image.png

备注:上述页面可以启动或者停止集群中的服务器,也可以修改负载均衡器的配置

(6)本地浏览器验证热备效果:

192.168.1.143

image.png

192.168.1.143/server-status

image.png

192.168.1.143/a.html

image.png

192.168.1.143/b.htm

image.png

192.168.1.143/test.jsp,无论怎么刷新页面,显示的都是TomcatA,且Session ID保持不变

image.png

http://192.168.1.143/jk-status

image.png

停止192.168.1.144节点的TomcatA,无论怎么刷新页面,显示的都是TomcatB,且Session ID保持不变

192.168.1.143/test.jsp

image.png

http://192.168.1.143/jk-status

image.png

恢复192.168.1.144节点的TomcatA,无论怎么刷新页面,显示的都是TomcatA,且Session ID保持不变

192.168.1.143/test.jsp

image.png

http://192.168.1.143/jk-status

image.png

备注:热备场景中只有在TomcatA不可用的情况下才会向TomcatB发起请求,一旦TomcatA恢复正常,TomcatB就马上停止处理请求

14、192.168.1.143配置mod_jk模块,实现TomcatA、TomcatB基于实际流量大小进行负载均衡

(1)httpd-jk.conf和uriworkermap.properties配置文件内容保持不变

(2)修改workers.properties配置文件:# vim /etc/httpd/conf.d/workers.properties

删除如下2行:

worker.TomcatA.redirect=TomcatB

worker.TomcatB.activation=disabled

替换为:

worker.lbcluster.sticky_session_force=0

worker.lbcluster.method=T

备注:常用指令说明

worker.lbcluster.sticky_session=0:默认值为1 | true,表示是否启用session会话保持,如果后端各worker实例之间支撑session复制,则可以将此属性值设为0

worker.lbcluster.sticky_session_force=0:默认值为0 | false,如果集群中某台服务器多次请求没有响应,将转发当前的请求到其它服务器上处理,worker.lbcluster.sticky_session_force=1只有在worker.lbcluster.sticky_session=1时才生效

worker.lbcluster.method=R:常用方法为R、T或B,默认为R[equest],即根据请求个数进行调度;T[raffic]表示根据已经发送给worker的实际流量大小进行调度;B[usyness]表示根据实际负载情况进行调度

# httpd -t # systemctl reload httpd.service # ss -tunlp | grep -w :80

(3)本地浏览器验证负载均衡效果:

192.168.1.143/test.jsp

image.png

image.png

刷新页面,轮询显示,且Session ID一直在变:

image.png

image.png

192.168.1.143/jk-status

image.png

15、192.168.1.143配置mod_jk模块,实现TomcatA、TomcatB负载均衡和session会话保持

(1)httpd-jk.conf和uriworkermap.properties配置文件内容保持不变

(2)修改workers.properties配置文件:# vim /etc/httpd/conf.d/workers.properties

删除如下2行:

worker.lbcluster.method=T

worker.lbcluster.sticky_session=0

替换为:

worker.lbcluster.sticky_session=1

# httpd -t # systemctl reload httpd.service # ss -tunlp | grep -w :80

(3)本地浏览器验证负载均衡和session会话保持效果:

192.168.1.143/test.jsp,无论怎么刷新页面,页面内容和Session ID均不会改变:

image.png

192.168.1.143/jk-status

image.png

# vim /etc/httpd/conf.d/workers.properties,目前配置如下所示:

worker.lbcluster.sticky_session=1

worker.lbcluster.sticky_session_force=0

停止192.168.1.145节点的TomcatB,无论怎么刷新页面,显示的都是TomcatA,且Session ID保持不变

192.168.1.143/test.jsp

image.png

192.168.1.143/jk-status

image.png

恢复192.168.1.145节点的TomcatB,无论怎么刷新页面,显示的还是TomcatA,且Session ID保持不变

192.168.1.143/test.jsp

image.png

192.168.1.143/jk-status

image.png

# vim /etc/httpd/conf.d/workers.properties,修改为如下配置:

worker.lbcluster.sticky_session=1

worker.lbcluster.sticky_session_force=1

192.168.1.143/test.jsp,无论怎么刷新页面,页面内容和Session ID都保持不变:

image.png

192.168.1.143/jk-status

image.png

停止192.168.1.144节点的TomcatA,无论怎么刷新页面,提示的都是503错误

192.168.1.143/test.jsp

image.png

192.168.1.143/jk-status

image.png

恢复192.168.1.144节点的TomcatA,无论怎么刷新页面,显示的还是TomcatA,且Session ID保持不变

192.168.1.143/test.jsp

image.png

192.168.1.143/jk-status

image.png

上一篇:DC复制错误
下一篇:kvm中的VNC常见故障
相关文章
图文推荐

关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

XML 地图 | Sitemap 地图