Apache+tomcat實現負載平衡叢集和session共用、tengine+tomcat實現web動靜分離

來源:互聯網
上載者:User

一、tomcat簡介

Tomcat伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,在中小型系統和並發訪問使用者不是很多的場合下被普遍使用,是開發和調試JSP程式的首選。
Tomcat提供了一個Jasper編譯器用以將JSP編譯成對應的Servlet。TomcatServlet引擎通常與Apache或者其他Web伺服器一起工作。除了用於開發過程中的調試以及那些對速度和交易處理只有很小要求的使用者,很少會將Tomcat單獨作為Web伺服器。但隨著版本的更新,正有越來越多的使用者將其單獨作為Web伺服器用以那些對速度和可靠性有較高要求的環境中。由於Tomcat是使用Java開發的,所以它可以運行在任何一個裝有JVM的不同作業系統之上。


二、實驗環境

系統內容:centos6.4-i386

jdk:jdk-7u40-linux-i586.rpm

tomcat:apache-tomcat-7.0.42

nginx:tengine-1.5.1

Apache:httpd-2.4.2

三、搭建實驗環境

1.安裝jdk

#rpm -ivh jdk-7u40-linux-i586.rpm#vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/latestexport PATH=$JAVA_HOME/bin:$PATH# . /etc/profile.d/java.sh# java -version

2.安裝tomcat

# tar xf apache-tomcat-7.0.33.tar.gz -C /usr/local/# cd /usr/local/# ln -s apache-tomcat-7.0.33 tomcat# vim /etc/profile.d/tomcat.shexport CATALINA_HOME=/usr/local/tomcatexport PATH=$CATALINA_HOME/bin:$PATH# . /etc/profile.d/tomcat.sh

添加服務指令碼

[root@stu_yxm18 ~]# vim /etc/rc.d/init.d/tomcat#!/bin/sh# Tomcat init script for Linux.## chkconfig: 2345 96 14JAVA_OPTS='-Xms64m -Xmx128m'JAVA_HOME=/usr/java/latestCATALINA_HOME=/usr/local/tomcatexport JAVA_HOME CATALINA_HOMEexec $CATALINA_HOME/bin/catalina.sh $*

啟動tomcat

[root@stu_yxm18 ~]# service tomcat startUsing CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/java/latestUsing CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

650) this.width=650;" title="未命名2.png" alt="092433752.png" src="http://www.bkjia.com/uploads/allimg/131227/2015036450-0.png" />

註:apache、nginx的安裝在此不做示範,強烈建議編譯安裝!!!

四、配置tomcat運行一個簡單的jsp程式

# cd /usr/local/tomcat/conf/*****備份主設定檔*****# cp server.xml server.xml.bak# vim server.xml******修改主設定檔如下***********添加一個虛擬機器主機*****<Host name="www.yxm.com" appBase="/usr/local/tomcat/yxmtctest"unpaclWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="www.yxm_access_log." suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Context path="" docBase="/usr/local/tomcat/yxmtctest" /></Host>******修改服務連接埠為80*****<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />******更改預設虛擬機器主機:注意前後對應*****<Engine name="Catalina" defaultHost="www.yxm.com">

提供一個jsp程式

# cd /usr/local/tomcat/#mkdir yxmtctest#[root@stu_yxm18 tomcat]# cd yxmtctest/#mkdir -p WEB-INF/{class,lib}#vim index.jsp<%@ page language="java" %><html><head><title>TomcatA</title></head><body><h1><font color="red">TomcatA </font></h1><table align="centre" border="1"><tr><td>Session ID</td><% session.setAttribute("abc","abc"); %><td><%= session.getId() %></td></tr><tr><td>Created on</td><td><%= session.getCreationTime() %></td></tr></table></body></html>#service tomcat stop #註:tomcat不支援restart#service tomcat start

650) this.width=650;" title="未命名8.png" alt="095307965.png" src="http://www.bkjia.com/uploads/allimg/131227/2015035Z2-1.png" />

五、Apache做反向 Proxy,代理後端tomcat

編譯安裝httpd-2.4.2

#tar xf httpd-2.4.2.tar.bz2#ln -sv httpd-2.4.2 httpd#cd httpd#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  --enable-proxy --enable-proxy-http --enable-proxy-ajp#make && make install

修改主設定檔

# vim /etc/httpd/httpd.confInclude /etc/httpd/extra/mod_proxy.conf# vim /etc/httpd/extra/mod_proxy.confProxyVia OnProxyRequests OffProxyPreserveHost Off<Proxy *>Order allow,denyAllow from all</Proxy>ProxyPass  /  ajp://172.16.15.23:8009/ProxyPassReverse  /  ajp://172.16.15.23:8009/

注釋:

