apache+tomcat的架构

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

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
[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如何保存,不同公司有不同的方法,保存在哪里还是需要运维人员和开发人员共同探讨合作。



一、每个服务器相关软件的安装

apache1上相关软件的安装:

1
2
3
4
5
6
7
8
9
10
11
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
#================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上相关软件的安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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的配置:

1
2
3
4
5
6
7
8
9
10
11
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
40
41
#=====================修改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的相关配置:

1
2
3
4
5
6
7
8
9
#=====================修改来着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的高可用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#=============查看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可以漂移


三、tomcat服务器测试与mysql的连接

tomcat1的配置:

1
2
3
4
5
6
7
8
9
10
11
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
40
41
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
[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论坛

1
2
3
4
5
6
7
8
9
10
11
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
40
41
42
43
44
45
46
47
48
49
50
51
#=================解压论坛,把论坛的文件存放到网页存放路径中=============
[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论坛已经安装成功


四、apache三种方式实现tomcat的反向代理

1)mod_proxy

apache1&apache2上的配置:两边的配置都是一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[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/
ProxyPassReverse / 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文件

两边的配置文件都必须一样

1
2
3
4
5
6
7
8
9
10
11
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
40
41
42
43
44
45
46
47
48
49
50
51
52
[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的配置文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[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/
ProxyPassReverse / 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上

tomcat

博主只测试了tomcat2的反向代理

000150238.png

3)mod_jk

之前已经说过,apache要使用mod_jk模块做tomcat的反向代理则必须安装连接tomcat的连接器,连接器已经安装

apache1&apache2的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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] #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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] #

tomcat

测试mod_jk模式为tomcat1反向代理

094736522.png

自此apache三种方式实现反向代理已经ok了


五、apache三种方式实现tomcat的负载均衡

三种反向代理与三种负载均衡都是以这三种模块mod_proxy、mod_proxy_ajp、mod_jk,只不过每种方式都需要用到负载均衡的模块

1)mod_proxy

apache1&apache2上的配置:两边的配置都是一样


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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
ProxyPassReverse / 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上

tomcat

1
2
3
4
5
6
#==================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上的配置:两边的配置都是一样


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[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/
ProxyPassReverse / 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上

tomcat

测试mod_proxy_ajp模块的负载均衡

101308487.png

101329775.png


3)mod_jk

apache1&apache2上的配置:两边的配置都是一样

1
2
3
4
5
6
7
8
9
10
11
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
40
41
42
43
[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上=================

tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[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










本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1303981,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
235
分享
相关文章
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
随着云基础设施的成熟,Apache Doris 3.0 正式支持了存算分离全新模式。基于这一架构,能够实现更低成本、极致弹性以及负载隔离。本文将介绍存算分离架构及其优势,并通过导入性能、查询性能、资源成本的测试,直观展现存算分离架构下的性能表现,为读者提供具体场景下的使用参考。
云原生时代的架构革新,Apache Doris 存算分离如何实现弹性与性能双重提升
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
独特架构打造新一代消息队列Apache Pulsar
Apache Pulsar 是一个开源的分布式消息流平台,由雅虎开发并于 2016 年开源,2018 年成为 Apache 顶级项目。Pulsar 通过独特的架构提供多租户、持久化存储和批处理等高级功能,支持高吞吐量、低延迟的消息传递。其核心组件包括 Broker、Apache BookKeeper 和 Apache ZooKeeper,分别负责消息处理、持久化存储和集群管理。
161 1
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Spark & Paimon Meetup · 北京站,助力 LakeHouse 架构生产落地
2024年11月15日13:30北京市朝阳区阿里中心-望京A座-05F,阿里云 EMR 技术团队联合 Apache Paimon 社区举办 Apache Spark & Paimon meetup,助力企业 LakeHouse 架构生产落地”线下 meetup,欢迎报名参加!
173 3
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解
80 9
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
137 3
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进
184 2

热门文章

最新文章

推荐镜像

更多