Apache 負載均衡 端口轉發 配置


轉載自:https://blog.csdn.net/snihcel/article/details/38844323
[端口轉發配置]
      通過http_proxy做tomcat的端口轉發:
      描述:將遠程服務器映射到本地服務器的URL空間
      語法:ProxyPass [路徑] !|url [鍵=值 鍵=值 ...]] [nocanon] 
      上下文: server config, virtual host, directory
      狀態:擴展
      模塊:mod_proxy
      配置httpd.conf:
      #保證以下模塊加載
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so

 

      #配置ProxyPass
      ProxyPass /new/ http://mysite.com/
      ProxyPass /new2/ http://192.168.0.169:8080/

 

[負載均衡配置]

      通過http_proxy做負載均衡有個好處,不用MOD_JK,不用寫太多的配置文件了,而且據說JK做負載均衡當其中一個Tomcat節點死掉,Apache就不會向該節點發送請求了,而http_proxy會一直發,但該死亡的Tomcat重啟后就沒事了,這個不清楚,我用的Apache版本是2.2.x,采用http_proxy時,反正session正常復制,感覺不到關閉一個Tomcat節點后對整個負載均衡的影響,大家自己拿捏吧,下面是我的配置:

      第一,(如果是安裝的windows,可以不看第一步了,往下看第二步吧)安裝Apache,我選用的版本是2.2.x,我是安裝在CentOS4.4這個Linux操作系統里的,之前系統自帶的是2.0.52,http_proxy提示"BalancerMember不識別,缺少相關的so文件",所以我重新下了個2.2.64的版本,而且聽說2.2.x版本修正了一些BUG和大幅提高了一些性能,下面是編譯安裝步驟。
               1.解壓編譯包
tar -xzvf **.tar.gz

 

               2.進入解壓后的目錄,運行configure命令
./configure --enable-modules=most --enable-mods-shared=most --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-scgi --enable-proxy-ajp --enable-proxy-balancer

 

               3.執行編譯命令
make

 

               4.執行安裝命令
make install

 

               安裝完畢!
 
      第二,配置Apache,使其通過http_proxy實現負載均衡
               1.編寫一個負載均衡的配置文件,文件名隨意吧,我寫的是"balance.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
 
                  <VirtualHost *:80>
                      #DocumentRoot "F:\liuqiWorks\myproject\eclipsework\ciesi"
                      ServerName localhost2
                      ProxyPreserveHost On
                      ProxyRequests Off
                      ErrorLog logs/localhost2.cn-error_log
                      CustomLog logs/localhost2.cn-access_log common
 
                      ProxyPass / balancer://tomcat/
                      ProxyPassReverse / http://localhost2:8080/
                      ProxyPassReverse / http://localhost2:8081/
 
                  </VirtualHost>
 
 
                  <Proxy balancer://tomcat>   
                   BalancerMember http://localhost2:8080 loadfactor=2
                   BalancerMember http://localhost2:8081 loadfactor=1
                  </Proxy>
 

 

                2.編輯httpd.conf文件,包含剛才的配置文件balance.conf,在httpd.conf底部添加如下
                    include "xxx/xxx/balance.conf"  # xxx/xxx/是balance.conf所在的路徑
 
                    注意,如果是編譯安裝apache,httpd.conf里好像是沒有加載各種so庫文件的,可能會啟動不了apache,如果是這樣的話請添加或從注釋里激活以下模塊,
                    LoadModule actions_module modules/mod_actions.so
                    LoadModule alias_module modules/mod_alias.so
                    LoadModule asis_module modules/mod_asis.so
                    LoadModule auth_basic_module modules/mod_auth_basic.so
                    LoadModule authn_default_module modules/mod_authn_default.so
                    LoadModule authn_file_module modules/mod_authn_file.so
                    LoadModule authz_default_module modules/mod_authz_default.so
                    LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
                    LoadModule authz_host_module modules/mod_authz_host.so
                    LoadModule authz_user_module modules/mod_authz_user.so
                    LoadModule autoindex_module modules/mod_autoindex.so
                    LoadModule cgi_module modules/mod_cgi.so
                    LoadModule dir_module modules/mod_dir.so
                    LoadModule env_module modules/mod_env.so
                    LoadModule include_module modules/mod_include.so
                    LoadModule log_config_module modules/mod_log_config.so
                    LoadModule mime_module modules/mod_mime.so
                    LoadModule negotiation_module modules/mod_negotiation.so
                    LoadModule setenvif_module modules/mod_setenvif.so

 

 
                    Apache配置完畢。
 
               3.Tomcat集群配置,我用的是版本號是7.0.x,有2個tomcat節點,主要是修改每個tomcat節點下的conf/server.xml這個文件,其實就是修改其中一個tomcat節點的幾個端口,這樣2個tomcat就可以同時運行起來了,配置如下,
 
                   我把8005改成了8006:
                
   <Server port="8006" shutdown="SHUTDOWN">

 

                   
                    我把8080改成了8081:
                  
  <Connector port="8081" protocol="HTTP/1.1"   connectionTimeout="20000"  redirectPort="8443" />

 

 
                    我把8009改成了8019
                   
 <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />

 

 
                    激活tomcat集群,並注釋掉原來的默認屬性
                    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
                    <!-- <Engine name="Catalina" defaultHost="localhost"> -->
                    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

 

 
                    Tomcat配置完畢,然后修改web工程的WEB-INF/web.xml文件,添加一個標簽 <distributable/>
                     注意:整個工程中,所有的session里的屬性值,必須實現了java.io.Serializable接口,一般的變量類型,例如String,Map,Int等肯定已經實現的,沒啥問題,但如果自定義的一個類,要想使用session.setAttribute("xxx",Your.class)的話,這時你寫的類就必須要實現java.io.Serializable這個接口了,不然會報錯!
 
      至此Apache和Tomcat的配置都完成了,啟動Apache和參與集群的多個Tomcat即可,這時你后台登錄后,關掉其中有一個Tomcat的話,網站依然運行,因為session已經復制到了另外一個Tomcat之中。
                         

      注意:如果Linux下組播未開啟,Tomcat是無法進行session復制的,請執行 route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM