apache+tomcat負載均衡3種實現方式

1.首先安裝apache,編譯完成後,經過IP:端口就行訪問,若是返回「it workers」證實Apache啓動成功(注意apache的工程路徑要正確)html

2.下載JK,下載地址爲http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/,果http服務器是Apache2.0.X版本,則必須選擇mod_jk-1.2.31-httpd-2.0.52.so,頁面下方有英文的說明,你們能夠看下,我這裏宣傳的mod_jk-1.2.23-apache-2.2.x-linux-x86_64.so,跟本身操做系統版本吻合,而後重命名爲mod_jk.so,而且賦值777權限linux

3.將mod_jk.so拷貝到apache/modulesweb

4.在httpd.conf裏增長以下內容apache

    include "/usr/local/apache/conf/mod_jk.conf"瀏覽器

5.在conf路徑下新建mod_jk.conf文件,並添加以下內容 tomcat

#加載mod_jk Module 服務器

LoadModule jk_module modules/mod_jk.sosession

#指定 workers.properties文件路徑 app

JkWorkersFile conf/workers.properties負載均衡

#指定哪些請求交給tomcat處理,"loadbalancer"爲在workers.propertise裏指定的負載分配控制器名

JkLogFile logs/mod_jk.log

#JkLogLevel debug

JkMount  /*.do loadbalancer

JkMount  /*.jsp loadbalancer

6.在conf下新建workers.properties文件,並添加以下內容

worker.list=loadbalancer 

#此處與mod_jk.conf中保持一致

worker.worker2.port=8009 

#tomcat2中 ajp13 端口號,對應tomcat配置文件server.xml中Connector port="8009",默認8009

worker.worker2.host=127.0.0.1

#worker2的地址,本機loaclhost或者127.0.0.1,遠程直接寫IP

worker.worker2.type=ajp13

#與worker2中的server.xml的protocol保持一致

worker.worker2.lbfactor=1

#負載的權重值,越高表示負載越大

worker.worker3.port=9009

worker.worker3.host=127.0.0.1

worker.worker3.type=ajp13

worker.worker3.lbfactor=1

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=worker2,worker3

#指定負載的worker列表,用逗號分隔

worker.loadbalancer..sticky_session=false

#配置session會話是否爲粘性   

#這樣負載均衡器lb就會盡可能保持一個session,也就是使用戶在一次會話中跟同一個Tomcat進行交互

worker.loadbalancer..sticky_session_force=false

worker.loadbalancer.sticky_session=1

#是否啓用session共享

7.下載tomcat並解壓,複製2份tomcat,保持成爲worker2,worker3

  修改2個tomcat的server.xml,保證2個tomcat的端口號不一致,具體配置以下,須要修改黑體加粗標示

worker2以下:

[html]view plaincopy
 
  1. <?xmlversion='1.0'encoding='utf-8'?>

  2.  

  3. <Serverport="8005"shutdown="SHUTDOWN">

  4.  

  5. <ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/>

  6. <ListenerclassName="org.apache.catalina.core.JasperListener"/>

  7. <ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener"/>

  8. <ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>

  9.  

  10. <GlobalNamingResources>

  11.  

  12. <Resourcename="UserDatabase"auth="Container"

  13. type="org.apache.catalina.UserDatabase"

  14. description="User database that can be updated and saved"

  15. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

  16. pathname="conf/tomcat-users.xml"/>

  17. </GlobalNamingResources>

  18.  

  19. <Servicename="Catalina">

  20.  

  21. <Connectorport="8080"protocol="HTTP/1.1"

  22. connectionTimeout="20000"

  23. redirectPort="8443"/>

  24.  

  25. <Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>

  26.  

  27. <!--<Engine name="Catalina" defaultHost="localhost">-->

  28. <Enginename="Catalina"defaultHost="localhost"jvmRoute="worker2">

  29. <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

  30. resourceName="UserDatabase"/>

  31. <Hostname="localhost"appBase="webapps"

  32. unpackWARs="true"autoDeploy="true"

  33. xmlValidation="false"xmlNamespaceAware="false">

  34. </Host>

  35. </Engine>

  36. </Service>

  37. </Server>

 

worker3以下:

[html]view plaincopy
 
  1. <?xmlversion='1.0'encoding='utf-8'?>

  2.  

  3. <Serverport="8006"shutdown="SHUTDOWN">

  4.  

  5. <ListenerclassName="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on"/>

  6. <ListenerclassName="org.apache.catalina.core.JasperListener"/>

  7. <ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener"/>

  8. <ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>

  9.  

  10. <GlobalNamingResources>

  11.  

  12. <Resourcename="UserDatabase"auth="Container"

  13. type="org.apache.catalina.UserDatabase"

  14. description="User database that can be updated and saved"

  15. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

  16. pathname="conf/tomcat-users.xml"/>

  17. </GlobalNamingResources>

  18.  

  19. <Servicename="Catalina">

  20.  

  21. <Connectorport="8081"protocol="HTTP/1.1"

  22. connectionTimeout="20000"

  23. redirectPort="8443"/>

  24.  

  25. <Connectorport="9009"protocol="AJP/1.3"redirectPort="8443"/>

  26.  

  27. <!--<Engine name="Catalina" defaultHost="localhost">-->

  28. <Enginename="Catalina"defaultHost="localhost"jvmRoute="worker3">

  29. <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"

  30. resourceName="UserDatabase"/>

  31. <Hostname="localhost"appBase="webapps"

  32. unpackWARs="true"autoDeploy="true"

  33. xmlValidation="false"xmlNamespaceAware="false">

  34. </Host>

  35. </Engine>

  36. </Service>

  37. </Server>

     

 

8.分別在2個tomcat下創建項目test1,並新增andashu.jsp,內容以下:

<%

 

System.out.println("===========");

 

%>

 

9.分別訪問2個tomcat,http://IP:8081/test1/andashu.jsp 以及http://10.14.133.204:8080/test1/andashu.jsp,若是2個tomcat的日誌catalina.out裏 都打印出===========,證實2個tomcat訪問都ok

 

10.分別啓動apache worker2,worker3,用不一樣的瀏覽器或者不一樣的機器分別訪問http://IP/test1/andashu.jsp,若是若是2個tomcat的日誌catalina.out裏 都打印出===========,證實負載均衡搭建成功(這裏要用不一樣瀏覽器或者不一樣機器訪問)

 

11.試節點故障,隨便停掉其中的一臺tomcat,繼續訪問http://IP/test1/andashu.jsp,能正常訪問

 

 

 

其餘2種方式也能夠實現負載均衡

二、ajp_proxy
去掉httpd.conf文件中下面內容的註釋(刪掉#號),開啓下邊的配置

Include conf/extra/httpd-vhosts.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so

注意:
除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so
若是是採用ajp_proxy,須要加載mod_proxy_ajp.so這個模塊;
若是是採用http_proxy,須要加載mod_proxy_http.so這個模塊;

httpd.conf,刪除剛纔jk方式的配置內容,增長下邊的配置

ProxyRequests Off <proxy balancer://loadbalancer> BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=worker3 BalancerMember ajp://127.0.0.1:8009loadfactor=1 route=worker2 </proxy>

conf/extra/httpd-vhosts.conf增長配置

<VirtualHost *:8081>          ServerAdmin xxxx@xxx.com          ServerName localhost          ServerAlias localhost          ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On          ProxyPassReverse / balancer://loadbalancer/          ErrorLog "logs/loadbalancer-error.log"          CustomLog "logs/loadbalancer-access.log" common </VirtualHost>

配置完成任務,訪問http://IP:8081/test1/andashu.jsp,檢查是否能正常訪問。

三、http_proxy
http_proxy的配置與ajp_proxy相似,修改方法2的httpd.conf配置以下,其它不變

ProxyRequests Off <proxy balancer://loadbalancer> BalancerMember http://127.0.0.1:9009 loadfactor=1 route=worker3 BalancerMember http://127.0.0.1:8009 loadfactor=1 route=worker2 </proxy>

配置完成任務,訪問http://IP:8081/test/test.jsp,檢查是否能正常訪問

相關文章
相關標籤/搜索