windows apache 負載均衡配置 Tomcat集羣配置

1.安裝

exe可執行文件的安裝方式:http://jingyan.baidu.com/article/ed15cb1b73b3071be269816d.htmlcss

解壓縮包的安裝方式: win+r --> cmd --> 打開dos界面,進入到Apache\bin目錄下執行 httpd.exe -k install -n "apache2.2" 。 執行完成 Apache服務安裝完畢。apache2.2 爲服務的名稱html

1.1 查看服務:win+r -->services.msc

 

1.2 dos中開啓和關閉服務

啓動服務遇到問題:右擊個人電腦-->管理-->事件查看器-->找到Apache Service-->右鍵-->查看事件的全部實例java

因爲Apache的docs  log  等路徑都的 /Apache/*** ,可是個人服務是放在了本身創建的文件夾下,因此服務啓動的時候找不到這些文件。大部分問題是這些。web

1.3 服務安裝成功,瀏覽器訪問 http://localhost/

顯示如上界面,Apache安裝成功。apache

1.負載均衡配置

配置httpd.conf 文件瀏覽器

1.1  去掉註釋塊

#提供HTTP/1.1的代理/網關功能支持
LoadModule proxy_module modules/mod_proxy.sotomcat

#mod_proxy的擴展,提供Apache JServ Protocol支持
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  服務器

#mod_proxy的擴展,提供負載均衡支持
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so session

#mod_proxy的擴展,提供對處理HTTP CONNECT方法的支持
LoadModule proxy_connect_module modules/mod_proxy_connect.so  app

#mod_proxy的FTP支持模塊
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

# mod_proxy的HTTP支持模塊
LoadModule proxy_http_module modules/mod_proxy_http.so  

1.2 將虛擬主機的註釋去掉,將httpd-vhosts.conf 引入。

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

httpd-vhosts.conf文件添加:

<VirtualHost *:80>
    ServerAdmin abc@163.com
    proxyRequests off
    ServerName abc.com
    ServerAlias www.abc.com
    ProxyPass /resource!
    ProxyPass /req balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
    ProxyPassReverse /req balancer://cluster/
    ProxySet lbmethod=bytraffic 
</VirtualHost>
<proxy balancer://cluster>
    BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1
    BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2
    BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3
    BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4 status=+H
</proxy>

解釋:其中ProxyPass /resource! 表示/resource 開頭的請求不會轉發給Tomcat,而是做爲靜態資源在Apache的resource目錄下尋找資源文件。而反向代理將全部的/req 請求都轉發給名叫cluster的balancer。 而這個balancer有四個Tomcat成員 status=+H 表示熱部署。

ProxySet lbmethod=bytraffic 設置負載均衡的策略

lbmethod可能的取值有:  
lbmethod=byrequests 按照請求次數均衡(默認) 
lbmethod=bytraffic 按照流量均衡 
lbmethod=bybusyness 按照繁忙程度均衡(老是分配給活躍請求數最少的服務器) 

stickySession=JSESSIONID表示開啓粘性Session。意思是若是第一次請求分到了tomcat1,那麼這個用戶的後續請求,都會分配給tomcat1這個服務。

而後在Apache配置故障轉移(nofailover=On)

若是tomcat1服務宕機,那麼Apache會將請求提交當其它服務器,因爲後臺Tomcat服務器作了Session共享(也就是服務器Session複製),因此用戶的Session並無丟失。

2.Tomcat服務集羣配置

Apache配置了四臺服務的負載均衡,對應的Tomcat服務器也須要四臺。以Tomcat6.x爲例

2.1 配置Server port 在tomcat-6.x\conf\server.xml文件中找到

<Server port="8005" shutdown="SHUTDOWN">
<!--修改爲: -->
<Server port="8006" shutdown="SHUTDOWN">

並將其他3個Tomcat的Server port分別修改爲8007,8008,8009。

2.2 配置Connector port 在tomcat-6.x\conf\server.xml文件中找到

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<!--修改爲:-->
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<!--並將其他3個Tomcat的port分別修改爲8082,8083,8084-->

 

2.3 配置Apache和Tomcat通信端口,在tomcat-6.x\conf\server.xml文件中找到

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--修改爲:-->
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
<!--並將其他3個Tomcat的port分別修改爲8012,8013,8014 -->

 

2.3 是apache和tomcat連接的關鍵,前臺apache就是經過AJP協議與tomcat進行通訊的,以完成負載均衡,上面的 port="8011" 就是Apache鏈接Tomcat的端口。

回顧一下httpd.conf配置中的

<proxy balancer://cluster>
    BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1
    BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2
    BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3
    BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4
</proxy>

Tomcat中的端口要和「ajp://12.34.56.78:XXXX」後面端口一致。

2.4 配置Engine ,在tomcat-6.x\conf\server.xml文件中找到

<Engine name="Catalina" defaultHost="localhost">,
<!--修改爲:-->
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">
<!--並將其他3個Tomcat的jvmRoute分別修改爲:-->
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat3">
<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat4">

回顧一下httpd.conf配置中的

<proxy balancer://cluster>
    BalancerMember ajp://12.34.56.78:8011 loadfactor=1 route=tomcat1
    BalancerMember ajp://12.34.56.78:8012 loadfactor=1 route=tomcat2
    BalancerMember ajp://12.34.56.78:8013 loadfactor=1 route=tomcat3
    BalancerMember ajp://12.34.56.78:8014 loadfactor=1 route=tomcat4
</proxy>

Tomcat中的jvmRoute="tomcatx"要和「route=tomcatx」中的命名一致。

2.5 配置Cluster ,在tomcat-6.x\conf\server.xml文件中找到

<!--在註釋行的下面添加:-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6">
	<Manager className="org.apache.catalina.ha.session.BackupManager"
			 expireSessionsOnShutdown="false"
			 notifyListenersOnReplication="true"
			 mapSendOptions="6"/>
	<Channel className="org.apache.catalina.tribes.group.GroupChannel">
		<Membership className="org.apache.catalina.tribes.membership.McastService"
			address="228.0.0.4"
			port="45564"
			frequency="500"
			dropTime="3000"/>
		<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
			address="auto"
			port="5001"
			selectorTimeout="100"
			maxThreads="6"/>
		<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
			<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
		</Sender>
		<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
		<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
		<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
	</Channel>
	<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
		filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

其他3個Tomcat都要作相同的配置,注意每一個Tomcat之間的差異是<Receiver>標籤下面的port值不同,這裏是5001,其他3個Tomcat中分別是5002,5003,5004

 

3. Tomcat集羣要解決的問題

3.1 Session共享

1. 全部session中的對象能夠序列化,實現 java.io.Serializable接口。

2. 確保你部署文件中的web.xml有<distributable/>元素(其父元素爲</web-app>),或者設置你的<Context distributable="true" />。

3. 當使用多臺機器時,要保證不一樣機器時間的同步。

4. 確保你的loadbalancer是sticky session 模式。

相關文章
相關標籤/搜索