Apache 解析html能力强悍,还具有很好的负载均衡转发能力,按照特定的算法可以优化网站。Tomcat作为servlet容器,专用于解析jsp之类的文件,效率较高 。两者的搭配可以解决一定程度的高流量大并发访问。
下面使用apache作为web端 tomcat作为容器搭建集群实现负载均衡
测试用到的软件版本:
Tomcat 5.5
Apache 2.2
Mod_jk.so
Jkd 1.6
Mysql
环境 Fedora 14+ Windows7
基本原理
把用户从客户端传送过来的请求使用apache拦截 ,把那些不该自己处理的请求通过JK_mount 交给tomcat处理。Tomcat处理完成返回给apache 然后返回给客户
2 负载均衡
Apache 安装目录 /usr/local/httpd
Tomcat 安装目录 /usr/Soft/tomcat /usr/Soft/baktomcat windows7下 E:\tomcat
要测试的应用 /usr/Application/appli 该应用在window7下目录 E:\appli
安装完成以后 在$http/conf/http.conf 加入下列代码
#Virtual hosts
Include conf/vhosts.conf
#mod_jk.so
Include conf/mod_jk.conf
就是引入两个文件
先说 mod_jk.conf 这个东西来处理请求转发 mod_jk.conf 需要有一下内容 :
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkShmFile logs/jk-runtime-status
JkLogLevel info
有了这个可以监控请求转发到那个服务器 还有启动遇到什么问题 一般 loglevel 设 为info即可 这里面还定义了另外一个文件
Workers.properties 这个文件定义的是和tomcat如何通信 需要留意的是使用粘性 session 需要显式设置。多个tomcat不使用粘性session的话,apache会把用户过来的请 求随机发给某一个服务器。不能保存用户信息 。使用粘性session定位到具体某一个 tomcat为用户服务。例子如下:
worker.list=appli,cooking,mabole,controller,jkstatus
worker.appli.type=ajp13
worker.appli.host=localhost
worker.appli.port=9009
worker.appli.lbfactor=1
worker.appli.activation=A
worker.cooking.type=ajp13
worker.cooking.host=localhost
worker.cooking.port=9010
worker.cooking.lbfactor=1
worker.appli.activation=A
worker.mabole.type=ajp13
worker.mabole.host=192.168.1.2
worker.mabole.port=9011
worker.mabole.lbfactor=2
worker.controller.type=lb
worker.controller.balance_workers=appli,cooking,mabole
worker.controller.sticky_session=1
worker.jkstatus.type=status
上文的意思是三个tomcat名字分别为appli,cooking,mabole
使用均衡器controller来做负载均衡
其中lbfactor为权重 表示分到的请求多少 越大分到的越多
最后一行使用粘性session 的配置: worker.controller.sticky_session=1
等同于:worker.controller.sticky_session=true
Httpd.conf中还引入了另外一个文件 whost.conf这个文件主要用来配置虚拟主机
需要注意的是把虚拟主机坚挺到的请求全部交给workers.properties中定义的controller 去处理就可以了 。Controller会根据各个 tomcat的加权比重权衡着分发请求
具体配置如下所示:
NameVirtualHost 192.168.10.130:80
<VirtualHost 192.168.10.130:80>
ServerAdmin zuoshuaifs@126.com
ServerName localhost
DocumentRoot "/usr/local/httpd/htdocs"
DirectoryIndex index.html index.jsp index.htm
jkMount /*.jsp controller
jkMount /*.htm controller
</VirtualHost>
集群
负载均衡是集群搭建好以后才出现的一种效果 。一个是方法一个是目的 、集群还可。集群还有除了具有负载均衡功能之外还有别的用途。
实现方法:修改/use/Soft/tomcat/Server.xml 和/usr/Soft/baktomcat/server.xml 把这个文件中关于集群的注释去掉即可 这段代码的位置在<Host>节点内部,地点随意
如下:
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="15000"
waitForAck="true"/>
<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
需要注意的是两个tomcat如果在同一个机器上 要把<Receiver>节点里面的额tcpListenerPort要修改成不同的端口 避免发生冲突。
tomcat配置
Tomcat _server.xml主要需要注意的有3个端口如果在同一台服务器就要注意这三个端口的两个tomcat都不能重复
Server port="" 关闭tomcat使用的端口 监听shutdown命令
connectorPort=""自己做服务器是使用的端口 http://localhost:port
connetcotPort="" 和apache整合需要的端口 在workers.properties中配置的 work.appli.prot=....就是指的这个端口。使用的AJP13协议
置于b项中间tomcat请求重定向的端口不用管他 这个专门处理https,SSL请求 用的不多
Session复制
这是集群的另外一个好处。集群中的多台服务器共同为用户服务。在用户看来只是一个大的服务器。具体是那一台对用户来说是透明的 。但是如果这个用户正在访问的服务器出了问题当机了,就要用到session复制的功能了 。
配置的时候注意两个地方
a.应用里面 WEB-INF/web.xml 在节点<web-app>下面加上一行
<distributable/>
B.在worker.properties 配置worker.appli.activation=A
表示使用交互模式
C.想要session复制可以放入session的对象都是实现了序列化接口的 所以在编程的时候注意把DO实现serializable接口即可
工作原理:三个工作的服务器 ,用户过来以后 ,controller把请求交给appli但是,这时候appli当机了 ,control重新交给cooking 这样相当于把appli的session复制了一份给cooking 所以对用户来说不会收到任何影响 ,使用firefox的firebug插件可以看到在appli当机以后,虽然在另外一台服务器工作了 ,但是请求头里面的sessionId仍然显示的是appli这个session
这样就实现了session无缝迁移 。
Session复制会在一定程度上影响系统性能
要求不高的网站可以部配置这个选项。只要实现集群就可以相当程度分散服务器负担。只是无法保存用户状态 。比如登陆的用户点击某一个网页以后突然发现自己掉线了
分享到:
相关推荐
### 软件架构杂论的关键知识点 #### 一、软件架构的概念与重要性 - **背景**: 随着软件技术的飞速发展,软件规模不断扩大,开发周期缩短,行业分工细化,市场竞争加剧,软件架构的重要性日益凸显。 - **核心价值**:...
1_引言&微机知识杂论.pdf
能源杂论 安杰逻:我们怎么看新能源.pdf
能源杂论 太阳能、风能是环保的新能源吗.pdf
能源杂论 开拓新能源和金融创新的双赢路径.pdf
能源杂论 新能源客车2015年1月销量数据分析.pdf
能源杂论 新能源再成两会热点 混合动力能否咸鱼翻生.pdf
能源杂论 严重雾霾倒逼产业发展 新能源汽车2014年或迎爆发期.pdf
总结,空转滑行与粘着问题是铁路运输中不可忽视的技术难题,深入理解和研究粘着特性,以及开发更有效的防滑控制系统,对于提升铁路系统的安全性和效率至关重要。同时,对车轮踏面损伤的持续关注和预防措施的优化,也...
断验杂论四柱平和,不争妒。(原局四柱中和,无冲克争战,主性格随和,不与他人争锋。)年月日时在一旬,金榜题名显威,乐而忘忧。(此乃先贤口诀,六十花甲共有六旬,甲子、甲戌、甲申、甲午、甲辰、甲寅,每旬各有
- **技术博客**: 张頔在CSDN上的技术博客提供了交流平台。 - **在线资源**: 官方网站和其他在线论坛提供了丰富的学习资源和支持。 通过上述内容的介绍,我们可以了解到nesC语言作为TinyOS上的开发语言,在无线...
- 了解各类文学体裁的特点和分类,如古代诗、词、曲、史传、小说、杂论等。 - 掌握文学流派、文学社团和文学运动等重要历史背景知识。 5. 默写常见的名句名篇的要求: - 内容上:思想性、艺术性与哲理性兼备,...
《快递批量查件1.32.zip:快递物流批量查询技术详解》 在现代电子商务盛行的时代,快递物流已经成为日常生活中不可或缺的一部分。对于商家而言,批量处理快递查询的需求日益凸显,因此,"快递批量查件1.32.zip"这样...
文学体裁常识的掌握包括对诗歌、散文、小说、戏剧等不同文体的特征和分类的理解,特别是古代文体如诗、词、曲、史传、小说和杂论。同时,学生还需了解文学史上有影响力的流派、社团和运动,以增进对文学发展的全面...
该系统可以将杂论无章的信息经过组织,合理有序地呈现在大家面前。 系统的功能与要求: 1. 招聘管理:系统可以对招聘信息进行管理,包括发布招聘信息、统计应聘信息等。 2. 岗位管理:系统可以对岗位信息进行管理...
5. 《几何原本杂论》的作者是徐光启,这是中国历史上对古希腊数学著作《几何原本》的研究。 数学学习部分涉及: 1. 偶数与正整数的比较:偶数和正整数数量一样多,因为每个正整数都可以对应一个偶数(自身或自身+1...
22. **数学著作**:《几何原本杂论》是徐光启翻译的西方数学著作。 23. **有理数、无理数与实数的关系**:有理数和无理数都是实数的子集,实数包含了有理数和无理数。 24. **旋转体的体积**:椭圆绕轴旋转形成的...
- 全书共分五大部分:文道论、创作论、鉴赏批评论、文体论及杂论。 - 该书不仅是文学理论的经典之作,也是中国文学史上一部重要的文献。 ### 二、“知音”中的同情体验与孤独体验 1. **同情体验**(“觇文见心”...