为三台虚拟主机分别提供互相解析的hosts文件,并同步时间

[root@c7node2 ~]# vim /etc/hosts
192.168.0.22    c7node1.wlw.com
192.168.0.11    c7node2.wlw.com     
192.168.0.33    C6node2.wlw.com 
[root@c7node2 ~]# ansible tomcat -m copy -a 'src=/etc/hosts dest=/etc/'
[root@c7node2  ~]#  ansible all  -a 'ntpdate cn.pool.ntp.org

  

LNMT:

client -->http --> nginx --> reverse_proxy --> http --> tomcat (http connector)

c7node1.wlw.com    192.168.0.22    tomcat服务器

C6node2.wlw.com    192.168.0.33    nginx反向代理


为c7node1.wlw.com创建webapp特有的目录结构,并提供首页文件

[root@c7node1 ~]# mkdir -pv /data/webapps/ROOT/{lib,classes,WEB-INF,META-INF}
[root@c7node1 ~]# vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>

  TomcatA
  
    

TomcatA 

                    Session ID     <% session.setAttribute("abc","abc"); %>         <%= session.getId() %>                       Created on         <%= session.getCreationTime() %>              

创建一个虚拟主机并设置为默认主机

[root@c7node1 ~]# vim /usr/local/tomcat/conf/server.xml

........
     
        
        
      
........


为C6node2.wlw.com提供nginx反向代理配置,除了jsp,do结尾的文件反向代理给tomcat处理,其他的静态文件由nginx处理

[root@C6node2 ~]# vim /etc/nginx/conf.d/default.conf 
    location / {

    }
    location ~* \.(jsp|do)$ {
        proxy_pass http://c7node1.wlw.com:8080/;
    }


tomcat_第1张图片


LAMT:

  client --> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}

c7node1.wlw.com    192.168.0.22    tomcat服务器

C6node2.wlw.com   192.168.0.33    httpd反向代理


为C6node2.wlw.com提供http(主:proxy_module,子:proxy_module_http)反向代理配置

[root@C6node2 ~]# vim /etc/httpd/conf/httpd.conf 

    ServerName c7node1.wlw.com
    ProxyVia on
    ProxyPreserveHost on
    ProxyRequests off
    
        Order allow,deny
        Allow from all
    
    ProxyPass / http://192.168.0.22:8080/
    ProxyPa***everse / http://192.168.0.22:8080/
    
        Order allow,deny
        Allow from all
    


为C6node2.wlw.com提供http(主:proxy_module,子:proxy_module_ajp)反向代理配置

[root@C6node2 ~]# vim /etc/httpd/conf/httpd.conf 

    SetHandler balancer-manager
    Proxypass !
    Order Deny,Allow
    Allow from all

#状态页面

    ServerName c7node1.wlw.com
    ProxyVia on
    ProxyPreserveHost on
    ProxyRequests off
    
        Order allow,deny
        Allow from all
    
    ProxyPass /status !
    ProxyPass / ajp://192.168.0.22:8080/
    ProxyPa***everse / ajp://192.168.0.22:8080/
    
        Order allow,deny
        Allow from all
    
    
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 192.168
    

tomcat_第2张图片

tomcat_第3张图片

tomcat_第4张图片





利用nginx实现tomcat的负载均衡

