Apache配置反向代理、負載均衡和叢集(mod_proxy方式)
Apache配置負載均衡和叢集使用mod_jk的方式比較多。
但是mod_jk已經停止更新,並且配置相對複雜。
Apache2.2以後,提供了一種原生的方式配置負載均衡和叢集,比mod_jk簡單很多。
1.Apache配置反向代理
正向代理一般是指PC連線到代理伺服器,由代理伺服器轉發請求到網站。而反向代理指的是使用者將請求傳送給反向代理伺服器,由反向代理伺服器將請求路由轉發到具體的伺服器。
比如機房有兩個Tomcat提供服務,但是由於防火牆的原因,使用者不能直接訪問。這個時候,可以使用反向代理伺服器,將請求轉發到Tomcat。而防火牆只需要開啟反向代理伺服器的埠即可。
下面實驗假設內網Tomcat提供谷歌服務,外網透過反向代理,訪問這個服務。
修改/etc/httpd/conf/httpd.conf 增加下面的配置
訪問連結:http://192.168.1.105/google
2.負載均衡
負載均衡應該是最常用的橫向擴充套件技術。Apache負載均衡將前端的請求,按照配置的比例轉發給後臺的Tomcat伺服器,從而提高了併發訪問量。作為mod_proxy方式,配置負載均衡十分簡單,就是在反向代理的基礎上,將請求傳送到balancer。
首先,修改War包程式的web.xml檔案,增加 標識。
其次,修改每個Tomcat伺服器的server.xml,配置jvmRoute
最後,修改apache的httpd.conf檔案,增加如下內容
其中ProxyPass /images ! 表示/images開頭的請求不會轉發給Tomcat,而是作為靜態資源在Apache的images目錄下尋找資原始檔。
而反向代理將所有的/Test請求都轉發給名叫mycluster的balancer。
而這個balancer有兩個Tomcat成員。
loadfactor表示請求的權值,該值預設為1,可以將該值設定為1到100之間的任何值。
lbmethod表示負載均衡的演算法,lbmethod可能的取值有:
lbmethod=byrequests 按照請求次數均衡(預設)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請求數最少的伺服器)
stickySession=JSESSIONID表示開啟粘性Session。他的意思是如果第一次請求分到了worker1的Tomcat,那麼這個使用者的後續請求,都會分配給worker1的這個Tomcat。
使用一個測試頁面檢視粘性Session
index.jsp
可以看到,由於粘性Session的作用,對網頁的反覆操作,都被Apache傳送到了同一個Tomcat(worker2)
檢視firefox的cookie資訊,apache就是根據JSESSIONID後面的routeid實現粘性Session的。
3.叢集
我覺得叢集和負載均衡的區別就是叢集包括Session複製和故障轉移。
Session複製是廣義的,實際上就是故障轉移的時候,還可以繼續讀取這個使用者的Session。
Session複製只是其中的一種方式,也可以採用Session伺服器的方式。
例如:
http://blog.itpub.net/29254281/viewspace-1063018/
在負載均衡的基礎上配置叢集
首先,開啟Tomcat的Session複製功能
然後在Apache配置故障轉移(nofailover=Off)
配置了叢集之後,請求從前端過來,假如分配到了worker1,那麼因為粘性Session,他會一直訪問worker1.
如果worker1當機,這個使用者的後續請求會自動轉移到worker2.
由於Tomcat配置了Session複製,所以Session資訊沒有丟失。
整個過程對於使用者是完全透明的。
參考:
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
http://snowolf.iteye.com/blog/743611
官方文件:
但是mod_jk已經停止更新,並且配置相對複雜。
Apache2.2以後,提供了一種原生的方式配置負載均衡和叢集,比mod_jk簡單很多。
1.Apache配置反向代理
正向代理一般是指PC連線到代理伺服器,由代理伺服器轉發請求到網站。而反向代理指的是使用者將請求傳送給反向代理伺服器,由反向代理伺服器將請求路由轉發到具體的伺服器。
比如機房有兩個Tomcat提供服務,但是由於防火牆的原因,使用者不能直接訪問。這個時候,可以使用反向代理伺服器,將請求轉發到Tomcat。而防火牆只需要開啟反向代理伺服器的埠即可。
下面實驗假設內網Tomcat提供谷歌服務,外網透過反向代理,訪問這個服務。
修改/etc/httpd/conf/httpd.conf 增加下面的配置
訪問連結:http://192.168.1.105/google
2.負載均衡
負載均衡應該是最常用的橫向擴充套件技術。Apache負載均衡將前端的請求,按照配置的比例轉發給後臺的Tomcat伺服器,從而提高了併發訪問量。作為mod_proxy方式,配置負載均衡十分簡單,就是在反向代理的基礎上,將請求傳送到balancer。
首先,修改War包程式的web.xml檔案,增加
其次,修改每個Tomcat伺服器的server.xml,配置jvmRoute
最後,修改apache的httpd.conf檔案,增加如下內容
其中ProxyPass /images ! 表示/images開頭的請求不會轉發給Tomcat,而是作為靜態資源在Apache的images目錄下尋找資原始檔。
而反向代理將所有的/Test請求都轉發給名叫mycluster的balancer。
而這個balancer有兩個Tomcat成員。
loadfactor表示請求的權值,該值預設為1,可以將該值設定為1到100之間的任何值。
lbmethod表示負載均衡的演算法,lbmethod可能的取值有:
lbmethod=byrequests 按照請求次數均衡(預設)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(總是分配給活躍請求數最少的伺服器)
stickySession=JSESSIONID表示開啟粘性Session。他的意思是如果第一次請求分到了worker1的Tomcat,那麼這個使用者的後續請求,都會分配給worker1的這個Tomcat。
使用一個測試頁面檢視粘性Session
index.jsp
-
<%@ page language="java" contentType="text/html; charset=UTF-8"
-
pageEncoding="UTF-8"%>
-
<%@ page import="java.util.*" %>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-
<title>Insert title here</title>
-
</head>
-
<body>
-
<%
-
System.out.println(session.getId());
-
out.println("
SESSION ID:" + session.getId()+"
");
-
// 如果有新的請求,則新增session屬性
-
String name = request.getParameter("name");
-
if (name != null && name.length() > 0) {
-
String value = request.getParameter("value");
-
session.setAttribute(name, value);
-
}
-
out.print("Session List:");
-
Enumeration<String> names = session.getAttributeNames();
-
while (names.hasMoreElements()) {
-
String sname = names.nextElement();
-
String value = session.getAttribute(sname).toString();
-
out.println( sname + " = " + value+"
");
-
System.out.println( sname + " = " + value);
-
}
-
%>
-
<form action="index.jsp" method="post">
-
名稱:<input type=text size=20 name="name">
-
<br>
-
值:<input type=text size=20 name="value">
-
<br>
-
<input type=submit value="提交">
-
</form> </body>
- </html>
檢視firefox的cookie資訊,apache就是根據JSESSIONID後面的routeid實現粘性Session的。
3.叢集
我覺得叢集和負載均衡的區別就是叢集包括Session複製和故障轉移。
Session複製是廣義的,實際上就是故障轉移的時候,還可以繼續讀取這個使用者的Session。
Session複製只是其中的一種方式,也可以採用Session伺服器的方式。
例如:
http://blog.itpub.net/29254281/viewspace-1063018/
在負載均衡的基礎上配置叢集
首先,開啟Tomcat的Session複製功能
-
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
-
<Manager className="org.apache.catalina.ha.session.DeltaManager"
-
expireSessionsOnShutdown="false"
-
notifyListenersOnReplication="true"/>
-
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
-
<Membership className="org.apache.catalina.tribes.membership.McastService"
-
address="224.0.0.0"
-
port="45564"
-
frequency="500"
-
dropTime="3000"/>
-
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-
address="192.168.1.100"
-
port="4000"
-
autoBind="100"
-
selectorTimeout="5000"
-
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"/>
-
</Channel>
-
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
-
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
-
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
-
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Cluster>
配置了叢集之後,請求從前端過來,假如分配到了worker1,那麼因為粘性Session,他會一直訪問worker1.
如果worker1當機,這個使用者的後續請求會自動轉移到worker2.
由於Tomcat配置了Session複製,所以Session資訊沒有丟失。
整個過程對於使用者是完全透明的。
參考:
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
http://snowolf.iteye.com/blog/743611
官方文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1070221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- centos7下配置nginx反向代理負載均衡叢集CentOSNginx負載
- apache tomcat叢集配置和負載均衡ApacheTomcat負載
- docker下nginx反向代理和負載均衡配置DockerNginx負載
- Apache使用mod_jk/mod_proxy模組實現代理、負載均衡的配置Apache負載
- Apache +Tomcat的負載均衡與叢集配置ApacheTomcat負載
- Nginx 全模組安裝及匹配方式、反向代理和負載均衡配置Nginx負載
- 代理與反向代理、負載均衡和快取負載快取
- nginx+tomcat反向代理負載均衡配置NginxTomcat負載
- nginx配置web服務|反向代理|負載均衡NginxWeb負載
- 【Nginx】Nginx反向代理和負載均衡部署Nginx負載
- dubbo叢集和負載均衡負載
- Nginx入門(2)反向代理和負載均衡Nginx負載
- 負載均衡叢集負載
- apache 負載均衡配置Apache負載
- 【Linux】叢集和負載均衡Linux負載
- 秒懂負載均衡與反向代理負載
- nginx詳解反向代理負載均衡Nginx負載
- nginx反向代理和負載均衡策略實戰案例Nginx負載
- Nginx反向代理+負載均衡簡單實現(https方式)Nginx負載HTTP
- 【高可用HA】Apache (3) —— Mac下配置Apache Httpd負載均衡(Load Balancer)之mod_proxyApacheMachttpd負載
- 伺服器叢集和負載均衡伺服器負載
- Nginx負載均衡反向代理伺服器Nginx負載伺服器
- [原創]Nginx反向代理及負載均衡Nginx負載
- Nginx反向代理負載均衡的容器化部署Nginx負載
- 介紹下Nginx 反向代理與負載均衡Nginx負載
- 配置apache和nginx的tomcat負載均衡ApacheNginxTomcat負載
- apache配置反向代理Apache
- 代理和負載均衡概述負載
- Tomcat叢集與負載均衡Tomcat負載
- nginx面試題-nginx負載均衡與正反向代理Nginx面試題負載
- nginx+tomcat實現反向代理+負載均衡NginxTomcat負載
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- 【SpringCloud】(十五):Zuul的基本應用,反向代理和負載均衡SpringGCCloudZuul負載
- Linux平臺上搭建apache+tomcat負載均衡叢集LinuxApacheTomcat負載
- Apache反向代理的配置Apache
- orleans叢集及負載均衡實現負載
- haproxy(單機)+mysql叢集負載均衡MySql負載
- 負載均衡的mariadb叢集搭建負載