Tomcat的负载均衡(apache的mod_jk来实现)

来源:岁月联盟 编辑:exp 时间:2012-02-22
1.      Tomcat的负载均衡(apache的mod_jk来实现): 
2.     
3.      1、基于Apache的mod_jk来实现: 
4.              apache   
5.              /    / 
6.            tom1    tom2 
7.     
8.      在完成两台tomcat1,tomcat2的安装之后,希望可以实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,即一个节点出现问题,mod_jk会其不参与负载,在节点故障恢复后,mod_jk会让其参与负载,对此节点是否失败,对用户而言是透明的。 
9.     
10.   实现流程: 
11.   a、用户访问数据达到Apache后,如果是静态内容,Apache立即回应; 
12.   b、如果Apache发现用户请求的是动态内容如jsp,就将请求丢给其中的一台tomcat来处理。 
13.   c、每次用户重复访问时,都被分配到同一台机器上(可以做会话粘滞或是会话复制) 
14.  
15.   本文环境在之前的基础上新增加一台机器(做负载均衡器),其实负责负载均衡的主要是由一个配置文件完成!那就是workers.propertise。通过定义worker.list,port,host,type,lbfactor的值来定义每一台tomcat的主机;通过lbfactor来区别每台机器的权重,权重数值越大得到的用户请求数就越多。所以,只要重点关注这个文件的内容就行了。 
16.  
17.   实施: 
18.   a、安装Aapche 
19.   # tar -xzf httpd-2.2.22.tar.gz 
20.   # chown root.root -R httpd-2.2.22 
21.   # cd httpd-2.2.22 
22.   # ./configure --prefix=/usr/local/apache 
23.   # make && make install 
24.  
25.   b、编译mod_jk模块 
26.  
27.   # tar -xzf tomcat-connectors-1.2.32-src.tar.gz  
28.   # cd tomcat-connectors-1.2.32-src 
29.   # cd native/ 
30.   #  ./configure --with-apxs=/usr/local/apache/bin/apxs  
31.   # make && make install 
32.   # ll /usr/local/apache/modules/mod_jk.so  
33.   -rwxr-xr-x 1 root root 1076923 Feb 20 14:17 /usr/local/apache/modules/mod_jk.so 
34.  
35.   c、加载mod_jk 
36.   # vim /usr/local/apache/conf/httpd.conf  
37.   #增加的内容 
38.   LoadModule jk_module modules/mod_jk.so 
39.   JkWorkersFile /usr/local/apache/conf/workers.properties 
40.   JkMountFile   /usr/local/apache/conf/uriworkermap.properties 
41.   JkLogFile /usr/local/apache/logs/mod_jk.log 
42.   JkLogLevel info 
43.   JkLogStampformat "[%a %b %d %H:%M:%S %Y]" 
44.  
45.   #告诉apache,如何处理相关类形的文件(这几行可要可不要,只要urlworkermap.properties里面有定义也是可以的!:) 
46.   JkMount /* controller 
47.   JkMount /*.jsp  controller 
48.   JkMount /*.action controller 
49.  
50.  
51.   # cat /usr/local/apache/conf/workers.properties 
52.   # cat workers.properties  
53.   worker.list=controller
54.   #========tomcat1======== 
55.   worker.tomcat1.port=8009       
56.   worker.tomcat1.host=192.168.10.56   
57.   worker.tomcat1.type=ajp13
58.   worker.tomcat1.lbfactor = 1    
59.   worker.tomcat12.connection_pool_timeout=750     
60.   worker.tomcat12.socket_keepalive=0     
61.   worker.tomcat12.socket_timeout=3000    
62.   worker.tomcat12.connect_timeout=1000     
63.   worker.tomcat12.reply_timeout=3300  
64.  
65.   #========tomcat2======== 
66.   worker.tomcat2.port=8009      
67.   worker.tomcat2.host=192.168.10.57  
68.   worker.tomcat2.type=ajp13
69.   worker.tomcat2.lbfactor = 1  
70.   worker.tomcat12.connection_pool_timeout=750     
71.   worker.tomcat12.socket_keepalive=0     
72.   worker.tomcat12.socket_timeout=3000     
73.   worker.tomcat12.connect_timeout=1000     
74.   worker.tomcat12.reply_timeout=3300   
75.  
76.   #=======balance controller====    
77.   worker.controller.type=lb
78.   worker.retries=3    
79.   worker.controller.balance_workers=tomcat1,tomcat2    
80.   worker.controller.sticky_session=1
81.  
82.   相关参数说明: 
83.   worker.tomcat12.socket_keepalive=0#此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。      
84.   worker.tomcat12.socket_timeout=300000#此属性说明连接在未激活的状况下持续多久,web server将主动切断之。      
85.   worker.tomcat12.connect_timeout=10000# 此属性说明了web server等待PONG回应的时间(以ms为单位)。      
86.   worker.tomcat12.reply_timeout=330000#此属性告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。      
87.   worker.tomcat12.reply_timeout=0#此属性说明了web server在检测到Tomcat失败后如何进行恢复工作(默认就是0,全部恢复)      
88.  
89.   worker.loadbalancer.sticky_session=0#表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。(默认是0,session不复制) 
90.  
91.  
92.   # cat uriworkermap.properties  
93.   /*=controller 
94.   !/*.jpg=controller
95.   !/*.gif=controller
96.   !/*.png=controller
97.   !/*.bmp=controller
98.   !/*.html=controller   
99.   !/*.htm=controller
100.!/*.swf=controller  
101.!/*.css=controller  
102.!/*.js=controller
103.
104.完成以上所有之后,你会发现两台tomcat确实已经负载了,但是一个新的问题又产生,会话的问题。第一次提交和第二次提交不在同一台服务器,这基本上可以视为数据丢失。
105.如果仅仅只是浏览,那么问题可能不是很明显,当然如果你登录了,那么系统又会提示让你登录。于是,就有了tomcat的会话复制! 
106.目前关于tomcat的会话复制,有两种常见的方法:利用tomcat自身的简单集群功能,帮助复制会话。另外一种就是利用memcache这类缓存程序来缓存会话。 
107.
108.今天当然是首选第一种方法,利用tomcat的简单功能进行会话复制。 详见下篇!:)
本文出自 “潜入技术的海洋” 博客