<1>ProxyVia{On|Off|Full|Block}:用於控制在http首部是否使用Via;On表示每個請求和響應報文均添加Via。

<2>ProxyRequests{On|Off}:是否開啟apache正向 Proxy的功能。

<3>ProxyPreserveHost{On|Off}:如果啟用此功能,代理會將使用者請求報文中的Host:行發送給後端的伺服器,而不再使用ProxyPass指定的伺服器位址。如果想在反向 Proxy中支援虛擬機器主機,則需要開啟此項。

<4>ProxyPass/ajp://172.16.15.23:8009/#####使用的是ajp協議
<5>ProxyPassReverse/ajp://172.16.15.23:8009/

650) this.width=650;" title="未命名6.png" alt="105508166.png" src="http://www.bkjia.com/uploads/allimg/131227/20150325B-2.png" />

六、Apache+tomcat基於mod_proxy模組構建tomcat負載平衡叢集

# vim /etc/httpd/extra/mod_proxy.confProxyVia OffProxyRequests OffProxyPreserveHost Off<Proxy balancer://yxm>BalancerMember ajp://172.16.15.18:8009 loadfactor=1BalancerMember ajp://172.16.15.23:8009 loadfactor=1ProxySet lbmethod=bytraffic</Proxy>ProxyPass  /  balancer://yxm/    stickysession=JSESSIONIDProxyPassReverse  /  balancer://yxm/

loadfactor=1#權重

ProxySetlbmethod=bytraffic#調度演算法

在另一個tomcat節點上添加服務:主設定檔完全一樣,為驗證負載平衡效果jsp程式不一樣。

650) this.width=650;" title="未命名8.png" alt="110010619.png" src="http://www.bkjia.com/uploads/allimg/131227/20150335M-3.png" />

650) this.width=650;" title="未命名7.png" alt="103643499.png" src="http://www.bkjia.com/uploads/allimg/131227/20150330G-4.png" />

七、tengine+tomcat實現web動靜分離

註:tengine的安裝在此不示範編譯安裝)!!!

修改nginx主設定檔

[root@nginx ~]# vim /etc/nginx/nginx.confuser  nginx nginx;worker_processes  2;worker_rlimit_nofile 51200;#error_log  logs/error.log;#pid        logs/nginx.pid;events {use epoll;worker_connections  51200;}http {include       mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;client_max_body_size 20m;client_header_buffer_size 16k;large_client_header_buffers 4 16k;sendfile        on;tcp_nopush     on;keepalive_timeout  65;gzip  on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_proxied   any;gzip_http_version 1.1;gzip_comp_level 3;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;proxy_temp_path   /tmp/proxy_temp;proxy_cache_path  /tmp/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=3g;proxy_connect_timeout    50;proxy_read_timeout       600;proxy_send_timeout       600;proxy_buffer_size        128k;proxy_buffers           16 256k;proxy_busy_buffers_size 512k;proxy_temp_file_write_size 1024m;proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502 http_504;server {listen       80;server_name  www.yxm.com ;access_log  logs/host.access.log  main;location / {proxy_pass http://172.16.15.14;}location ~* \.(|html|htm|jpg|jpeg|png|gif|bmp|swf|ico)$ {proxy_pass http://172.16.15.18;}location ~* \.(jsp|css|do|php)$ {proxy_pass http://172.16.15.23;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

重啟nginx服務

八、Apache+tomcat實現session共用

配置後端tomcat伺服器IP:172.16.15.18

# vim /usr/local/tomcat/conf/server.xml<Engine name="Catalina" defaultHost="www.yxm.com">  #注意添加的位置<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.15.15.15" #組播地址,兩個節點一定要保持一致port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="172.16.15.18" #IP地址,可以使用autoport="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>

在/usr/local/tomcat/yxmtctest/WEB-INF/建立web.xml檔案

vim/usr/local/tomcat/yxmtctest/WEB-INF/web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><distributable/></web-app>~

將以上配置複製到172.16.15.23tomcat節點上注意修改IP地址

#scp /usr/local/tomcat/conf/server.xml  172.16.15.23:/usr/local/tomcat/conf#scp /usr/local/tomcat/yxmtctest/WEB-INF/web.xml 172.16.15.23:/usr/local/tomcat/yxmtctest/WEB-INF/#server tomcat stop#server tomcat start

650) this.width=650;" title="未命名8.png" alt="145655370.png" src="http://www.bkjia.com/uploads/allimg/131227/2015035104-5.png" />650) this.width=650;" title="未命名9.png" alt="145719741.png" src="http://www.bkjia.com/uploads/allimg/131227/2015032449-6.png" />

看以看到兩個SessionID完全一樣!!!Session共用成功

本文出自 “雲端俯瞰” 部落格,請務必保留此出處http://dreamwolf.blog.51cto.com/6365503/1304987

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.