tomcat叢集配置session,並用nginx做反向代理和負載均衡
一、tomcat伺服器配置session共享
tomcat配置session共享,有兩種方式 ①通過修改配置檔案,讓tomcat不停的廣播自己的session給其他的tomcat,建議使用5臺以下的伺服器,5臺及以上,建議使用方式二 ②將使用者資訊存入redis,每臺伺服器都從redis中讀取使用者資訊,並設定過期時間,適用於多臺伺服器 以下給出方式一的配置: 由於window系統和Linux系統配置有點差別,window系統上面的直接拷貝到Linux系統上面會報錯 以下給出兩者的配置: **windows系統配置:** 第一步: 解壓一份tomcat ,放在tomcat-cluster目錄下,命名為tomcat1 修改tomcat中conf資料夾下的server.xml檔案 在<Engine name="Catalina" defaultHost="localhost">程式碼下面加上 <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="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" 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=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster> 這段配置
注意:如果在同一臺電腦上做叢集,需要修改埠號,只要不用同一埠號就行了
第二步:部署web專案
新建test專案,只需要一個index.jsp頁面即可,做測試
在index.jsp中加入如下:
SessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 1"); %>
修改test專案的web.xml檔案,在其中加入 <distributable/>
程式碼
配置完成,將test工程部署(拷貝)到tomcat的webapp目錄下,啟動tomcat,看看會不會報錯,如果不報錯,那麼配置正確
第三步:複製剛才的tomcat1,命名為tomcat2,修改埠號,test工程中的index.jsp頁面,方便區分
啟動tomcat2,啟動成功,說明配置已經完成。
第四步:測試
訪問
從圖中可以看出,兩者的sessionID是一樣的,說明session共享了
Linux系統配置:
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"/>
<!--
<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="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5000"
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;"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
至此,session共享配置完成
二、配置nginx反向代理到上面三臺伺服器
下面配置nginx反向代理到上面三臺伺服器
首先yum安裝nginx,配置安裝源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝nginx:
$: yum install nginx
安裝完成之後,訪問ip: 192.168.0.140
若出現歡迎頁,表示安裝成功
網站檔案存放預設目錄
/usr/share/nginx/html
網站預設站點配置
/etc/nginx/conf.d/default.conf
自定義Nginx站點配置檔案存放目錄
/etc/nginx/conf.d/
Nginx全域性配置
/etc/nginx/nginx.conf
先備份nginx.conf配置檔案
$: cp nginx.conf nginx.conf.bak以便還原
修改配置檔案:
vi /etc/nginx/nginx.conf
在http{}裡面新增如下配置:
upstream tomcatserver {
server 192.168.0.140:8081;
server 192.168.0.140:8082;
server 192.168.0.140:8083;
}
server {
listen 80;
server_name 192.168.0.140;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver;
index index.html index.htm;
}
}
配置完成後,重啟nginx服務.
$: nginx -s reload
訪問測試:
sessionID還是沒變,說明session共享,伺服器名和下標跟著改變,負載均衡成功
三、通過ip設定本地域名
找到C:\Windows\System32\drivers\etc 下面的 hosts檔案
在裡面新增 192.168.0.140 www.new.com
可以配置多個
完成!