天天看點

apache+tomcat的架構

apache+tomcat的架構

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

keepalived實作apache的高可用

在tomcat上搭建JspRun論壇

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

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

環境:

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

yum源:

1

2

3

4

5

6

7

8

9

10

11

<code>[centos]</code>

<code>name=sohu-centos</code>

<code>baseurl=http:</code><code>//mirrors</code><code>.sohu.com</code><code>/centos/</code><code>$releasever</code><code>/os/</code><code>$basearch</code>

<code>gpgcheck=1</code>

<code>enable</code><code>=0</code>

<code>gpgkey=http:</code><code>//mirrors</code><code>.sohu.com</code><code>/centos/RPM-GPG-KEY-CentOS-6</code>

<code>[epel]</code>

<code>name=sohu-epel</code>

<code>baseurl=http:</code><code>//mirrors</code><code>.sohu.com</code><code>/fedora-epel/</code><code>$releasever/$basearch/</code>

<code>enable</code><code>=1</code>

<code>gpgcheck=0</code>

拓撲圖:

<a href="http://blog.51cto.com/attachment/201309/205910806.png" target="_blank"></a>

拓撲圖的規劃:

IP 位址

所需安裝軟體

apache1

Eth0:172.16.22.1

VIP1:172.16.22.100

Keepalived+apache+tomcat-connectors

apache2

Eth0:172.16.22.2

tomcat1

Eth0:172.16.22.3

Jdk+tomcat+mysql-connector-java

tomcat2

Eth0:172.16.22.4

mysql1

Eth0:172.16.22.5

VIP2:172.16.22.200

Corosync+pacemaker+Mysql+drbd

mysql2

Eth0:172.16.22.6

部分軟體下載下傳

需解決的問題:

防止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上相關軟體的安裝:

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<code>#================yum安裝keepalived======================================</code>

<code>[root@jie1 ~]</code><code># yum -y install keepalived</code>

<code>#================源碼編譯安裝httpd-2.4.6================================</code>

<code>[root@jie1 ~]</code><code># tar xf apr-1.4.6.tar.bz2</code>

<code>[root@jie1 ~]</code><code># tar xf apr-util-1.5.2.tar.bz2</code>

<code>[root@jie1 ~]</code><code># tar xf httpd-2.4.6.tar.bz2</code>

<code>#===========安裝開發庫,和依賴性包======================================</code>

<code>[root@jie1 ~]</code><code># yum -y groupinstall "Development tools" "Server Platform Development"</code>

<code>[root@jie1 ~]</code><code># yum -y install pcre-devel</code>

<code>#=============編譯安裝apr軟體===========================================</code>

<code>[root@jie1 ~]</code><code># cd apr-1.4.6</code>

<code>[root@jie1 apr-1.4.6]</code><code># ./configure --prefix=/usr/local/apr &amp;&amp; make &amp;&amp; make install</code>

<code>#================編譯安裝apr-util軟體包=================================</code>

<code>[root@jie1 ~]</code><code># cd apr-util-1.5.2</code>

<code>[root@jie1 apr-util-1.5.2]</code><code># ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr &amp;&amp; make &amp;&amp; make install</code>

<code>#=================編譯安裝httpd的軟體包================================</code>

<code>[root@jie1 ~]</code><code># cd httpd-2.4.6</code>

<code>[root@jie1 httpd-2.4.6]</code><code># ./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  &amp;&amp; make &amp;&amp; make install</code>

<code>#============複制源碼包裡面提供的httpd的SystemV腳本=====================</code>

<code>[root@jie1 ~]</code><code># cp httpd-2.4.6/build/rpm/httpd.init  /etc/rc.d/init.d/httpd</code>

<code>[root@jie1 ~]</code><code># vim /etc/rc.d/init.d/httpd</code>

<code>#==============vim /etc/rc.d/init.d/httpd =============================</code>

<code>prog=httpd</code>

<code>httpd=${HTTPD-</code><code>/usr/local/apache/bin/httpd</code><code>}</code>

