Apache+Tomcat+JK实现负载均衡和群集的完整过程_第1页
Apache+Tomcat+JK实现负载均衡和群集的完整过程_第2页
Apache+Tomcat+JK实现负载均衡和群集的完整过程_第3页
Apache+Tomcat+JK实现负载均衡和群集的完整过程_第4页
Apache+Tomcat+JK实现负载均衡和群集的完整过程_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程 . 分类: Apache Tomcat server 2012-08-08 12:29 412人阅读 评论(0) 收藏 举报 转载于:最近在开发的项目需要承受很高的并发量。综合各种情况,决定使用Apache+Tomcat+JK的方式实现负载均衡,并且作为一个统一的服务还要实现群集(同步Session)。在网上找了很多资料,都是零零散散的,没有一个完整的过程。通过几天的努力,完成了从编译、部署到配置的整个过程,期间也遇到了一些问题。在接下来的文字中将这些过程记录下来,做个笔记同时也分享给大家。为了重新演示整个过程,我新搭建

2、了一个服务器,各项参数如下:CPU:Intel Xeon 5110内存:DDR2 1G*4主机型号:ProLiant DL140 G3操作系统:Red Hat Enterprise Linux Server release 5.4 x86_64版内核版本:2.6.18gcc版本:4.1.2g+版本:4.1.2java版本:1.6.0_27plain view plaincopyprint?1. rootlxp2#cat/etc/redhat-release 2. RedHatEnterpriseLinuxServerrelease5.4(Tikanga) 3. rootlxp2#uname-a

3、 4. Linuxlxp22.6.18-164.el5xen#1SMPThuSep304:41:04EDT2009x86_64x86_64x86_64GNU/Linux 5. rootlxp2#gcc-version 6. gcc(GCC)4.1.220080704(RedHat4.1.2-46) 7. Copyright(C)2006FreeSoftwareFoundation,Inc. 8. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO 9. warranty;notevenforMERCHANTABILITYo

4、rFITNESSFORAPARTICULARPURPOSE. 10. 11. rootlxp2#g+-version 12. g+(GCC)4.1.220080704(RedHat4.1.2-46) 13. Copyright(C)2006FreeSoftwareFoundation,Inc. 14. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO 15. warranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE. 16. 17. rootlxp2

5、#java-version 18. javaversion1.6.0_27 19. Java(TM)SERuntimeEnvironment(build1.6.0_27-b07) 20. JavaHotSpot(TM)64-BitServerVM(build20.2-b06,mixedmode) 21. rootlxp2#plain view plaincopyprint?1. rootlxp2#cat/etc/redhat-release2. RedHatEnterpriseLinuxServerrelease5.4(Tikanga)3. rootlxp2#uname-a4. Linuxlx

6、p22.6.18-164.el5xen#1SMPThuSep304:41:04EDT2009x86_64x86_64x86_64GNU/Linux5. rootlxp2#gcc-version6. gcc(GCC)4.1.220080704(RedHat4.1.2-46)7. Copyright(C)2006FreeSoftwareFoundation,Inc.8. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO9. warranty;notevenforMERCHANTABILITYorFITNESSFORAPART

7、ICULARPURPOSE.10. 11. rootlxp2#g+-version12. g+(GCC)4.1.220080704(RedHat4.1.2-46)13. Copyright(C)2006FreeSoftwareFoundation,Inc.14. Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNO15. warranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.16. 17. rootlxp2#java-version18. javav

8、ersion1.6.0_2719. Java(TM)SERuntimeEnvironment(build1.6.0_27-b07)20. JavaHotSpot(TM)64-BitServerVM(build20.2-b06,mixedmode)21. rootlxp2#rootlxp2 # cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.4 (Tikanga)rootlxp2 # uname -aLinux lxp2 2.6.18-164.el5xen #1 SMP Thu Sep 3 04:41:04 ED

9、T 2009 x86_64 x86_64 x86_64 GNU/Linuxrootlxp2 # gcc -versiongcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)Copyright (C) 2006 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

