Apache 負載均衡 埠轉發 配置
阿新 • • 發佈:2018-11-26
轉載自:https://blog.csdn.net/snihcel/article/details/38844323
[埠轉發配置]
通過http_proxy做tomcat的埠轉發:
描述:將遠端伺服器對映到本地伺服器的URL空間
語法:ProxyPass [路徑] !|url [鍵=值 鍵=值 ...]] [nocanon]
上下文: server config, virtual host, directory
狀態:擴充套件
模組:mod_proxy
配置httpd.conf:
#保證以下模組載入
第一,(如果是安裝的windows,可以不看第一步了,往下看第二步吧)安裝Apache,我選用的版本是2.2.x,我是安裝在CentOS4.4這個Linux作業系統裡的,之前系統自帶的是2.0.52,http_proxy提示"BalancerMember不識別,缺少相關的so檔案",所以我重新下了個2.2.64的版本,而且聽說2.2.x版本修正了一些BUG和大幅提高了一些效能,下面是編譯安裝步驟。
1.解壓編譯包
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節點後對整個負載均衡的影響,大家自己拿捏吧,下面是我的配置:
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