<code>pidfile=${PIDFILE-</code><code>/usr/local/apache/logs/</code><code>${prog}.pid}</code>

<code>lockfile=${LOCKFILE-</code><code>/var/lock/subsys/</code><code>${prog}}</code>

<code>RETVAL=0</code>

<code># check for 1.3 configuration</code>

<code>check13 () {</code>

<code>        </code><code>CONFFILE=</code><code>/usr/local/apache/conf/httpd</code><code>.conf</code>

<code>#======================================================================</code>

<code>[root@jie1 ~]</code><code># service httpd start</code>

<code>Starting httpd:                                            [  OK  ]</code>

<code>[root@jie1 ~]</code><code># chkconfig --add httpd</code>

<code>[root@jie1 ~]</code><code># chkconfig httpd on</code>

<code>#==============編譯安裝使用mod_jk子產品連接配接tomcat的連接配接器=================</code>

<code>[root@jie1 ~]</code><code># tar xf tomcat-connectors-1.2.37-src.tar.gz</code>

<code>[root@jie1 ~]</code><code># cd tomcat-connectors-1.2.37-src/native/</code>

<code>[root@jie1 native]</code><code># ./configure --with-apxs=/usr/local/apache/bin/apxs &amp;&amp; make &amp;&amp; make install</code>

apache2:與apache1要安裝相關的軟體、安裝方法都是一樣的,這裡不再贅述

tomcat1上相關軟體的安裝:

<code>[root@jie3 ~]</code><code># ls</code>

<code>anaconda-ks.cfg              jdk-7u9-linux-x64.rpm</code>

<code>apache-tomcat-7.0.42.</code><code>tar</code><code>.gz  JspRun!_6.0.0_GBK.zip</code>

<code>install</code><code>.log                  mysql-connector-java-5.1.16.</code><code>tar</code><code>.gz</code>

<code>install</code><code>.log.syslog     </code>

<code>#===================安裝jdk,修改環境變量=========================</code>

<code>[root@jie3 ~]</code><code># rpm -ivh jdk-7u9-linux-x64.rpm</code>

<code>[root@jie3 ~]</code><code># vim/etc/profile.d/java.sh</code>

<code>export</code> <code>JAVA_HOME=</code><code>/usr/java/latest</code>

<code>export</code> <code>PATH=$JAVA_HOME</code><code>/bin</code><code>:$PATH</code>

<code>[root@jie3 ~]</code><code># source /etc/profile.d/java.sh</code>

<code>#===================安裝tomcat,修改環境變量=====================</code>

<code>[root@jie3 ~]</code><code># tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/</code>

<code>[root@jie3 ~]</code><code># cd /usr/local/</code>

<code>[root@jie3 </code><code>local</code><code>]</code><code>#ln -sv apache-tomcat-7.0.42   tomcat</code>

<code>[root@jie3 </code><code>local</code><code>]</code><code># vim /etc/profile.d/tomcat.sh</code>

<code>export</code> <code>CATALINA_HOME=</code><code>/usr/local/tomcat</code>

<code>export</code> <code>PATH=$CATALINA_HOME</code><code>/bin</code><code>:$PATH</code>

<code>[root@jie3 </code><code>local</code><code>]</code><code># source /etc/profile.d/tomcat.sh</code>

<code>#==================安裝連接配接mysql的驅動===========================</code>

<code>[root@jie3 </code><code>local</code><code>]</code><code># cd /root/</code>

<code>[root@jie3 ~]</code><code># tar xf mysql-connector-java-5.1.16.tar.gz</code>

<code>[root@jie3 ~]</code><code># cd mysql-connector-java-5.1.16</code>

<code>[root@jie3 mysql-connector-java-5.1.16]</code><code># cp mysql-connector-java-5.1.16-bin.jar /usr/local/tomcat/lib/</code>

tomcat2:與tomcat1安裝相關的軟體、安裝方法都是一樣的,這裡也不再贅述

二、keepalived實作apache的高可用

apache1的配置:

40

41

<code>#=====================修改keepalived的配置實作httpd的高可用===========</code>

<code>[root@jie1 ~]</code><code># cd /etc/keepalived/</code>

<code>[root@jie1 keepalived]</code><code># vim keepalived.conf</code>

<code>! Configuration File </code><code>for</code> <code>keepalived</code>

<code>global_defs {</code>

<code>   </code><code>notification_email {</code>

<code>     </code><code>[email protected]</code>

<code>   </code><code>}</code>

<code>   </code><code>notification_email_from [email protected]</code>

<code>   </code><code>smtp_server 127.0.0.1</code>

<code>   </code><code>smtp_connect_timeout 30</code>

<code>   </code><code>router_id LVS_DEVEL</code>

<code>}</code>

<code>vrrp_script chk_httpd {</code>

<code>     </code><code>script </code><code>"killall -0 httpd"</code>

<code>     </code><code>interval 0</code>

<code>     </code><code>weghit -2</code>

<code>vrrp_instance VI_1 {</code>

<code>    </code><code>state MASTER</code>

<code>    </code><code>interface eth0</code>

<code>    </code><code>virtual_router_id 22</code>

<code>    </code><code>priority 100</code>

<code>    </code><code>advert_int 1</code>

<code>    </code><code>authentication {</code>

<code>        </code><code>auth_type PASS</code>

<code>        </code><code>auth_pass 1111</code>

<code>    </code><code>}</code>

<code>    </code><code>virtual_ipaddress {</code>

<code>        </code><code>172.16.22.100</code>

<code>    </code><code>track_script {</code>

<code>       </code><code>chk_httpd</code>

<code>#====================copy配置檔案到apache2上面========================</code>

<code>[root@jie1 keepalived]</code><code>#scp keepalived.conf 172.16.22.2:/etc/keepalived</code>

<code>[root@jie1 keepalived]</code><code># service keepalived start</code>

<code>Starting keepalived:                                       [  OK  ]</code>

<code>[root@jie1 keepalived]</code><code># chkconfig --add keepalived</code>

<code>[root@jie1 keepalived]</code><code># chkconfig keepalived on</code>

apache2的相關配置:

<code>#=====================修改來着apache1的keepalived的配置檔案===========</code>

<code>[root@jie2 ~]</code><code># cd /etc/keepalived/</code>

<code>[root@jie2 keepalived]</code><code># vim keepalived.conf</code>

<code>    </code><code>state BACKUP</code>

<code>    </code><code>priority 99</code>

<code>[root@jie2 keepalived]</code><code># service keepalived start</code>

<code>[root@jie2 keepalived]</code><code># chkconfig --add keepalived</code>

<code>[root@jie2 keepalived]</code><code># chkconfig keepalived on</code>

測試apache的高可用:

<code>#=============檢視vip在apache1節點上=================================</code>

<code>[root@jie1 conf]</code><code># ip addr show | grep eth0</code>

<code>2: eth0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>

<code>    </code><code>inet 172.16.22.1</code><code>/16</code> <code>brd 172.16.255.255 scope global eth0</code>

<code>    </code><code>inet 172.16.22.100</code><code>/32</code> <code>scope global eth0  </code><code>#===vip為172.16.22.100==</code>

<code>#===========殺死httpd的服務程序,發現vip已經漂移=================</code>

<code>[root@jie1 conf]</code><code># killall httpd</code>

<code>#=============檢視vip已經漂移到apache2節點上=======================</code>

<code>[root@jie2 ~]</code><code># ip addr show | grep eth0</code>

<code>    </code><code>inet 172.16.22.100</code><code>/32</code> <code>scope global eth0</code>

<code>#=======在apache1上面重新開啟http服務,vip已經重新漂移到apache1上=====</code>

<code>[root@jie1 conf]</code><code># service httpd start</code>

<code>[root@jie1 conf]</code><code>#</code>

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

三、tomcat伺服器測試與mysql的連接配接

tomcat1的配置:

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

<code>[root@jie3 ~]</code><code># cd /usr/local/tomcat/conf/</code>

<code>[root@jie3 conf]</code><code># vim server.xml</code>

<code>#=================tomcat,server.xml的部分相關配置===================</code>

<code>&lt;Connector port=</code><code>"80"</code> <code>protocol=</code><code>"HTTP/1.1"</code>

<code>              </code><code>connectionTimeout=</code><code>"20000"</code>

<code>              </code><code>redirectPort=</code><code>"8443"</code> <code>/&gt;</code>

<code>#監聽的端口改為了80</code>

<code>   </code><code>&lt;Connector port=</code><code>"8009"</code> <code>protocol=</code><code>"AJP/1.3"</code> <code>redirectPort=</code><code>"8443"</code> <code>/&gt;</code>

<code>   </code><code>&lt;Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>&gt;</code>

<code>#defaultHost把預設的localhost改為了建立的主機名</code>

<code>     </code><code>&lt;Realm className=</code><code>"org.apache.catalina.realm.LockOutRealm"</code><code>&gt;</code>

<code>       </code><code>&lt;Realm className=</code><code>"org.apache.catalina.realm.UserDatabaseRealm"</code>

<code>              </code><code>resourceName=</code><code>"UserDatabase"</code><code>/&gt;</code>

<code>     </code><code>&lt;</code><code>/Realm</code><code>&gt;</code>

<code>     </code><code>&lt;Host name=</code><code>"www.test.com"</code>  <code>appBase=</code><code>"/tomcat/test"</code>

<code>           </code><code>unpackWARs=</code><code>"true"</code> <code>autoDeploy=</code><code>"true"</code><code>&gt;</code>

<code>           </code><code>&lt;Context path=</code><code>""</code> <code>docBase=</code><code>"/tomcat/test"</code> <code>/&gt;</code>

<code>#建立了一個虛拟主機,站點和網頁檔案存放在/tomcat/test目錄下</code>

<code>       </code><code>&lt;Valve className=</code><code>"org.apache.catalina.valves.AccessLogValve"</code> <code>directory=</code><code>"logs"</code>

<code>              </code><code>prefix=</code><code>"test_access_log."</code> <code>suffix=</code><code>".txt"</code>

<code>              </code><code>pattern=</code><code>"%h %l %u %t &amp;quot;%r&amp;quot; %s %b"</code> <code>/&gt;</code>

<code>     </code><code>&lt;</code><code>/Host</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>/Engine</code><code>&gt;</code>

<code>================================部配置設定置檔案==========================</code>

<code>#=========利用catalina重新開機tomcat===========================</code>

<code>[root@jie3 conf]</code><code># catalina.sh stop</code>

<code>Using CATALINA_BASE:   </code><code>/usr/local/tomcat</code>

<code>Using CATALINA_HOME:   </code><code>/usr/local/tomcat</code>

<code>Using CATALINA_TMPDIR: </code><code>/usr/local/tomcat/temp</code>

<code>Using JRE_HOME:        </code><code>/usr/java/latest</code>

<code>Using CLASSPATH:       </code><code>/usr/local/tomcat/bin/bootstrap</code><code>.jar:</code><code>/usr/local/tomcat/bin/tomcat-juli</code><code>.jar</code>

<code>[root@jie3 conf]</code><code># catalina.sh start</code>

<code>#==============建立網頁根目錄和測試連接配接資料庫的網頁檔案===============</code>

<code>#===============部落客隻是測試了tomcat1上的,各位朋友也可以測試tomcat2上</code>

<code>[root@jie3 conf]</code><code>#mkdir -pv /tomcat/test</code>

<code>[root@jie3 conf]</code><code># cd /tomcat/test/</code>

<code>[root@jie3 </code><code>test</code><code>]</code><code># vim test.jsp</code>

<code>&lt;%@ page language=</code><code>"java"</code> <code>%&gt;</code>

<code>&lt;%@ page </code><code>import</code><code>=</code><code>"com.mysql.jdbc.Driver"</code> <code>%&gt;</code>

<code>&lt;%@ page </code><code>import</code><code>=</code><code>"java.sql.*"</code> <code>%&gt;</code>

<code>&lt;%</code>

<code>String driverName=</code><code>"com.mysql.jdbc.Driver"</code><code>;</code>

<code>String userName=</code><code>"jie"</code><code>;</code>

<code>String userPasswd=</code><code>"jie123"</code><code>;</code>

<code>String dbName=</code><code>"test"</code><code>;</code>

<code>String url=</code><code>"jdbc:mysql://172.16.22.200/"</code><code>+dbName+</code><code>"?user="</code><code>+userName+</code><code>"&amp;password="</code><code>+userPasswd;</code>

<code>Class.forName(</code><code>"com.mysql.jdbc.Driver"</code><code>).newInstance();</code>

<code>try</code>

<code>{</code>

<code>        </code><code>Connection connection=DriverManager.getConnection(url);</code>

<code>        </code><code>out.println(</code><code>"TomcatA, tomcat connect mysql is ok!"</code><code>);</code>

<code>        </code><code>connection.close();</code>

<code>catch( Exception e )</code>

<code>        </code><code>out.println( </code><code>"connent mysql error:"</code> <code>+ e );</code>

<code>%&gt;</code>

<code>======================================================================</code>

<code>#==============在mysql上授權能通路資料庫的網段==============</code>

<code>[root@jie4 ~]</code><code># mysql</code>

<code>mysql&gt; grant all on *.* to </code><code>'jie'</code><code>@</code><code>'172.16.%.%'</code> <code>identified by </code><code>'jie123'</code><code>;</code>

<code>mysql&gt; flush privileges;</code>

測試建立的test.jsp測試檔案是否可以mysql的連接配接

<a href="http://blog.51cto.com/attachment/201309/230005209.png" target="_blank"></a>

測試tomcat連接配接資料庫is ok!

在tomcat安裝Jsprun論壇

<code>#=================解壓論壇,把論壇的檔案存放到網頁存放路徑中=============</code>

<code>[root@jie3 ~]</code><code># unzip JspRun\!_6.0.0_GBK.zip</code>

<code>[root@jie3 ~]</code><code>#mkdir  -pv /tomcat/bbs</code>

<code>[root@jie3 ~]</code><code>#cp -rp upload/* /tomcat/bbs/</code>

<code>#之前已經把監聽的端口改為了80</code>

<code>   </code><code>&lt;Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.bbs.com"</code> <code>&gt;</code>

<code>#defaultHost改為建立的論壇的虛拟主機名</code>

<code>     </code><code>&lt;Host name=</code><code>"www.test.com"</code>  <code>appBase=</code><code>"/tomcat/bbs"</code>

<code>           </code><code>&lt;Context path=</code><code>""</code> <code>docBase=</code><code>"/tomcat/bbs"</code> <code>/&gt;</code>

<code>#再建立了一個虛拟主機,站點和網頁檔案存放在/tomcat/bbs目錄下</code>

<code>#===預設的虛拟主機還有www.test.com的虛拟主機的配置檔案沒給予顯示</code>

<code>=======================================================================</code>

<code>#==================在資料庫上面建立,Jsprun論壇的資料庫=============</code>

<code>mysql&gt; create database jsprun;</code>

<code>Query OK, 1 row affected (0.03 sec)</code>

<code>mysql&gt; grant all on jsprun.* to </code><code>'jspuser'</code><code>@</code><code>'172.16.%.%'</code> <code>identified by </code><code>'jspmypass'</code><code>;</code>

<code>Query OK, 0 rows affected (0.00 sec)</code>

用浏覽器安裝Jsprun論壇

<a href="http://blog.51cto.com/attachment/201309/231342220.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/232153662.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/232222909.png" target="_blank"></a>

四、apache三種方式實作tomcat的反向代理

1)mod_proxy

apache1&amp;apache2上的配置:兩邊的配置都是一樣

<code>[root@jie1 ~]</code><code># vim /usr/local/apache/conf/httpd.conf</code>

<code>#==========開啟相應的子產品,然後添加以下參數============================</code>

<code>LoadModule proxy_module modules</code><code>/mod_proxy</code><code>.so</code>

<code>LoadModule proxy_connect_module modules</code><code>/mod_proxy_connect</code><code>.so</code>

<code>LoadModule proxy_http_module modules</code><code>/mod_proxy_http</code><code>.so</code>

<code>LoadModule proxy_ajp_module modules</code><code>/mod_proxy_ajp</code><code>.so</code>

<code>ProxyVia On</code>

<code>ProxyRequests Off</code>

<code>ProxyPreserveHost On</code>

<code>&lt;Proxy *&gt;</code>

<code>   </code><code>Order deny,allow</code>

<code>   </code><code>Allow from all</code>

<code>&lt;</code><code>/Proxy</code><code>&gt;</code>

<code>ProxyPass / http:</code><code>//172</code><code>.16.22.3:80/</code>

<code>ProxyPassReverse / http:</code><code>//172</code><code>.16.22.3:80/</code>

<code>[root@jie1 ~]</code><code># httpd -t</code>

<code>Syntax OK</code>

<code>[root@jie1 ~]</code><code># service httpd reload</code>

<code>Reloading httpd:                                           [  OK  ]</code>

<code>[root@jie1 ~]</code><code>#scp  /usr/local/apache/conf/httpd.conf 172.16.22.2:/ /usr/local/apache/conf/    #把配置檔案copy到apache2上</code>

tomcat1&amp;tomcat2上的配置:兩邊的配置都是一樣

兩邊都需要建立/tomcat/test目錄和index.jsp檔案

兩邊的配置檔案都必須一樣

<code>[root@jie3 </code><code>test</code><code>]</code><code># vim index.jsp</code>

<code>#=============測試頁面==============================================</code>

<code>&lt;%@ page </code><code>import</code><code>=</code><code>"java.util.*"</code> <code>%&gt;</code>

<code>&lt;html&gt;</code>

<code>  </code><code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;title&gt;JSP </code><code>test</code> <code>page.&lt;</code><code>/title</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>/head</code><code>&gt;</code>

<code>  </code><code>&lt;body&gt;</code>

<code>    </code><code>&lt;% out.println(</code><code>"Hello,tomcat1,jie3!"</code><code>); %&gt;</code>

<code>  </code><code>&lt;</code><code>/body</code><code>&gt;</code>

<code>&lt;</code><code>/html</code><code>&gt;</code>

部落客隻測試了tomcat1的反向代理

<a href="http://blog.51cto.com/attachment/201309/235626111.png" target="_blank"></a>

2)mod_proxy_ajp

apache1&amp;apache2的配置:

隻需小小修改apache的配置檔案中

<code>ProxyPass / ajp:</code><code>//172</code><code>.16.22.4:8009/</code>

<code>ProxyPassReverse / ajp:</code><code>//172</code><code>.16.22.4:8009/</code>

tomcat

部落客隻測試了tomcat2的反向代理

<a href="http://blog.51cto.com/attachment/201310/000150238.png" target="_blank"></a>

3)mod_jk

之前已經說過,apache要使用mod_jk子產品做tomcat的反向代理則必須安裝連接配接tomcat的連接配接器,連接配接器已經安裝

<code>[root@jie1 ~]</code><code># cd /usr/local/apache/conf/</code>

<code>[root@jie1 conf]</code><code># vim /usr/local/apache/conf/httpd.conf</code>

<code>#=========注釋掉之前開啟的子產品,然後添加把之前用mod_proxy的子產品添加的内容也注釋掉,隻添加一句=====================</code>

<code>#LoadModule proxy_module modules/mod_proxy.so</code>

<code>#LoadModule proxy_connect_module modules/mod_proxy_connect.so</code>

<code>#LoadModule proxy_http_module modules/mod_proxy_http.so</code>

<code>#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so</code>

<code>Include </code><code>/usr/local/apache/conf/extra/httpd-jk</code><code>.conf</code>

<code>[root@jie1 extra]</code><code># cat /usr/local/apache/conf/extra/httpd-jk.conf</code>

<code>LoadModule  jk_module  modules</code><code>/mod_jk</code><code>.so</code>

<code>JkWorkersFile  </code><code>/usr/local/apache/conf/extra/workers</code><code>.properties</code>

<code>JkLogFile  logs</code><code>/mod_jk</code><code>.log</code>

<code>JkLogLevel  debug</code>

<code>JkMount  /*  TomcatA</code>

<code>JkMount  </code><code>/status/</code>  <code>stat1</code>

<code>[root@jie1 extra]</code><code># cat /usr/local/apache/conf/extra/workers.properties</code>

<code>worker.list=TomcatA,stat1</code>

<code>worker.TomcatA.port=8009</code>

<code>worker.TomcatA.host=172.16.22.3</code>

<code>worker.TomcatA.</code><code>type</code><code>=ajp13</code>

<code>worker.TomcatA.lbfactor=1</code>

<code>worker.stat1.</code><code>type</code> <code>= status</code>

<code>[root@jie1 extra]</code><code>#</code>

<code>#=========</code>

測試mod_jk模式為tomcat1反向代理

<a href="http://blog.51cto.com/attachment/201310/094736522.png" target="_blank"></a>

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

五、apache三種方式實作tomcat的負載均衡

三種反向代理與三種負載均衡都是以這三種子產品mod_proxy、mod_proxy_ajp、mod_jk,隻不過每種方式都需要用到負載均衡的子產品

<code>#=======================開啟這些子產品,和添加以下内容===================</code>

<code>LoadModule proxy_balancer_module modules</code><code>/mod_proxy_balancer</code><code>.so</code>

<code>LoadModule proxy_express_module modules</code><code>/mod_proxy_express</code><code>.so</code>

<code>LoadModule slotmem_shm_module modules</code><code>/mod_slotmem_shm</code><code>.so</code>

<code>&lt;proxy balancer:</code><code>//jie</code><code>&gt;</code>

<code>BalancerMember ajp:</code><code>//172</code><code>.16.22.3:8009/  loadfactor=1 route=TomcatA</code>

<code>BalancerMember ajp:</code><code>//172</code><code>.16.22.4:8009/  loadfactor=1 route=TomcatA</code>

<code>ProxySet  lbmethod=bytraffic</code>

<code>&lt;</code><code>/proxy</code><code>&gt;</code>

<code>ProxyPass / balancer:</code><code>//jie/</code> <code>stickysession=jsessionid</code>

<code>ProxyPassReverse / balancer:</code><code>//jie/</code>

<code>#==================tomcat1的配置檔案修改=================================</code>

<code>[root@jie3 conf]</code><code># vim /usr/local/tomcat/conf/server.xml</code>

<code>&lt;Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>jvmRoute=</code><code>"TomcatA"</code><code>&gt;</code>

<code>#==================tomcat2的配置檔案修改================================</code>

<code>[root@jie4 conf]</code><code># vim /usr/local/tomcat/conf/server.xml</code>

<code>&lt;Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>jvmRoute=</code><code>"TomcatB"</code><code>&gt;</code>

測試mod_proxy的負載均衡

<a href="http://blog.51cto.com/attachment/201310/100050706.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/100114870.png" target="_blank"></a>

1)mod_proxy_ajp

<code>&lt;Proxy balancer:</code><code>//jie</code><code>&gt;</code>

<code>BalancerMember http:</code><code>//172</code><code>.16.22.3:80/ loadfactor=1 route=TomcatA</code>

<code>BalancerMember http:</code><code>//172</code><code>.16.22.4:80/ loadfactor=1 route=TomcatB</code>

<code>ProxyPass / balancer:</code><code>//jie/</code>

<code>Require all granted</code>

<code>&lt;Location  / &gt;</code>

<code>&lt;</code><code>/Location</code><code>&gt;</code>

測試mod_proxy_ajp子產品的負載均衡

<a href="http://blog.51cto.com/attachment/201310/101308487.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/101329775.png" target="_blank"></a>

<code>#=========注釋掉一些之前開啟的子產品,然後添加把之前用mod_proxy的子產品添加的内容也注釋掉,隻添加一句=====================</code>

<code>LoadModule lbmethod_bytraffic_module modules</code><code>/mod_lbmethod_bytraffic</code><code>.so</code>

<code>[root@jie1 extra]</code><code># vim /usr/local/apache/conf/extra/httpd-jk.conf</code>

<code>========================================</code>

<code>JkMount  /*  jie</code>

<code>JkMount  </code><code>/jkstatus/</code>  <code>stat1</code>

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

<code>worker.list = jie,stat1</code>

<code>worker.TomcatA.</code><code>type</code> <code>= ajp13</code>

<code>worker.TomcatA.host = 172.16.22.3</code>

<code>worker.TomcatA.port = 8009</code>

<code>worker.TomcatA.lbfactor = 5</code>

<code>worker.TomcatB.</code><code>type</code> <code>= ajp13</code>

<code>worker.TomcatB.host = 172.16.22.4</code>

<code>worker.TomcatB.port = 8009</code>

<code>worker.TomcatB.lbfactor = 5</code>

<code>worker.jie.</code><code>type</code> <code>= lb</code>

<code>worker.jie.method = R</code>

<code>worker.jie.sticky_session = 0</code>

<code>worker.jie.balance_workers = TomcatA, TomcatB</code>

<code>#==================可以把修改的這些檔案複制到apache2上=================</code>

<code>[root@jie3 </code><code>test</code><code>]</code><code># vim session.jsp</code>

<code>#=======================session的測試頁面==============================</code>

<code>  </code><code>&lt;</code><code>head</code><code>&gt;&lt;title&gt;TomcatA&lt;</code><code>/title</code><code>&gt;&lt;</code><code>/head</code><code>&gt;</code>

<code>    </code><code>&lt;h1&gt;&lt;font color=</code><code>"green"</code><code>&gt;TomcatA &lt;</code><code>/font</code><code>&gt;&lt;</code><code>/h1</code><code>&gt;</code>

<code>    </code><code>&lt;table align=</code><code>"centre"</code> <code>border=</code><code>"1"</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>tr</code><code>&gt;</code>

<code>        </code><code>&lt;td&gt;Session ID&lt;</code><code>/td</code><code>&gt;</code>

<code>    </code><code>&lt;% session.setAttribute(</code><code>"abc"</code><code>,</code><code>"abc"</code><code>); %&gt;</code>

<code>        </code><code>&lt;td&gt;&lt;%= session.getId() %&gt;&lt;</code><code>/td</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>/tr</code><code>&gt;</code>

<code>        </code><code>&lt;td&gt;Created on&lt;</code><code>/td</code><code>&gt;</code>

<code>        </code><code>&lt;td&gt;&lt;%= session.getCreationTime() %&gt;&lt;</code><code>/td</code><code>&gt;</code>

<code>     </code><code>&lt;</code><code>/tr</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>/table</code><code>&gt;</code>

<code>========================================================================</code>

測試mod_jk子產品的負載均衡

<a href="http://blog.51cto.com/attachment/201310/103323243.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201310/103339584.png" target="_blank"></a>

補充:

在apache1&amp;apache2修改配置檔案的這個參數

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

worker.jie.sticky_session = 0 #實作将使用者session與某worker綁定

此參數設定以後,來着同一個IP的通路一段時間内始終代理給後端的同一個tomcat上

測試結果:

<a href="http://blog.51cto.com/attachment/201310/104342171.png" target="_blank"></a>

本文轉自 jie783213507 51CTO部落格,原文連結:http://blog.51cto.com/litaotao/1303981,如需轉載請自行聯系原作者