当前位置: 首页 > 编程日记 > 正文

使用Apache对Tomcat进行负载均衡

翻译:疯狂的技术宅
原文标题:Load balancing tomcat with Apache
原文链接:http://programmergate.com/loa...
本文首发微信公众号:充实的脑洞

有时候我们需要把自己的应用部署在多个Tomcat实例上,这种场景通常是在使用大量内存进行存储,并且拥有大量的活跃用户时。使用多个实例的主要优点是可以把请求和负载分担到多个节点上,以提供高可用性并加快服务请求。

负载均衡是将客户端请求分发到多个可用节点的过程,通常是通过接收请求的Web服务器将应用程序暴露给客户端,并根据每个节点的可用性和压力将它们分发到配置好的应用程序服务器。 在本文中,我们将介绍如何通过Apache Web服务器配置简单的Tomcat负载均衡器。

clipboard.png

1. 安装Tomcat实例

本教程在2台不同的Windows机器上安装2个Tomcat实例。通常可以在同一台机器上配置多个Tomcat实例,但是建议将其分别安装在不同的机器上,以便将负载分配到2个物理内存而不是1个。

2. 下载并安装Apache

从这里下载最新稳定的Apache版本,你可以在其中一台Tomcat机器上设置Apache,或者为其单独分配一台机器。

clipboard.png

将下载的文件解压缩到D:盘,并设置conf文件夹下httpd.conf文件中的SRVROOT变量:

Define SRVROOT "D:\Apache24"

要安装Apache,请以管理员身份运行cmd,把路径切换到为D:Apache24bin,执行以下命令:

httpd -k install

现在,Apache Web服务器已成功安装在你的计算机上。

要启动Apache,请以管理员身份在D:Apache24bin路径下运行以下命令:

sc start Apache2.4

默认情况下,Apache将在端口80上运行,如果要检查它是否意境成功的启动,可以在你的浏览器上访问localhost,将看到以下页面:

clipboard.png

3. 下载mod_jk模块

从这里下载mod_jk模块,这个插件负责Apache和tomcat之间的通信。

clipboard.png

解压缩mod_jk.zip文件并将 mod_jk.so 复制到 D:Apache24modules 中。

4. 配置Apache负载均衡

编辑D:\Apahe24\conf\http.conf 文件

  • 在LoadModule指令末尾添加以下内容:
