apache+tomcat的架構

apache+tomcat的架構html

===================================java

keepalived實現apache的高可用mysql

在tomcat上搭建JspRun論壇linux

apache三種方式實現tomcat的反向代理redis

apache三種方式實現tomcat的負載均衡算法

===================================sql

環境:數據庫

OS:Centos 6.x(redhat 6.x)express

yum源:apache

[centos]
name=sohu-centos
baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch
gpgcheck=1
enable=0
gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6
[epel]
name=sohu-epel
baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/
enable=1
gpgcheck=0


拓撲圖:

205910806.png


拓撲圖的規劃:


IP 地址

所需安裝軟件

apache1

Eth0:172.16.22.1

VIP1172.16.22.100

Keepalived+apache+tomcat-connectors

apache2

Eth0:172.16.22.2

VIP1172.16.22.100

Keepalived+apache+tomcat-connectors

tomcat1

Eth0:172.16.22.3

Jdk+tomcat+mysql-connector-java

tomcat2

Eth0:172.16.22.4

Jdk+tomcat+mysql-connector-java

mysql1

Eth0:172.16.22.5

VIP2172.16.22.200

Corosync+pacemaker+Mysql+drbd

mysql2

Eth0:172.16.22.6

VIP2172.16.22.200

Corosync+pacemaker+Mysql+drbd

部分軟件下載


需解決的問題:

防止apache單點故障?

keepalived+apache實現apache的高可用

防止mysql單點故障?

corosync+pacemaker+mysql+drbd實現mysql的高可用

apache作tomcat反向代理的三種方式?

用三種模塊mod_proxy、mod_proxy_ajp、mod_jk,須要用哪一種就開啓哪一種的模塊便可

apache作tomcat負載均衡的三種方式?

用三種模塊mod_proxy、mod_proxy_ajp、mod_jk,須要用哪一種就開啓哪一種的模塊且還要開啓負載均衡的模塊,以及負載均衡算法的模塊

apache怎麼鏈接tomcat?

mod_proxy模塊

mod_proxy_ajp模塊

前面兩種模塊直接在配置文件裏面加載便可,就能夠鏈接tomcat

mod_jk模塊 用這個模塊還要安裝apache鏈接tomcat的鏈接器,tomcat-connectors這個軟件包

tomcat怎麼鏈接mysql?

每一個鏈接mysql的軟件包都要安裝相應的鏈接mysql的驅動,tomcat鏈接mysql的驅動的軟件包是mysql-connector-java

怎麼實現session的會話保持?

實現session會話保持的方法有不少,tomcat自身也能夠保持session,這種保持會話就是運維人員的工做了,運維人員直接在tomcat的配置文件中實現,用memcached或者redis保持session,memcached保持session有必定的缺陷,即memcached服務掛了,會話仍是丟失了,可是memcached直接把session保存在內存中,因此速度可想而知,redis能夠永久的保存session,這種保存session須要開發人員在開發中程序中本身定義,還有能夠把session保存在數據庫中,這種也是須要用程序定義,session如何保存,不一樣公司有不一樣的方法,保存在哪裏仍是須要運維人員和開發人員共同探討合做。



1、每一個服務器相關軟件的安裝

apache1上相關軟件的安裝:

