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 && make && 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 && make && 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 && make && 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 && make && 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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><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>/></code>
<code>#监听的端口改为了80</code>
<code> </code><code><Connector port=</code><code>"8009"</code> <code>protocol=</code><code>"AJP/1.3"</code> <code>redirectPort=</code><code>"8443"</code> <code>/></code>
<code> </code><code><Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>></code>
<code>#defaultHost把默认的localhost改为了新建的主机名</code>
<code> </code><code><Realm className=</code><code>"org.apache.catalina.realm.LockOutRealm"</code><code>></code>
<code> </code><code><Realm className=</code><code>"org.apache.catalina.realm.UserDatabaseRealm"</code>
<code> </code><code>resourceName=</code><code>"UserDatabase"</code><code>/></code>
<code> </code><code><</code><code>/Realm</code><code>></code>
<code> </code><code><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>></code>
<code> </code><code><Context path=</code><code>""</code> <code>docBase=</code><code>"/tomcat/test"</code> <code>/></code>
<code>#新建了一个虚拟主机,站点和网页文件存放在/tomcat/test目录下</code>
<code> </code><code><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 &quot;%r&quot; %s %b"</code> <code>/></code>
<code> </code><code><</code><code>/Host</code><code>></code>
<code> </code><code><</code><code>/Engine</code><code>></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><%@ page language=</code><code>"java"</code> <code>%></code>
<code><%@ page </code><code>import</code><code>=</code><code>"com.mysql.jdbc.Driver"</code> <code>%></code>
<code><%@ page </code><code>import</code><code>=</code><code>"java.sql.*"</code> <code>%></code>
<code><%</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>"&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>%></code>
<code>======================================================================</code>
<code>#==============在mysql上授权能访问数据库的网段==============</code>
<code>[root@jie4 ~]</code><code># mysql</code>
<code>mysql> 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> 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><Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.bbs.com"</code> <code>></code>
<code>#defaultHost改为新建的论坛的虚拟主机名</code>
<code> </code><code><Host name=</code><code>"www.test.com"</code> <code>appBase=</code><code>"/tomcat/bbs"</code>
<code> </code><code><Context path=</code><code>""</code> <code>docBase=</code><code>"/tomcat/bbs"</code> <code>/></code>
<code>#再新建了一个虚拟主机,站点和网页文件存放在/tomcat/bbs目录下</code>
<code>#===默认的虚拟主机还有www.test.com的虚拟主机的配置文件没给予显示</code>
<code>=======================================================================</code>
<code>#==================在数据库上面创建,Jsprun论坛的数据库=============</code>
<code>mysql> create database jsprun;</code>
<code>Query OK, 1 row affected (0.03 sec)</code>
<code>mysql> 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&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><Proxy *></code>
<code> </code><code>Order deny,allow</code>
<code> </code><code>Allow from all</code>
<code><</code><code>/Proxy</code><code>></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&tomcat2上的配置:两边的配置都是一样
两边都需要创建/tomcat/test目录和index.jsp文件
两边的配置文件都必须一样
<code>[root@jie3 </code><code>test</code><code>]</code><code># vim index.jsp</code>
<code>#=============测试页面==============================================</code>
<code><%@ page </code><code>import</code><code>=</code><code>"java.util.*"</code> <code>%></code>
<code><html></code>
<code> </code><code><</code><code>head</code><code>></code>
<code> </code><code><title>JSP </code><code>test</code> <code>page.<</code><code>/title</code><code>></code>
<code> </code><code><</code><code>/head</code><code>></code>
<code> </code><code><body></code>
<code> </code><code><% out.println(</code><code>"Hello,tomcat1,jie3!"</code><code>); %></code>
<code> </code><code><</code><code>/body</code><code>></code>
<code><</code><code>/html</code><code>></code>
博主只测试了tomcat1的反向代理
<a href="http://blog.51cto.com/attachment/201309/235626111.png" target="_blank"></a>
2)mod_proxy_ajp
apache1&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><proxy balancer:</code><code>//jie</code><code>></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><</code><code>/proxy</code><code>></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><Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>jvmRoute=</code><code>"TomcatA"</code><code>></code>
<code>#==================tomcat2的配置文件修改================================</code>
<code>[root@jie4 conf]</code><code># vim /usr/local/tomcat/conf/server.xml</code>
<code><Engine name=</code><code>"Catalina"</code> <code>defaultHost=</code><code>"www.test.com"</code> <code>jvmRoute=</code><code>"TomcatB"</code><code>></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><Proxy balancer:</code><code>//jie</code><code>></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><Location / ></code>
<code><</code><code>/Location</code><code>></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><</code><code>head</code><code>><title>TomcatA<</code><code>/title</code><code>><</code><code>/head</code><code>></code>
<code> </code><code><h1><font color=</code><code>"green"</code><code>>TomcatA <</code><code>/font</code><code>><</code><code>/h1</code><code>></code>
<code> </code><code><table align=</code><code>"centre"</code> <code>border=</code><code>"1"</code><code>></code>
<code> </code><code><</code><code>tr</code><code>></code>
<code> </code><code><td>Session ID<</code><code>/td</code><code>></code>
<code> </code><code><% session.setAttribute(</code><code>"abc"</code><code>,</code><code>"abc"</code><code>); %></code>
<code> </code><code><td><%= session.getId() %><</code><code>/td</code><code>></code>
<code> </code><code><</code><code>/tr</code><code>></code>
<code> </code><code><td>Created on<</code><code>/td</code><code>></code>
<code> </code><code><td><%= session.getCreationTime() %><</code><code>/td</code><code>></code>
<code> </code><code><</code><code>/tr</code><code>></code>
<code> </code><code><</code><code>/table</code><code>></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&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,如需转载请自行联系原作者