



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Apache+tomcat+memcache 负载均衡的入门配置目录一、准备工作1二、配置 Apache11、打开相关的模块。12、配置 tomcat 集群。2三、配置tomcat21、配置 server 的关闭。22、配置 Connector23、配置 Engine34、配置 Session 的复制3这份文档只是一个初步的配置负载均衡的文档,没有涉及过多的性能优化的东西。所以也就不多言了,直接切入主题。一、准备工作安装 JDK 并配置环境变量。这里要求至少1.5 以上版本。安装 apache2.2。我的安装目录为:D:Apache2.2安装 tomcat6 。为了端口不起冲突,建议直接解压。
2、我这里只使用了两台tomcat 作为集群服务器。其路径分别为D:apache-tomcat-6.0.20_v1 、D:apache-tomcat-6.0.20_v2二、配置 Apache这里说明一下, 我在网上找到的一些资料都在介绍mod_JK 的方式配置负载均衡。但是从 apache2.X 版本之后其自身已经集成了 mod_jk 可以直接使用 mod_proxy 的方式进行负载均衡的配置,所以下面介绍的也即是这种方式。在 D:Apache2.2conf 目录下找到 httpd.conf 文件,并进行修改。修改步骤:1、打开相关的模块。LoadModule proxy_module modul
3、es/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so Load
4、Module rewrite_module modules/mod_rewrite.so在配置文件里找到上述模块,将前边的“#”去掉 .2、配置 tomcat集群。在该配置文件的最后加上:ProxyRequests OffProxyPass / balancer:/cluster/<proxy balancer:/cluster>BalancerMember ajp:/ localhost:8009 loadfactor=1 route= jvm1 BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </p
5、roxy>注意红色部分, 因为这里我只使用了一台物理机器作为集群的配置,所以就直接使用了localhost 指向本地的集群服务器, 你也可以使用 。如果这里你使用多台机器一起配合的话,只需要将 localhost 修改为其他机器的 IP 地址就行。另外需要注意的就是上面配置的端口,为什么要这么配置?将在后边结合tomcat一起做一个详细的说明。三、配置 tomcat在 D:apache-tomcat-*conf 找到 server.xml,然后着手修改。1、配置 server的关闭。因为我是在同一台机器上配置两台 tomcat,所以为了使 tomcat 关闭不出现端口被
6、占用的情况,需要修改关闭端口。<Server port=" 8005" shutdown="SHUTDOWN">修改为:<Server port=" XXXX " shutdown="SHUTDOWN">注意,我这里用了两台个 tomcat 我将此端口修改为了tomcat ,所以第一个tomcat 我就选择了默认的端口8005,第二9005。总之,如果你有多台tomcat 服务器群,都需要将它们的端口修改为互不冲突的端口号。2、配置 Connector这里又两个地方需要修改,第一个就是tom
7、cat 监听的 http 端口,另一个就是tomcat 监听的 AJP 端口:<Connector port=" 8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port=" 8009" protocol="AJP/1.3" redirectPort="8443" />注意,蓝色部分是 tomcat 的 http 端
8、口,因为我在同一台机器上配置了两个 tomcat,为了使它们的 http 端口不冲突,我将第一个 tomcat 使用默认的端口即 8080,第二个 tomcat 的http端口我修改为了8081。同样的道理,如果你还有其他的tomcat,记得将它们的http端口修改为互不冲突的端口号即可。另一个需要修改的端口,红色部分的端口,这里是apache 和tomcat链接的关键,前台apache 就是通过AJP 协议与 tomcat 进行通信的,以完成负载均衡的作用。现在回过头去看看 apache 的 httpd.conf 配置,<proxy balancer:/cluster>Balan
9、cerMember ajp:/ localhost:8009 loadfactor=1 route= jvm1BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>那么,另一个tomcat 的 AJP 端口你知道要配置成什么了吗?对了,就是9009。3、配置 Engine<Engine name="Catalina" defaultHost="localhost"> ,这个是原来的配置, 现在将这个配置修改为: <Engine name=&q
10、uot;Catalina" defaultHost="localhost" jvmRoute=" jvm1 "> ,然后另一个 tomcat 修改为 <Engine name="Catalina" defaultHost="localhost" jvmRoute=" jvm2 "> 。现在再回过头去看看apache 的配置:<proxy balancer:/cluster>BalancerMember ajp:/ localhost:8009 loadfa
11、ctor=1 route= jvm1 BalancerMember ajp:/ localhost:9009 loadfactor=1 route= jvm2 </proxy>这里再说明一点,loadfactor 相当于一种加权策略,服务器分到的请求就越多。像上面的这种设置就说明两台loadfactor 的值越大,对应的tomcat 将平均负载。tomcat4、配置 Session的复制步骤 1: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptio
12、ns="8"><Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/><Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className=
13、"org.apache.catalina.tribes.membership.McastService"address=""port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto"port="4000"
14、autoBind="100"selectorTimeout="5000"maxThreads="6"/><!- timeout="60000"-><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParal
15、lelSender" /> </Sender><InterceptorclassName="erceptors.TcpFailureDetector"/><InterceptorclassName="erceptors.MessageDispatch15Interceptor"/><InterceptorclassName="org.apache
16、.erceptors.ThroughputInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/><Valve className="org.apache.catalina.ha.session.Jvm
17、RouteBinderValve"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListenerclassName="org.apache.cat
18、alina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>步骤 2:在每个 web 项目 web-info 下 web.xml 最后加上 <distributable/> 新建一个项目测试就 OK 了 惊醒测试测试结果jvm1Jvm25、安装 memcache客户端1Memcached介绍Me
19、mcached是一个高性能的分布式内存对象缓存系统,用于动态Web 应用以减轻数据库负载。 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、 数据库驱动网站的速度。Memcached基于一个存储键/值对的 hashmap 。其守护进程 ( daemon)是用 C 写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。Memcached需要有缓存服务端,采用中实现 memcached服务的插件。2 使用 Memcached目的java编程的话还需要memcached.jar,这就是java研究这个东东主要是为了解决在项目中,由于信息过多,当用户查询数
20、据时(目前当天查询的都是前一天的数据) ,由于数据量过大, 并且大并发情况下数据库频繁读写造成速度慢的问题。所以就想通过使用 Memcached 解决这一问题。3memcached原理及工作机制Memcache是 的一个项目, 最早是为LiveJournal服务的, 目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络 IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个 HashTable , Memcached 自管理这些 HashTable 。4准备过程在开发前,要准备有:memcached-1.2.6-win32-b
21、in.zipwindows下服务器memcached-1.2.6-win32-src.zipwindows下服务器源码(是C 语言哦,亲)memcached-1.2.6.tar.gzlinux 下服务器java_memcached-release_2.5.1.jarjava 客户端 JAR 包5服务器安装过程首先解压 memcached-1.2.6-win32-bin.zip 到某一盘下,然后使用命令、或者直接双击,运行。相当于就已经安装好 memcached 服务器了。并且启动了服务。它的默认端口是:11211( 不建议修改 )打开控制面板管理工具服务:此时可以访问一下服务器:打开运行cmd
22、 telnet 11211输入命令stats这里显示了很多状态信息,下边详细解释每个状态项:1.pid: memcached服务进程的进程ID2. uptime: memcached 服务从启动到当前所经过的时间,单位是秒。3. time: memcached 服务器所在主机当前系统的时间,单位是秒。4.version: memcached 组件的版本。这里是我当前使用的1.2.6 。5.pointer_size :服务器所在主机操作系统的指针大小,一般为32 或 64.6. curr_items :表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
23、7. total_items :表示从 memcached 服务启动到当前时间, 系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。8. bytes :表示系统存储缓存对象所使用的存储空间,单位为字节。9. curr_connections :表示当前系统打开的连接数。10. total_connections :表示从 memcached 服务启动到当前时间,系统打开过的连接的总数。11. connection_structures :表示从 memcached 服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。12. cmd
24、_get :累积获取数据的数量,这里是3 ,因为我测试过 3 次,第一次因为没有序列化对象,所以获取数据失败,是null ,后边有2 次是我用不同对象测试了2 次。13. cmd_set :累积保存数据的树立数量,这里是2.虽然我存储了3 次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。14. get_hits :表示获取数据成功的次数。15. get_misses :表示获取数据失败的次数。16. evictions :为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据 LRU 算法移除的对象,以及过期的对象。17. bytes_read :mem
25、cached 服务器从网络读取的总的字节数。18. bytes_written :memcached 服务器发送到网络的总的字节数。19. limit_maxbytes :memcached 服务缓存允许使用的最大字节数。 这里为 67108864 字节,也就是是 64M. 与我们启动 memcached 服务设置的大小一致。20. threads :被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。6 客户端开发过程(分为2 种)第 1 种:不使用spring (直接在static里面初始化连接。)1加载 java_memcached-release_2.5.
26、1.jar包2编写 MemcachedUtil 分布式缓存工具类3 创建需要缓存的对象(必须要序列化对象)对于普通的POJO 而言,如果要进行存储的话,那么比如让其实现java.io.Serializable接口,因为 memcached是一个分布式的缓存服务器,多台服务器间进行数据共享需要将对象序列化的, 所以必须实现该接口,否则会报错的。 缓存中获取的对象是存入对象的一个副本,对获取对象的修改并不能真正的修改缓存中的数据,而应该使用其提供的replace 等方法来进行修改。4 使用缓存(如果在缓存有效期内,则数据就从缓存中查询,如果不在缓存有效期内,意思就是过期了,则就从数据库中查询)5
27、缓存过期时间的设置过期时间有两种格式:1. 相对时间:多长时间,给出过期的时间长度2. 绝对时间:到期时间,给出过期的最后期限相对时间时,返回的值是:服务器当前时间之后的exptime - process_started秒绝对时间时,返回的值是:服务器当前时间之后的(exptime - 服务器当前时间)-process_started秒。可以看到,如果Client 和 Server 时间不一致,使用绝对时间很容易导致缓存过期。所以使用相对时间是比较安全的做法。服务端的处理时间处理源代码【memcached.c】如下:#define REALTIME_MAXDELTA60*60*24*30/定义
28、 30 天的秒数static rel_time_t realtime(const time_texptime) if(exptime = 0) return 0;if(exptime > REALTIME_MAXDELTA)/超过 30 天,是绝对时间if(exptime <=process_started)/小于进程启动日期return(rel_time_t)1;/return(rel_time_t)(exptime - process_started);/返回进程启动之后的时间差else/不超过 30 天,是相对时间return(rel_time_t)(exptime +cur
29、rent_time);/ exptime + (tvsec-process_started)OK ,结束!第 2 种方法:(使用spring配置,方便之后扩展)1 同样加载JAR 包 java_memcached-release_2.5.1.jar2 封装 memcached缓存。建立接口IMemcachedClient实现类 MemcachedClientImpl.java3 在 spring 的核心配置文件applicationContext.xml中配置4 创建需要缓存的对象。5 使用 memcached 的缓存OK ,结束!6 apache+多个tomcat+memcached共享se
30、ssion会话(windows)c)再修改 Tomcat 的 context.xmlhtmlview plaincopyprint?1. <Manager className ="de.javakaffee.web.msm.Memcached BackupSessionManager"2.3. memcachedNodes="n1:localhost:11211"4.5. requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"6.7. sessionBackupAsync =&qu
31、ot;false"8.9. sessionBackupTimeout ="100"10.11.transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"12.13.copyCollectionsForSerialization="false" />需要用到的jar 包:memcached-2.6.jar这个 jar 包测试的时候有问题,需要改成spymemcached-2.8.4.jar
32、包才能正常使用,或者会报下面一下错误( d-2.8.4.jar )javolution-.jarmemcached-session-manager-1.5.1.jarmemcached-session-manager-tc7-1.5.1.jarmsm-javolution-serializer-1.5.1.jarmsm-kryo-serializer-1.5.1.jarmsm-xstream-serializer-1.5.1.jar以上 jar 包在 中都可以找到。d) 安装 memcached服务器,参见3、编写测试代码index.jsphtmlview plaincopyprint?1.<% page contentType="text/html; charset=GBK"%>2.<% page import ="java.util.*"%>3.<html><head><title>Cluster Test</ti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电池测试仪钳型表合作协议书
- Java核心组件部分知识点
- 环境教育工作总结
- 2025年微波器件及电路项目合作计划书
- 舌系带的相关知识及护理
- 2024浙江金华市浦江县城市建设投资集团有限公司招聘合同制员工及考察人员笔试参考题库附带答案详解
- 3 欢欢喜喜庆国庆 第一课时 教学设计-2024-2025学年道德与法治二年级上册统编版
- 销售总监转正工作总结
- 血液科用药安全管理
- 中学主题班会班主任管理经验班主任班级管理经验
- 常州2025年江苏常州工程职业技术学院其他专技岗管理岗招聘笔试历年参考题库附带答案详解
- 2025年大学宿舍物业服务质量承包合同
- (二调)武汉市2025届高中毕业生二月调研考试 生物试卷(含标准答案)
- 2025年安徽职业技术学院单招职业适应性考试题库含答案
- 2024大模型安全研究报告
- 2025年安徽审计职业学院单招职业技能测试题库附答案
- 2025河南中烟许昌卷烟厂招聘10人易考易错模拟试题(共500题)试卷后附参考答案
- 2020年国际命名化妆品原料INCI英汉对照名称
- 2025年高考数学二级结论篇(核心知识背记手册)-专项训练
- 医药行业扭亏专项措施方案
- 2025年重庆市安全员《B证》考试题库及答案
评论
0/150
提交评论