#================yum安裝keepalived======================================
[root@jie1 ~]# yum -y install keepalived
#================源碼編譯安裝httpd-2.4.6================================
[root@jie1 ~]# tar xf apr-1.4.6.tar.bz2
[root@jie1 ~]# tar xf apr-util-1.5.2.tar.bz2
[root@jie1 ~]# tar xf httpd-2.4.6.tar.bz2
#===========安裝開發庫,和依賴性包======================================
[root@jie1 ~]# yum -y groupinstall "Development tools" "Server Platform Development"
[root@jie1 ~]# yum -y install pcre-devel
#=============編譯安裝apr軟件===========================================
[root@jie1 ~]# cd apr-1.4.6
[root@jie1 apr-1.4.6]# ./configure --prefix=/usr/local/apr && make && make install
#================編譯安裝apr-util軟件包=================================
[root@jie1 ~]# cd apr-util-1.5.2
[root@jie1 apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
#=================編譯安裝httpd的軟件包================================
[root@jie1 ~]# cd httpd-2.4.6
[root@jie1 httpd-2.4.6]# ./configure --prefix=/usr/local/apache  --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-modules=most --enable-mpms-shared=all --with-mpm=event  && make && make install
#============複製源碼包裏面提供的httpd的SystemV腳本=====================
[root@jie1 ~]# cp httpd-2.4.6/build/rpm/httpd.init  /etc/rc.d/init.d/httpd 
[root@jie1 ~]# vim /etc/rc.d/init.d/httpd
#==============vim /etc/rc.d/init.d/httpd =============================
prog=httpd
httpd=${HTTPD-/usr/local/apache/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache/logs/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0
# check for 1.3 configuration
check13 () {
        CONFFILE=/usr/local/apache/conf/httpd.conf
#======================================================================
[root@jie1 ~]# service httpd start
Starting httpd:                                            [  OK  ]
[root@jie1 ~]# chkconfig --add httpd
[root@jie1 ~]# chkconfig httpd on
#==============編譯安裝使用mod_jk模塊鏈接tomcat的鏈接器=================
[root@jie1 ~]# tar xf tomcat-connectors-1.2.37-src.tar.gz
[root@jie1 ~]# cd tomcat-connectors-1.2.37-src/native/ 
[root@jie1 native]# ./configure --with-apxs=/usr/local/apache/bin/apxs && make && make install


apache2:與apache1要安裝相關的軟件、安裝方法都是同樣的,這裏再也不贅述


tomcat1上相關軟件的安裝:

[root@jie3 ~]# ls
anaconda-ks.cfg              jdk-7u9-linux-x64.rpm
apache-tomcat-7.0.42.tar.gz  JspRun!_6.0.0_GBK.zip
install.log                  mysql-connector-java-5.1.16.tar.gz
install.log.syslog      
#===================安裝jdk,修改環境變量=========================
[root@jie3 ~]# rpm -ivh jdk-7u9-linux-x64.rpm
[root@jie3 ~]# vim/etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
[root@jie3 ~]# source /etc/profile.d/java.sh
#===================安裝tomcat,修改環境變量=====================
[root@jie3 ~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
[root@jie3 ~]# cd /usr/local/
[root@jie3 local]#ln -sv apache-tomcat-7.0.42   tomcat
[root@jie3 local]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@jie3 local]# source /etc/profile.d/tomcat.sh
#==================安裝鏈接mysql的驅動===========================
[root@jie3 local]# cd /root/
[root@jie3 ~]# tar xf mysql-connector-java-5.1.16.tar.gz
[root@jie3 ~]# cd mysql-connector-java-5.1.16
[root@jie3 mysql-connector-java-5.1.16]# cp mysql-connector-java-5.1.16-bin.jar /usr/local/tomcat/lib/


tomcat2:與tomcat1安裝相關的軟件、安裝方法都是同樣的,這裏也再也不贅述



mysql1與mysql2就是用corosync+pacemaker+mysql+drbd實現mysql的高可用,這裏不作詳細的安裝 請點擊這裏(詳解mysql的高可用)


2、keepalived實現apache的高可用

apache1的配置:

#=====================修改keepalived的配置實現httpd的高可用===========
[root@jie1 ~]# cd /etc/keepalived/
[root@jie1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_httpd {
     script "killall -0 httpd"
     interval 0
     weghit -2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 22
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.22.100
    }
    track_script {
       chk_httpd
}
}
#====================copy配置文件到apache2上面========================
[root@jie1 keepalived]#scp keepalived.conf 172.16.22.2:/etc/keepalived
[root@jie1 keepalived]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@jie1 keepalived]# chkconfig --add keepalived
[root@jie1 keepalived]# chkconfig keepalived on


apache2的相關配置:

#=====================修改來着apache1的keepalived的配置文件===========
[root@jie2 ~]# cd /etc/keepalived/
[root@jie2 keepalived]# vim keepalived.conf
    state BACKUP
    priority 99
[root@jie2 keepalived]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@jie2 keepalived]# chkconfig --add keepalived
[root@jie2 keepalived]# chkconfig keepalived on


測試apache的高可用:

#=============查看vip在apache1節點上=================================
[root@jie1 conf]# ip addr show | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0
    inet 172.16.22.100/32 scope global eth0  #===vip爲172.16.22.100==
#===========殺死httpd的服務進程,發現vip已經漂移=================
[root@jie1 conf]# killall httpd
[root@jie1 conf]# ip addr show | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0
#=============查看vip已經漂移到apache2節點上=======================
[root@jie2 ~]# ip addr show | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0
    inet 172.16.22.100/32 scope global eth0
#=======在apache1上面從新開啓http服務,vip已經從新漂移到apache1上=====
[root@jie1 conf]# service httpd start
Starting httpd:                                            [  OK  ]
[root@jie1 conf]# ip addr show | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0
    inet 172.16.22.100/32 scope global eth0
[root@jie1 conf]#

成功測試,當apache服務的進程死掉後,vip能夠漂移


3、tomcat服務器測試與mysql的鏈接

tomcat1的配置:

[root@jie3 ~]# cd /usr/local/tomcat/conf/
[root@jie3 conf]# vim server.xml
#=================tomcat,server.xml的部分相關配置===================
<Connector port="80" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" />
#監聽的端口改成了80
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Engine name="Catalina" defaultHost="www.test.com" >
#defaultHost把默認的localhost改成了新建的主機名
     <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
     </Realm>
     <Host name="www.test.com"  appBase="/tomcat/test"
           unpackWARs="true" autoDeploy="true">
           <Context path="" docBase="/tomcat/test" />
#新建了一個虛擬主機,站點和網頁文件存放在/tomcat/test目錄下
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="test_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     </Host>
   </Engine>
================================部分配置文件==========================
#=========利用catalina重啓tomcat===========================
[root@jie3 conf]# catalina.sh stop
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@jie3 conf]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
#==============建立網頁根目錄和測試鏈接數據庫的網頁文件===============
#===============博主只是測試了tomcat1上的,各位朋友也能夠測試tomcat2上
[root@jie3 conf]#mkdir -pv /tomcat/test
[root@jie3 conf]# cd /tomcat/test/
[root@jie3 test]# vim test.jsp
<%@ page language="java" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%
String driverName="com.mysql.jdbc.Driver";
String userName="jie";
String userPasswd="jie123";
String dbName="test";
String url="jdbc:mysql://172.16.22.200/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
try
{
        Connection connection=DriverManager.getConnection(url);
        out.println("TomcatA, tomcat connect mysql is ok!");
        connection.close();
}
catch( Exception e )
{
        out.println( "connent mysql error:" + e );
}
%>
======================================================================
#==============在mysql上受權能訪問數據庫的網段==============
[root@jie4 ~]# mysql
mysql> grant all on *.* to 'jie'@'172.16.%.%' identified by 'jie123';
mysql> flush privileges;