10、rootlxp2 # g+ -versiong+ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)Copyright (C) 2006 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.rootlxp2 # java -versionjava version 1.

11、6.0_27Java(TM) SE Runtime Environment (build 1.6.0_27-b07)Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)rootlxp2 # gcc、g+和java是必须的,如果运行上述命令提示command not found,则需要安装。具体安装方法这里不做介绍,请参阅相关文档。接下来要准备的是apache服务器、tomcat服务器和JK连接器1.下载apache服务器源码包apache服务器官方没有发布编译好的linux二进制包,只能通过下载源代码,然后自己编译。因此需

12、要先下载源码。访问网址/download.cgi,可以看到apache服务器目前放出的版本信息,推荐使用稳定版的release。然后选择Unix版源码:2.下载tomcat服务器源码包目前tomcat服务器个人还是觉得6.0比较稳定。7.0毕竟是新出的东西,需要一定的生产实践考验才能达到理想的状态。因此这里选择tomcat 6.0。访问网址/download-60.cgi,可以看到目前稳定的版本为6.0.33:这里强烈建议下载tar.gz格式的压缩包。在Linux下,文件访问有着严格的权限限制。一个文件是

13、否允许以二进制或者脚本的形式执行,完全取决于其是否拥有执行缺陷,这与Windows识别文件后缀名(.exe、.bat)的方式不同。zip格式的压缩包中是不保留文件的权限信息的,而tar.gz格式的压缩包是保存有文件的权限信息的。3.下载JK连接器源码包作为apache与tomcat连接的桥梁,JK连接器使用C语言编写,与apache紧密结合,作为模块装载到apache服务器中,通过配置实现与特定的tomcat服务器进行通信,从而实现负载均衡的功能。访问网址/download-connectors.cgi,可以找到最新最稳定的JK连接器版本:这里还是

14、推荐下载tar.gz格式的源码。原因同上。4.解压apache服务器、tomcat服务器和JK连接器都已经下载好了,如下图所示:然后将这三个包都解压出来:5.编译apache服务器首先编译apache服务器。在编译之前需要执行其自带的检测配置脚本。对于不同发行版本的Linux,默认安装的库都有所差别,即便是同一个发行版本,由于用户安装软件的软件不同,也会导致系统内包含的库有所区别。因此apache作为开源服务器,在编译前需要了解系统的库安装情况,某些模块需要依赖于特定的库,如果这些库不存在,配置脚本将自动忽略这些库的编译。经过检测时候会生成合适的MakeFile文件。这里特别提醒一句,如果直接

