日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache+tomcat的架构

發布時間:2024/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache+tomcat的架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

apache+tomcat的架構

===================================

keepalived實現apache的高可用

在tomcat上搭建JspRun論壇

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

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

===================================

環境:

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

yum源:

[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


拓撲圖:


拓撲圖的規劃:


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如何保存,不同公司有不同的方法,保存在哪里還是需要運維人員和開發人員共同探討合作。



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

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的高可用)


二、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.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL } vrrp_script chk_httpd {script "killall -0 httpd"interval 0weghit -2 } vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 22priority 100advert_int 1authentication {auth_type PASSauth_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.confstate BACKUPpriority 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 1000inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0inet 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 1000inet 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 1000inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0inet 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 1000inet 172.16.22.1/16 brd 172.16.255.255 scope global eth0inet 172.16.22.100/32 scope global eth0 [root@jie1 conf]#

成功測試,當apache服務的進程死掉后,vip可以漂移


三、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的連接

測試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論壇


論壇已經安裝成功


四、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,allowAllow 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的反向代理


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,allowAllow 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的反向代理

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反向代理

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


五、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的負載均衡


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模塊的負載均衡



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模塊的負載均衡


補充:

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


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

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


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

測試結果:

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





轉載于:https://blog.51cto.com/litaotao/1303981

總結

以上是生活随笔為你收集整理的apache+tomcat的架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。