測試新建的test.jsp測試文件是否能夠mysql的鏈接

230005209.png

測試tomcat鏈接數據庫is ok!


在tomcat安裝Jsprun論壇

#=================解壓論壇,把論壇的文件存放到網頁存放路徑中=============
[root@jie3 ~]# unzip JspRun\!_6.0.0_GBK.zip
[root@jie3 ~]#mkdir  -pv /tomcat/bbs
[root@jie3 ~]#cp -rp upload/* /tomcat/bbs/
[root@jie3 ~]# cd /usr/local/tomcat/conf/
[root@jie3 conf]# vim server.xml
#=================tomcat,server.xml的部分相關配置===================
<Connector port="80" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" />
#以前已經把監聽的端口改成了80
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Engine name="Catalina" defaultHost="www.bbs.com" >
#defaultHost改成新建的論壇的虛擬主機名
     <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
     </Realm>
     <Host name="www.test.com"  appBase="/tomcat/bbs"
           unpackWARs="true" autoDeploy="true">
           <Context path="" docBase="/tomcat/bbs" />
#再新建了一個虛擬主機,站點和網頁文件存放在/tomcat/bbs目錄下
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="test_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     </Host>
   </Engine>
#===默認的虛擬主機還有www.test.com的虛擬主機的配置文件沒給予顯示
================================部分配置文件==========================
#=========利用catalina重啓tomcat===========================
[root@jie3 conf]# catalina.sh stop
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@jie3 conf]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
=======================================================================
#==================在數據庫上面建立,Jsprun論壇的數據庫=============
[root@jie4 ~]# mysql
mysql> create database jsprun;
Query OK, 1 row affected (0.03 sec)
mysql> grant all on jsprun.* to 'jspuser'@'172.16.%.%' identified by 'jspmypass';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

用瀏覽器安裝Jsprun論壇

231342220.png

232051632.png

232153662.png


232222909.png

232326140.png論壇已經安裝成功


4、apache三種方式實現tomcat的反向代理

1)mod_proxy

apache1&apache2上的配置:兩邊的配置都是同樣

[root@jie1 ~]# vim /usr/local/apache/conf/httpd.conf
#==========開啓相應的模塊,而後添加如下參數============================
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
ProxyPass / http://172.16.22.3:80/
ProxyPa***everse / http://172.16.22.3:80/
======================================================================
[root@jie1 ~]# httpd -t
Syntax OK
[root@jie1 ~]# service httpd reload
Reloading httpd:                                           [  OK  ]
[root@jie1 ~]#scp  /usr/local/apache/conf/httpd.conf 172.16.22.2:/ /usr/local/apache/conf/    #把配置文件copy到apache2上