[root@C6node2 conf.d]# vim /etc/nginx/nginx.conf
http {
........
    upstream tomcat {
        server c7node1.wlw.com:8080;
        server c7node2.wlw.com:8080;
    }
server {
    listen       80 default_server;
    location / {

    }
    location ~* \.(jsp|do)$ {
#       ip_hash;    如果需要基于源IP地址hash,可以添加此选项
        proxy_pass http://tomcat;
    }
........
}

tomcat_第5张图片

tomcat_第6张图片


基于mod_jk的反向代理

编译安装mod_jk

[root@C6node2 ~]# wget http://apache.fayea.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz
[root@C6node2 ~]# tar xf tomcat-connectors-1.2.41-src.tar.gz
[root@C6node2 ~]# cd tomcat-connectors-1.2.41-src/native/
[root@C6node2 native]# yum install -y httpd-devel
[root@C6node2 native]# ./configure --with-apxs=/usr/sbin/apxs
[root@C6node2 native]# make && make install

配置mod_jk

[root@C6node2 ~]# cd /etc/httpd/conf.d
[root@C6node2 conf.d]# vim httpd-jk.conf
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile   /etc/httpd/conf.d/workers.properties
JkLogFile       logs/mod_jk.log
JkLogLevel      debug
JkMount    /*   TomcatA
JkMount  /status  stat1

[root@C6node2 conf.d]# vim workers.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=9090
worker.TomcatA.host=192.168.0.11
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status

tomcat_第7张图片

tomcat_第8张图片




利用httpd实现tomcat的负载均衡

①、 apache: mod_proxy,mod_proxy_http,mod_proxy_balancer

   tomcat:http connector(端口为:8080)

[root@C6node2 conf]# vim /etc/httpd/conf/httpd.conf

    ServerName c6node2.wlw.com
    ProxyVia on
    ProxyPreserveHost on
    ProxyRequests off
    
        Order allow,deny
        Allow from all
    
#   Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    
      BalancerMember http://192.168.0.22:8080 loadfactor=1 route=TomcatA
      BalancerMember http://192.168.0.11:8080 loadfactor=1 route=TomcatB
#     ProxySet stickysession=ROUTEID    这里是基于route做绑定,可以添加上面Header信息,测试可加可不加
#     ProxySet stickysession=JSESSIONID    这里基于session做绑定
    
    ProxyPass /status !
    ProxyPass / balancer://tomcatsr/
    ProxyPa***everse / balancer://tomcatsr/
    
        Order allow,deny
        Allow from all
    
    
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 192.168
    


②、 apache: mod_proxy,mod_proxy_ajp,mod_proxy_balancer

   tomcat:ajp connector(端口为:9090)

[root@C6node2 conf]# vim /etc/httpd/conf/httpd.conf

    ServerName c6node2.wlw.com
    ProxyVia on
    ProxyPreserveHost on
    ProxyRequests off
    
        Order allow,deny
        Allow from all
    
#   Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    
      BalancerMember ajp://192.168.0.22:9090 loadfactor=1 route=TomcatA
      BalancerMember ajp://192.168.0.11:9090 loadfactor=1 route=TomcatB
#     ProxySet stickysession=ROUTEID    这里是基于route做绑定,可以添加上面Header信息,测试可加可不加
#     ProxySet stickysession=JSESSIONID    这里基于session做绑定
    
    ProxyPass /status !
    ProxyPass / balancer://tomcatsr/
    ProxyPa***everse / balancer://tomcatsr/
    
        Order allow,deny
        Allow from all
    
    
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 192.168
    



③、 apache:mod_jk

    tomcat:ajp connector(端口:9090)


配置mod_jk

[root@C6node2 ~]# cd /etc/httpd/conf.d
[root@C6node2 conf.d]# vim httpd-jk.conf
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/conf.d/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  lbcluster
JkMount  /status  stat

[root@C6node2 conf.d]# vim workers.properties
worker.list = lbcluster,stat
worker.TomcatA.type = ajp13
worker.TomcatA.host = 192.168.0.22 
worker.TomcatA.port = 9090         #这里配置的是ajp connector的端口
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.0.11
worker.TomcatB.port = 9090
worker.TomcatB.lbfactor = 5
worker.lbcluster.type = lb
worker.lbcluster.sticky_session = 0         #设置为1则开启session绑定
worker.lbcluster.balance_workers = TomcatA, TomcatB
worker.stat.type = status



Session Cluster:

    session manager:会话管理器

        StandardManager

[root@c7node1 ROOT]# vim /usr/local/tomcat/conf/server.xml
      
      
        
        
      

[root@c7node1 ROOT]# pwd
/usr/local/tomcat/work/Catalina/c7node1.wlw.com/ROOT
[root@c7node1 ROOT]# ls
org  SESSIONS.ser
#可以看到这里生成了SESSIONS.ser会话文件


        PersistentManager:

            FileStore


            JDBC

        DeltaManager

①、各节点配置使用deltamaanager

[root@c7node2 WEB-INF]# vim /usr/local/tomcat/conf/server.xml
 

          

          
            
            

            
              
            
            
            
          

          
          

          

          
        

②、为需要使用session cluster的webapps开启session。添加distribution的功能

[root@c7node2 WEB-INF]# cp /usr/local/tomcat/conf/web.xml /data/webapps/ROOT/WEB-INF/
[root@c7node2 WEB-INF]# vim /data/webapps/ROOT/WEB-INF/web.xml 
........
    

tomcat_第9张图片

tomcat_第10张图片

可以看到负载均衡后会话不会丢失


        BackupManager