LoadModule jk_module modules/mod_jk.so
  • 在文件结尾处添加以下内容:
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel infoJkMount /* loadbalancer
JkMount / loadbalancer

workers.properties

在conf目录下创建workers.properties文件,此文件定义了要负载均衡的多个Tomcat实例以及负载均衡器。以下是worker.properties的内容:

# 定义负载均衡器,这里的名称是loadbalancer
worker.list=loadbalancer# Define the properties of first tomcat worker named tomcat1
worker.tomcat1.port=8008
worker.tomcat1.host=<ip>
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1# 定义名为tomcat1的第一个tomcat worker的属性
worker.tomcat2.port=8009
worker.tomcat2.host=<ip>
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1# 定义负载均衡器及其管理的worker的属性
workers which manage.
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1, tomcat2
  • worker.<workerName>.port: 定义tomcat实例运行的ajp端口。
  • worker.<workerName>.host: Tomcat机器的IP地址或主机名。
  • worker.<workerName>.type: worker的类型,在这个例子中我们使用2种类型的worker

    • ajp13: 该worker直接与tomcat实例通信。
    • lb: 一个负载均衡器worker,负责管理和负载均衡多个ajp13 worker。
  • worker.<workerName>.lbfactor: 定义Tomcat节点的强度,在将请求转发给Tomcat节点时,负载均衡器worker将参考这个值。
  • worker.loadbalancer.balance_workers: 定义要由负载均衡器管理的 ajp13 worker 的名称。

5. 配置Tomcat实例

修改每个Tomcat实例的启动配置,以匹配Apache中相应的工作属性。

将tomcat1的TOMCAT_HOME/conf/server.xml文件编辑为下面的内容:

<!-- Define the http port of tomcat -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="8443" URIEncoding = "utf-8"/><!-- Define the ajp port of tomcat, this port should match the one 
in workers.properties -->
<Connector port="8008" protocol="AJP/1.3" redirectPort="8443"   
URIEncoding = "utf-8"/><!-- Define the jvm routing of tomcat, this routes to tomcat1 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

将tomcat2的TOMCAT_HOME/conf/server.xml文件编辑为下面的内容:

<!-- Define the http port of tomcat -->
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" 
redirectPort="8143" URIEncoding = "utf-8"/><!-- Define the ajp port of tomcat, this port should match the one 
in workers.properties -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8143"   
URIEncoding = "utf-8"/><!-- Define the jvm routing of tomcat, this routes to tomcat2 -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

重启tomcat节点和Apache服务器后,会成功建立负载均衡,Apache可以把请求转发到在Tomcat1和Tomcat2上

PS: 该应用程序通过Apache主机名和端口访问。

关注微信公众号:充实的脑洞, 一个技术宅的保留地

相关文章:

linux数据库什么意思,Linux系统中的数据库命令是什么

Linux系统中难免会跟数据库打交道的时候&#xff0c;掌握数据库相关命令是很重要的。下面由学习啦小编为大家整理了Linux系统中数据库命令是什么的相关知识&#xff0c;希望对大家有帮助!Linux系统中的数据库命令是什么&#xff1a;常用命令1.linux下启动mysql的命令&#xff1…

C#.NET 中的类型转换

前些天&#xff0c;碰到了数据类型转换与格式化问题&#xff0c;在网上查找了一下&#xff0c;有人已经把它写了出来&#xff0c;粘贴如下&#xff0c;共大家分享&#xff1a;C#.NET 中的类型转换C# 出来也有些日子了&#xff0c;最近由于编程的需要&#xff0c;对 C# 的类型转…

『科学计算』可视化二元正态分布3D科学可视化实战

二元正态分布可视化本体 由于近来一直再看kaggle的入门书&#xff08;sklearn入门手册的感觉233&#xff09;&#xff0c;感觉对机器学习的理解加深了不少&#xff08;实际上就只是调包能力加强了&#xff09;&#xff0c;联想到假期在python科学计算上也算是进行了一些尝试学…

继中美之后,欧盟会成为下一个 AI 超级体吗?

美国和中国已经是毋庸置疑的AI超级体了&#xff0c;那么欧盟有可能成为下一个吗&#xff1f;德国总理安格拉默克尔以冷酷无情著称&#xff0c;但需要的时候她也可以很幽默。在最近一次由科技杂志《Ada》举办的季度会议上&#xff0c;有人问她是否认为机器人应当拥有权利&#x…

Transformer新型神经网络在机器翻译中的应用 | 公开课笔记

嘉宾 | 于恒来源 | AI科技大本营在线公开课编辑 | Jane于恒&#xff1a;直播间的朋友大家好&#xff01;欢迎大家来到本次AI科技大本营公开课&#xff0c;我是本次讲师于恒。在讲课开始之前先简短的做个自我介绍&#xff0c;我是博士毕业于中国科学院计算技术研究所&#xff0c…

linux终端vi退出命令,如何从命令行关闭vim?

问题描述我知道这更像是一个普通的linux问题&#xff0c;但是没有。因此&#xff0c;当我在命令提示符下输入类似vim的程序时&#xff0c;它会显示文件中的所有文本&#xff0c;我可以编辑它等等。但是我无法弄清楚如何关闭或保存文件并返回命令提示符而不会被杀死这个过程。任…

Mysql 小数点后最多保留两位数

CAST(money/100 as DECIMAL(10,2)) AS num 转载于:https://www.cnblogs.com/moxiaoping/p/7611090.html

这次拿下Python全靠它了!一个交互式的学习资源!

你的假期余额已不足&#xff01;在假期的最后一天&#xff0c;我们给大家介绍一本非常 nice 的 Python 学习书——Project Python。Project Python是一本免费的交互式书籍&#xff0c;它通过使用图形、动画和游戏来教你用 Python编写代码。后面你还将学到解决经典计算机科学问题…

linux启动sql server数据库,SQL Server数据库启动过程详解及启动不起来的问题分析及解决方法...

第五步、启动系统数据库modelmodel系统数据库同样也是SQL Server启动过程中用到的一个非常关键的数据库&#xff0c;如果这个库损坏&#xff0c;SQL Server启动也会失败&#xff0c;关于model数据不能启动的原因基本和master的类似&#xff0c;同样也是两种&#xff1a;1、数据…

navicat对mysql的备份

1&#xff1a;备份位置&#xff1a;_3306的“连接信息”可以看到。或者点&#xff1a;前往设置保存路径 2&#xff1a;建议一定时间点进行备份或者命令执行&#xff1b;转载于:https://blog.51cto.com/q168988/1969780

上当记,收国外快递时,注意相关责任定义

刚才在收到M$从米国寄来的包裹时&#xff0c;一时大意给了送快递的&#xff11;百多的税钱&#xff0c;后来想想不对&#xff0c;在包裹上看到DDP字样&#xff08;Delivery duty paid&#xff09;&#xff0c;上网一查DDP&#xff1a; “完税后交货&#xff08;……指定目的地&…

python远程登录linux命令,Python+requests通过paramiko远程登录Linux执行sh命令

在做自动化测试过程中, 偶尔需要登录Linux服务器执行一些sh命令。Python的paramiko模块, 遵循SSH2协议, 支持以加密和认证的方式远程连接服务器, 可用来连接远程linux主机, 然后执行Linux命令或者通过SFTP传输文件封装的方法import paramikoclass Operate_Server():def __init_…

2017-09-29 前端日报

2017-09-29 前端日报 精选 被誉为神器的requestAnimationFrame我是怎样让网站用上HTML5 ManifestReact 的性能优化&#xff08;一&#xff09;当 PureComponent 遇上 ImmutableJSJavaScript 异步队列实现及拓展CSS Grid Gotchas And Stumbling BlocksAbortable fetchAlloyTeam …

Apache Kylin v2.5.0正式发布,开源分布式分析引擎

文章转载自开源中国&#xff0c;作者 Apache Kylin 社区日前&#xff0c;Apache Kylin 社区宣布&#xff0c;Apache Kylin v2.5.0 正式发布。Apache Kylin 是一个开源的分布式分析引擎&#xff0c;旨在为极大数据集提供 SQL 接口和多维分析&#xff08;OLAP&#xff09;的能力。…

不同职业阶段的修炼: 多与少

有多才有少 开学第一天&#xff0c;教室里挤满来选修“领导”课程的学生&#xff0c;这一群两年后就会变成企业竞相争取的名校MBA&#xff0c;心中难免兴奋地等待教授的出现。教室门被推开后&#xff0c;走进三个人&#xff0c;教授后面跟着一个年轻的陌生人&#xff0c;还有一…

underscorejs之 _.indexBy(list, iteratee, [context])

语法 _.indexBy(list, iteratee, [context]) 说明 给定一个list&#xff0c;和 一个用来返回一个在列表中的每个元素键 的iterator 函数&#xff08;或属性名&#xff09;&#xff0c; 返回一个每一项索引的对象。和groupBy非常像&#xff0c;但是当你知道list的key是唯一的时候…

linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

一、Shell脚本中$0、$?、$!、$$、$*、$#、$等的意义说明(1)$$Shell本身的PID(ProcessID&#xff0c;即脚本运行的当前进程ID号)(2)$!Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)(3)$?最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示…

云从科技完成B+轮超10亿元融资,多个国家基金进入

10 月 8 日&#xff0c;中国人工智能国家队云从科技宣布正式完成新一轮超 10 亿元人民币融资&#xff0c;除元禾原点、越秀金控&#xff0c;刘益谦等原有股东继续跟投外&#xff0c;本轮新增了多家中国国家战略投资者&#xff0c;其中不乏知名地方政府基金&#xff0c;包括中国…

12×××求职经过-之求职信

求职信&#xff1a; 鼠&#xff1a;本地户口&#xff0c;以前在武钢工地打过工&#xff0c;转移过一部分钢材的所有权&#xff0c;被当做失足青年挽救三年。擅长上夜班&#xff0c;会开麻木&#xff0c;求社区服务&#xff0c;家政等职。 牛&#xff1a;身体好&#xff0c;能吃…

面向对象三大特性一一封装(encapsulation)

为什么要封装&#xff1f; 我们看电视&#xff0c;只要按一下开关和换台就行了。有必要了解电视的内部结构吗&#xff1f;有必要了解显像管吗&#xff1f; 封装是为了隐藏对象内部的复杂性&#xff0c;只对外公开简单的接口。便于外界调用&#xff0c;从而提高系统的可扩展性&a…

云计算赋能人工智能,未来的红利在哪?

“云”这个概念对于身处于信息时代的我们而言越来越熟悉&#xff0c;而云计算平台作为对计算机软硬件资源进行集中存储、管理的平台&#xff0c;已经不再是一个遥远的 IT 概念&#xff0c;它开始渗透到各行各业&#xff0c;未来将会像水和电一样&#xff0c;作为基础设施&#…

pxe linux 配置文件,Linux PXE 部署

一、基础环境准备Linux配置静态IP-192.168.5.1# vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICEeth0ONBOOTyesBOOTPROTOstaticIPADDR192.168.5.1NETMASK255.255.255.0:x --保存退出#service network restart#service iptables stop二、准备安装镜像#mount /dev/cdrom /m…

Keras还是TensorFlow?深度学习框架选型实操分享

译者| 王天宇、林椿眄责编| Jane、琥珀出品| AI科技大本营深度学习发展势头迅猛&#xff0c;但近两年涌现的诸多深度学习框架让初学者无所适从。如 Google 的 TensorFlow、亚马逊的 MXNet、Facebook 支持的 PyTorch、Theano、Caffe、CNTK、Chainer、百度的 PaddlePaddle、DSSTN…

Android -- queryIntentActivities

某些时候你想要知道某个APP是否有注册了一个明确的intent&#xff0c;比如说你想要检查某个receiver是否存在&#xff0c;然后根据是否存在来这个receiver来在你的AP里面enable某些功能。我们可以通过PackageManager来check它。 code public boolean isIntentAvailable(Context…

吉大c语言程序设计作业一,吉林大学历年C语言程序设计试题及答案.doc

吉林大学历年C语言程序设计试题及答案吉林大学历年C语言程序设计试题及答案(5)END2000年试题答案一、(1)解题思想&#xff1a; 用5个数 a,b,c,d,e,来回替换&#xff0c;最终f(n)算出。设计程序如下&#xff1a;int F(int n){ if(n <5) return n ;int temp,a1;b2;c3;d4;e5;fo…

忍不住心中的激动

天天上自行车旅行网&#xff0c;看到别人的出行游记&#xff0c;心里很羡慕&#xff0c;也很冲动&#xff0c;想想还有1个多月就可以出发了&#xff0c;不知道能坚持到哪里&#xff0c;恒心是有的&#xff0c;可身体就不知道&#xff0c;不过这次时间可以不用那么紧&#xff0c…

程序员入错行怎么办?

程序员应该选择什么技术领域才能获得最高的回报&#xff1f;本文详细解读了 2018 年最热门的五大领域&#xff0c;对行业现状、薪资概况及具体的技能要求给出了深入的分析&#xff0c;希望给担心“入错行”的你提供些指导。七天国庆黄金周转眼就过&#xff0c;退散的除了出游热…

关于局域网共享访问问题总结

Windows网上邻居互访的基本条件&#xff1a;  1) 双方计算机打开&#xff0c;且设置了网络共享资源&#xff1b;  2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务&#xff1b;  3) 双方都正确设置了网内IP地址&#xff0c;且必须在一个网段中&…

Linq初级班 Linq To XML体验(基础篇)

LINQ To XML体验(基础) 这两天开始学习LINQ to XML的知识,我会继续把自己的感想和示例发布给初学者们学习的,一样欢迎高手们多多指点,请勿使用过激语言,针锋相对,我是个初学者,自知还有许多不足的地方,还请高手们多多耐心指导,好了,下面就开始我们的LINQ to XML旅程吧,在此之前…

c语言字符串机考题,2016全国计算机二级《C语言》机考试题及答案

2016全国计算机二级《C语言》机考试题及答案一、程序填空题(共18分)下列给定程序中&#xff0c;函数fun的功能是&#xff1a;求ss所指字符串数组中长度最短的字符串所在的行下标&#xff0c;作为函数值返回&#xff0c;并把其串长放在形参n所指的变量中。ss所指字符串数组中共有…