tomcat1&tomcat2上的配置:兩邊的配置都是同樣

兩邊都須要建立/tomcat/test目錄和index.jsp文件

兩邊的配置文件都必須同樣

[root@jie3 ~]# cd /usr/local/tomcat/conf/
[root@jie3 conf]# vim server.xml
#=================tomcat,server.xml的部分相關配置===================
<Connector port="80" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" />
#監聽的端口改成了80
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Engine name="Catalina" defaultHost="www.test.com" >
#defaultHost把默認的localhost改成了新建的主機名
     <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
              resourceName="UserDatabase"/>
     </Realm>
     <Host name="www.test.com"  appBase="/tomcat/test"
           unpackWARs="true" autoDeploy="true">
           <Context path="" docBase="/tomcat/test" />
#新建了一個虛擬主機,站點和網頁文件存放在/tomcat/test目錄下
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="test_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     </Host>
   </Engine>
================================部分配置文件==========================
#=========利用catalina重啓tomcat===========================
[root@jie3 conf]# catalina.sh stop
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@jie3 conf]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
#==============建立網頁根目錄和測試鏈接數據庫的網頁文件===============
[root@jie3 conf]#mkdir -pv /tomcat/test
[root@jie3 conf]# cd /tomcat/test/
[root@jie3 test]# vim index.jsp
#=============測試頁面==============================================
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
  <head>
    <title>JSP test page.</title>
  </head>
  <body>
    <% out.println("Hello,tomcat1,jie3!"); %>
  </body>
</html>

博主只測試了tomcat1的反向代理

235626111.png


2)mod_proxy_ajp

apache1&apache2的配置:

只需小小修改apache的配置文件中

[root@jie1 ~]# vim /usr/local/apache/conf/httpd.conf
#==========開啓相應的模塊,而後添加如下參數============================
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
ProxyPass / ajp://172.16.22.4:8009/
ProxyPa***everse / ajp://172.16.22.4:8009/
======================================================================
[root@jie1 ~]# httpd -t
Syntax OK
[root@jie1 ~]# service httpd reload
Reloading httpd:                                           [  OK  ]
[root@jie1 ~]#scp  /usr/local/apache/conf/httpd.conf 172.16.22.2:/ /usr/local/apache/conf/    #把配置文件copy到apache2上

tomcat1&tomcat2不須要修改

博主只測試了tomcat2的反向代理

000150238.png

3)mod_jk

以前已經說過,apache要使用mod_jk模塊作tomcat的反向代理則必須安裝鏈接tomcat的鏈接器,鏈接器已經安裝

apache1&apache2的配置:

[root@jie1 ~]# cd /usr/local/apache/conf/
[root@jie1 conf]# vim /usr/local/apache/conf/httpd.conf
#=========註釋掉以前開啓的模塊,而後添加把以前用mod_proxy的模塊添加的內容也註釋掉,只添加一句=====================
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Include /usr/local/apache/conf/extra/httpd-jk.conf
[root@jie1 extra]# cat /usr/local/apache/conf/extra/httpd-jk.conf
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /usr/local/apache/conf/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1
[root@jie1 extra]# cat /usr/local/apache/conf/extra/workers.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=172.16.22.3
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status
[root@jie1 extra]#
[root@jie1 ~]# cd /usr/local/apache/conf/
[root@jie1 conf]# vim /usr/local/apache/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#=========
Include /usr/local/apache/conf/extra/httpd-jk.conf
[root@jie1 extra]# cat /usr/local/apache/conf/extra/httpd-jk.conf
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /usr/local/apache/conf/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1
[root@jie1 extra]# cat /usr/local/apache/conf/extra/workers.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=172.16.22.3
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status
[root@jie1 extra]#

tomcat1&tomcat2不須要修改

測試mod_jk模式爲tomcat1反向代理

094736522.png

自此apache三種方式實現反向代理已經ok了


5、apache三種方式實現tomcat的負載均衡

三種反向代理與三種負載均衡都是以這三種模塊mod_proxy、mod_proxy_ajp、mod_jk,只不過每種方式都須要用到負載均衡的模塊

1)mod_proxy

apache1&apache2上的配置:兩邊的配置都是同樣