15、执行配置脚本,是不会编译额外的模块的,我们希望使用额外模块时,需要在运行配置脚本命令后加入参数,让其尽最大可能编译可用的库。关于这方面的介绍可以参阅我的另外一篇文章“Linux下编译apache服务器modules文件夹缺少模块(.so)的问题”(plain view plaincopyprint?1. rootlxp2Downloads#cdhttpd-2.2.21 2. rootlxp2httpd-2.2.21#./configure-enable-so-enable-mods-shared=most-with-mpm=workerplain view plaincopyprint?1.

16、rootlxp2Downloads#cdhttpd-2.2.212. rootlxp2httpd-2.2.21#./configure-enable-so-enable-mods-shared=most-with-mpm=workerrootlxp2 Downloads# cd httpd-2.2.21rootlxp2 httpd-2.2.21# ./configure -enable-so -enable-mods-shared=most -with-mpm=worker加入-with-mpm=worker是修改apache服务器的工作模式。默认模式是prefork。prefork采用预派生

17、子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。相对于prefork,worker是全新的支持多线程和多进程混合模型的MPM(多路处理模块)。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。如果配置过程中出现plain view plaincopyprint?1. configure:error:CannotuseanexternalAPRwiththebundledAPR-utilplain view plaincopyprint?1. config

18、ure:error:CannotuseanexternalAPRwiththebundledAPR-utilconfigure: error: Cannot use an external APR with the bundled APR-util这样的错误信息,说明本机没有安装apr运行库,需要下载并安装。访问网址:/download.cgi,下载apr和apr-util:解压apr和apr-utilplain view plaincopyprint?1. rootlxp2Downloads#tar-xfapr-1.4.5.tar.gz 2. root

19、lxp2Downloads#tar-xfapr-util-1.3.12.tar.gzplain view plaincopyprint?1. rootlxp2Downloads#tar-xfapr-1.4.5.tar.gz2. rootlxp2Downloads#tar-xfapr-util-1.3.12.tar.gzrootlxp2 Downloads# tar -xf apr-1.4.5.tar.gz rootlxp2 Downloads# tar -xf apr-util-1.3.12.tar.gz 进入apr,并编译plain view plaincopyprint?1. rootlx

20、p2Downloads#cdapr-1.4.5 2. rootlxp2apr-1.4.5#ls 3. apr-config.inbuild.confhelpersmemoryshmem 4. apr.depbuild-outputs.mkincludemiscstrings 5. apr.dspCHANGESlibapr.depmmapsupport 6. apr.dswconfig.layoutlibapr.dspnetwork_iotables 7. apr.makconfigurelibapr.makNOTICEtest 8. apr.pc.inconfigure.inlibapr.rc

21、NWGNUmakefilethreadproc 9. apr.specdocsLICENSEpasswdtime 10. atomicdsolockspolluser 11. buildemacs-modeMakefile.inrandom 12. buildconffile_ioMakefile.winREADME 13. rootlxp2apr-1.4.5#./configureplain view plaincopyprint?1. rootlxp2Downloads#cdapr-1.4.52. rootlxp2apr-1.4.5#ls3. apr-config.inbuild.conf

22、helpersmemoryshmem4. apr.depbuild-outputs.mkincludemiscstrings5. apr.dspCHANGESlibapr.depmmapsupport6. apr.dswconfig.layoutlibapr.dspnetwork_iotables7. apr.makconfigurelibapr.makNOTICEtest8. apr.pc.inconfigure.inlibapr.rcNWGNUmakefilethreadproc9. apr.specdocsLICENSEpasswdtime10. atomicdsolockspollus

23、er11. buildemacs-modeMakefile.inrandom12. buildconffile_ioMakefile.winREADME13. rootlxp2apr-1.4.5#./configurerootlxp2 Downloads# cd apr-1.4.5rootlxp2 apr-1.4.5# lsapr-config.in build.conf helpers memory shmemapr.dep build-outputs.mk include misc stringsapr.dsp CHANGES libapr.dep mmap supportapr.dsw

24、config.layout libapr.dsp network_io tablesapr.mak configure libapr.mak NOTICE testapr.pc.in configure.in libapr.rc NWGNUmakefile threadprocapr.spec docs LICENSE passwd timeatomic dso locks poll userbuild emacs-mode Makefile.in randombuildconf file_io Makefile.win READMErootlxp2 apr-1.4.5# ./configur

25、e生成了MakeFile后直接编译plain view plaincopyprint?1. rootlxp2apr-1.4.5#ls 2. apr-1-configbuildconfdsolockspoll 3. apr-config.inbuild.confemacs-modeMakefilerandom 4. apr.depbuild-outputs.mkfile_ioMakefile.inREADME 5. apr.dspCHANGEShelpersMakefile.winshmem 6. apr.dswconfig.layoutincludememorystrings 7. apr.m

26、akconfig.loglibapr.depmiscsupport 8. apr.pcconfig.nicelibapr.dspmmaptables 9. apr.pc.inconfig.statuslibapr.maknetwork_iotest 10. apr.specconfigurelibapr.rcNOTICEthreadproc 11. atomicconfigure.inlibtoolNWGNUmakefiletime 12. builddocsLICENSEpasswduser 13. rootlxp2apr-1.4.5#makeplain view plaincopyprin

27、t?1. rootlxp2apr-1.4.5#ls2. apr-1-configbuildconfdsolockspoll3. apr-config.inbuild.confemacs-modeMakefilerandom4. apr.depbuild-outputs.mkfile_ioMakefile.inREADME5. apr.dspCHANGEShelpersMakefile.winshmem6. apr.dswconfig.layoutincludememorystrings7. apr.makconfig.loglibapr.depmiscsupport8. apr.pcconfi

28、g.nicelibapr.dspmmaptables9. apr.pc.inconfig.statuslibapr.maknetwork_iotest10. apr.specconfigurelibapr.rcNOTICEthreadproc11. atomicconfigure.inlibtoolNWGNUmakefiletime12. builddocsLICENSEpasswduser13. rootlxp2apr-1.4.5#makerootlxp2 apr-1.4.5# lsapr-1-config buildconf dso locks pollapr-config.in buil

29、d.conf emacs-mode Makefile randomapr.dep build-outputs.mk file_io Makefile.in READMEapr.dsp CHANGES helpers Makefile.win shmemapr.dsw config.layout include memory stringsapr.mak config.log libapr.dep misc supportapr.pc config.nice libapr.dsp mmap tablesapr.pc.in config.status libapr.mak network_io t

30、estapr.spec configure libapr.rc NOTICE threadprocatomic configure.in libtool NWGNUmakefile timebuild docs LICENSE passwd userrootlxp2 apr-1.4.5# make编译好之后使用root权限安装:plain view plaincopyprint?1. rootlxp2apr-1.4.5#sudomakeinstallplain view plaincopyprint?1. rootlxp2apr-1.4.5#sudomakeinstallrootlxp2 ap

31、r-1.4.5# sudo make install然后使用类似的方法配置apr-util:plain view plaincopyprint?1. rootlxp2Downloads#cdapr-util-1.3.12 2. rootlxp2apr-util-1.3.12#./configure-with-apr=/usr/local/aprplain view plaincopyprint?1. rootlxp2Downloads#cdapr-util-1.3.122. rootlxp2apr-util-1.3.12#./configure-with-apr=/usr/local/aprr

32、ootlxp2 Downloads# cd apr-util-1.3.12rootlxp2 apr-util-1.3.12# ./configure -with-apr=/usr/local/apr编译apr-util: plain view plaincopyprint?1. rootlxp2apr-util-1.3.12#makeplain view plaincopyprint?1. rootlxp2apr-util-1.3.12#makerootlxp2 apr-util-1.3.12# make编译好之后使用root权限安装:plain view plaincopyprint?1.

33、rootlxp2apr-util-1.3.12#sudomakeinstallplain view plaincopyprint?1. rootlxp2apr-util-1.3.12#sudomakeinstallrootlxp2 apr-util-1.3.12# sudo make install当然如果你在配置apache服务器编译的时候没有提示缺少“APR”,请忽略上面关于APR编译的几步。回到apache服务器源码所在目录,开始编译:plain view plaincopyprint?1. rootlxp2httpd-2.2.21#makeplain view plaincopypri

34、nt?1. rootlxp2httpd-2.2.21#makerootlxp2 httpd-2.2.21# make编译过程大概不到十分钟,完成之后使用root权限进行安装plain view plaincopyprint?1. rootlxp2httpd-2.2.21#sudomakeinstallplain view plaincopyprint?1. rootlxp2httpd-2.2.21#sudomakeinstallrootlxp2 httpd-2.2.21# sudo make install如果不出意外,至此apache就安装成功了。来测试一下:进入apache服务器的bin目

35、录,并启动服务器:plain view plaincopyprint?1. rootlxp2httpd-2.2.21#cd/usr/local/apache2/bin/ 2. rootlxp2bin#sudo./apachectlstart 3. httpd:Couldnotreliablydeterminetheserversfullyqualifieddomainname,usingforServerNameplain view plaincopyprint?1. rootlxp2httpd-2.2.21#cd/usr/local/apache2/bin/2. rootl

36、xp2bin#sudo./apachectlstart3. httpd:Couldnotreliablydeterminetheserversfullyqualifieddomainname,usingforServerNamerootlxp2 httpd-2.2.21# cd /usr/local/apache2/bin/rootlxp2 bin# sudo ./apachectl starthttpd: Could not reliably determine the servers fully qualified domain name, using

37、 for ServerName在本地打开浏览器,访问如果出现“It Works!”则表示启动成功了这里要注意一点就是Linux的防火墙问题。如果你的Linux服务器启动了防火墙,本地访问上面的网址是没有问题的,但如果其它计算机访问你的服务器有可能会连接失败。出现这种情况的原因是防火墙将入站80端口封锁了。解决方法是将80端口加入到允许列表中:进入防火墙设置后,如果发现Firewall状态为Enabled,表示防火墙已启用,需要将WWW(HTTP)服务标记为信任,如果需要使用hhtps协议,还要将Secure WWW(HTTPS)服务也标记为信任。如下图所示:另外,

38、此时如果有其他程序占用80端口也是会影响到apache服务器的,需要确保这个端口没有被占用。还有我还要补充一点,在Mac OS中按照上述方法安装apache服务器是不行的。开始的时候我不想搭建Linux服务器,想到Mac OS也是类Unix的系统,操作命令什么的都一样,就先在Mac上实验了。结果安装上apache服务器后启动了,每次访问都提示505错误,service temporarily unavailable。经过查阅很多资料和尝试才发现,原来Mac系统中已经自带了apache服务器。具体应用是在“系统设置”中的“共享”功能。这个功能里有“Web共享”方式。其实现时使用的服务器就是apa

39、che。它采用的配置文件在/etc/httpd/目录中。这里的配置文件和自己安装的apache服务器配置文件冲突了,因此造成505错误。这一点需要注意。(注:我是用的Mac系统为Mac OS X Lion 10.7.2)2011年11月23日补充:如果你希望把apache服务器注册为系统服务,让它随着系统启动而启动,则需要在/etc/init.d/目录中建立服务管理脚本,我们将其命名为httpd:python view plaincopyprint?1. #!/bin/bash 2. #chkconfig:3456161 3. #description:Thisisapachehttpserv

40、ice 4. #processname:httpd 5. pidfile=/usr/local/apache2/logs/httpd.pid 6. httpd_process_name=httpd 7. httpd_path=/usr/local/apache2/bin/apachectl 8. 9. RETVAL=0 10. start() 11. echoStartingApacheHttpdService. 12. httpd_pid_list=pidof$httpd_process_name 13. iftest-n$httpd_pid_list 14. then 15. echoFa

41、ilToLaunchHttpd,SinceItHasAlreadyStarted 16. RETVAL=1 17. else 18. echoLaunchingApacheHttpdServer 19. $httpd_pathstart 20. RETVAL=$? 21. echoLaunchHttpdSuccessfully 22. fi; 23. 24. 25. stop() 26. echoStoppingApacheHttpdService. 27. httpd_pid_list=pidof$httpd_process_name 28. iftest-n$httpd_pid_list

42、29. then 30. echoFindHttpdProcess,StartToEndThem 31. $httpd_pathstop 32. iftest$?=0 33. then 34. echoSuccesstoTerminateHttpdService 35. RETVAL=0 36. else 37. echoCanNotTerminateHttpdService 38. RETVAL=1 39. fi; 40. else 41. echoCanNotFindAnyHttpdProcess,FailToStopService 42. RETVAL=0 43. fi; 44. 45.

43、 46. restart() 47. stop 48. iftest$?=0 49. then 50. #sleep3secondstowaitforprocessexit 51. sleep3 52. start 53. RETVAL=$? 54. else 55. RETVAL=$? 56. fi; 57. 58. 59. status() 60. iftest-f$pidfile 61. then 62. pid_list=cat$pidfile 63. echo$httpd_process_name(pid:$pid_list)isrunning 64. else 65. echo$httpd_process_nameisstopped 66. fi; 67. 68. 69. case$1in 70. start) 71. start 72. RETVAL=$? 73. ; 74. stop) 75. stop 76. RETVAL=$? 77. ; 78. restart) 79. restart 80. RETVAL=$? 81. ; 82. status) 83. status 84. ; 85. *) 86. echo1quot;Usage:$0start|stop|restartasdfasdfasdfasdf 87. RETVAL=2 88.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论