[root@jie1 ~]# cd /usr/local/apache/conf/
[root@jie1 conf]# vim /usr/local/apache/conf/httpd.conf
#=======================開啓這些模塊,和添加如下內容===================
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
ProxyRequests Off
<proxy balancer://jie>
BalancerMember ajp://172.16.22.3:8009/  loadfactor=1 route=TomcatA
BalancerMember ajp://172.16.22.4:8009/  loadfactor=1 route=TomcatA
ProxySet  lbmethod=bytraffic
</proxy>
ProxyPass / balancer://jie/ stickysession=jsessionid
ProxyPa***everse / balancer://jie/
=======================================================================
[root@jie1 ~]# httpd -t
Syntax OK
[root@jie1 ~]# service httpd reload
Reloading httpd:                                           [  OK  ]
[root@jie1 ~]#scp  /usr/local/apache/conf/httpd.conf 172.16.22.2:/ /usr/local/apache/conf/    #把配置文件copy到apache2上

tomcat1&tomcat2上的配置:兩邊的配置基本都是同樣

#==================tomcat1的配置文件修改=================================
[root@jie3 conf]# vim /usr/local/tomcat/conf/server.xml 
<Engine name="Catalina" defaultHost="www.test.com" jvmRoute="TomcatA">
#==================tomcat2的配置文件修改================================
[root@jie4 conf]# vim /usr/local/tomcat/conf/server.xml 
<Engine name="Catalina" defaultHost="www.test.com" jvmRoute="TomcatB">

測試mod_proxy的負載均衡

100050706.png

100114870.png


1)mod_proxy_ajp

apache1&apache2上的配置:兩邊的配置都是同樣


[root@jie1 ~]# cd /usr/local/apache/conf/
[root@jie1 conf]# vim /usr/local/apache/conf/httpd.conf
#=======================開啓這些模塊,和添加如下內容===================
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
<Proxy balancer://jie>
BalancerMember http://172.16.22.3:80/ loadfactor=1 route=TomcatA
BalancerMember http://172.16.22.4:80/ loadfactor=1 route=TomcatB
ProxySet  lbmethod=bytraffic
</Proxy>
ProxyPass / balancer://jie/
ProxyPa***everse / balancer://jie/
<Proxy *>
Require all granted
</Proxy>
<Location  / >
Require all granted
</Location>
=======================================================================
[root@jie1 ~]# httpd -t
Syntax OK
[root@jie1 ~]# service httpd reload
Reloading httpd:                                           [  OK  ]
[root@jie1 ~]#scp  /usr/local/apache/conf/httpd.conf 172.16.22.2:/ /usr/local/apache/conf/    #把配置文件copy到apache2上

tomcat1&tomcat2上不用修改

測試mod_proxy_ajp模塊的負載均衡

101308487.png

101329775.png


3)mod_jk

apache1&apache2上的配置:兩邊的配置都是同樣

[root@jie1 ~]# cd /usr/local/apache/conf/
[root@jie1 conf]# vim /usr/local/apache/conf/httpd.conf
#=========註釋掉一些以前開啓的模塊,而後添加把以前用mod_proxy的模塊添加的內容也註釋掉,只添加一句=====================
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
Include /usr/local/apache/conf/extra/httpd-jk.conf
[root@jie1 extra]# vim /usr/local/apache/conf/extra/httpd-jk.conf
========================================
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /usr/local/apache/conf/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  jie
JkMount  /jkstatus/  stat1
========================================
[root@jie1 extra]# vim /usr/local/apache/conf/extra/workers.properties
========================================
worker.list = jie,stat1
worker.TomcatA.type = ajp13
worker.TomcatA.host = 172.16.22.3
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 172.16.22.4
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.jie.type = lb
worker.jie.method = R
worker.jie.sticky_session = 0
worker.jie.balance_workers = TomcatA, TomcatB
worker.stat1.type = status
========================================
[root@jie1 ~]# httpd -t
Syntax OK
[root@jie1 ~]# service httpd reload
Reloading httpd:                                           [  OK  ]
#==================能夠把修改的這些文件複製到apache2上=================

tomcat1&tomcat2上的配置文件沒必要修改,在新建一個測試頁

[root@jie3 conf]# cd /tomcat/test/
[root@jie3 test]# vim session.jsp
#=======================session的測試頁面==============================
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="green">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>
========================================================================


測試mod_jk模塊的負載均衡

103323243.png

103339584.png


補充:

在apache1&apache2修改配置文件的這個參數


[root@jie1 extra]# vim /usr/local/apache/conf/extra/workers.properties

worker.jie.sticky_session = 0 #實現將用戶session與某worker綁定


此參數設置之後,來着同一個IP的訪問一段時間內始終代理給後端的同一個tomcat上

測試結果:

104342171.png

此致,apache+tomcat的架構已經完成,請各位博友多多指點

相關文章
相關標籤/搜索