nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式

  构建tomcat集群,实现前端一台nginx反代,到后端的apache服务器,由apache负责向后端的tomcat服务器进行资源调度,这样的模式比直接用nginx反代到后端主机,tomcat服务器所受到的压力会更小,服务将会更加稳定,这样的模式是经过实践检验出来的。如果nginx直接调度到后端tomcat服务器,则只支持http和https,而不支持ajp,http与https模式的设定,可以让外来客户直接访问tomcat服务器,而不需要经过我们设置好的前端nginx的端口,这样是十分不安全的做法,所以常用的模式都是ajp以及mod_jk,这种模式就可以阻止外来用户直接访问tomcat服务器,安全性就有了一定的保障。

  在这里实现三种httpd的代理模式,proxy_http_module,proxy_ajp_module,以及mod_jk。并对后端tomcat主机实现负载均衡,session sticky,session cluster,session server操作。

  IP配置:

    前端nginx:

       eno16777736 192.168.72.3

       eno33554976 172.16.25.2

    httpd调度器:

       eno16777736 172.16.25.1

    tomcatA:

       eno16777736  172.16.25.101

    tomcatB:

       eno16777736  172.16.25.102

  1.负载均衡+session sticky

  ①proxy_http_moudle

  nginx反代:

      只需要设置proxy_pass反代即可;

      nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp

     httpd配置:

         在报文首部设置Cookie作为标记,当环境env路由改变后即通过ProxySet stickysession触发,将会话保存

      Proxy balancer://tcsrvs则是我们在httpd中设置的反代多台服务器的组,相当于nginx中的upstream,

      haproxy中的backend。两台主机的域名需要写入到httpd调度器中的/etc/hosts中,否则无法正常解析域名。

     nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _02

     route=tomcatA

     route=tomcatB

    需要我们在后端tomcat服务器的server.xml中的Engine中指定,如

    nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_03

     tomcat服务器配置

     安装tomcat服务

     在本地光盘中有tomcat的安装包

     #yum install -y tomcat tomcat-webapps tomcat-lib tomcat-admin-webapps tomcat-docs-webapps

     自定义tomcat应用

     如:

     #mkdir -pv /testapp2/webapps/ROOT/{WEB-INF,lib,classes}

     #vim /testapp2/webapps/ROOT/index.jsp (设置jsp页面进行测试)

     修改tomcat主配置文件server.xml让其能够通过指定域名访问到我们设置的应用

     nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_04

     nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _05

    

    访问192.168.72.3

    nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_06

   因为进行了session sticky所以一直访问到的都是同一个

   当我们将tomcatB的服务down掉后

    nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _07

   这样就实现了基于proxy_http_module的http模式

  

   ②基于proxy_ajp_module

    ajp的配置于http的不同就在于对端口以及协议的不同。

    需要修改httpd调度器的配置为:

    nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_08

   最好将后端tomcat的关于http的connector注释掉;

   并修改Engine中的defaultHost指向我们设置好的域名

   访问结果如上。

  ③基于mod_jk

   首先,需要在httpd调度器上编译mod_jk,因为默认是不存在的,从网上镜像站点上下载

   tomcat-connectors-VERSION

   #yun install -y "Development tools" "Server Platform Develop"

   安装编译环境。

   #yum install -y httpd-devel

   #tar -xf tomcat-connectors-VERSION.tar.gz

   #cd tomcat-connectors-VERSION/native

   #./configure –with-apxs

   #make -j 4 && make install

   到此,mod_jk便编译完成,可以通过/usr/lib64/httpd/modules/mod_jk进行查看

   

   编写mod_jk配置文件

   在/etc/httpd/conf.d/jk_proxy_tomcat.conf中

   nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _09

   LoadModule装载模块

   JkWorkersFile用于设置任务配置信息

   JkLogFile用于设置日志文件

   JkLogLevel用于设置日志等级

   JkMount到访问到任何数据,都由tcsrvs这个组进行处理,该组设置在workers.properties任务文件中;

   /etc/httpd/conf.d/workers.properties

   nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_10

   任务文件当中需要设置组中所有tomcat服务器的信息,如host,type,port,lbfactor权重等,有多少个

   tomcat服务器则设置多少组。

   worker.tcsrvs.type设置为轮询的方式。

   worker.tcsrvs.balance_workers=tomcatA,tomcatB用于设置负载均衡的服务器列表

   worker.tcsrvs.sticky_session=0表示不支持会话绑定,注意,该行不能省略,否则虽然不出错,但其默认还是绑定;

   若需要会话绑定则需要将0置1即可;

  2.负载均衡+session server

  对tomcat服务器进行负载均衡操作,使用的是httpd调度器的mod_jk形式,关于前端的nginx与httpd,配置同前面一般无二

  在这里就不进行细说了,主要是对后端两台tomcat服务器实现seession server,即将会话全部放在一台服务器上,当tomcat

  服务器需要时则从session server中取,这样的话session server必须设置高可用,否则当session server挂掉后,便无法正常

  提供服务。

  导入session server实现所需要的jar包,下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}

  要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。将这些jar包放置在/usr/share/java/tomcat中。

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_11

  

  在tomcat主配置文件server.xml中设置Context别名,并在该Host上下文中添加session server配置段

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_12    

  Context上下文设置的访问路径path="/test",其应用保存在/testapp2/webapps中,所以需要我们手动进行配置

  #mkdir -pv /testapp2/webapps/{lib,classes,WEB-INF}

  #vim index.jsp (创建jsp文件)

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_13

  将/etc/tomcat/web.xml复制到手动创建应用的WEB-INF中,并添加<distributable/>

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_14

  memcachedNodes为session server的节点,有几台就设几个节点,failoverNodes则是作为备用节点,当n2节点挂掉后

  顶上去的。在这里要说一下,session server是基于memcached实现的,所以必须先安装memcached缓存。

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_15

  设置jvmRoute,该标签需同前面httpd中的一般无二;

  使用8009端口的ajp协议进行访问时,需要将8080端口的Connector上下文注释掉。

  

  到此一台tomcat配置完成,只需要在另一台主机处进行相同的设置即可

  访问结果:

      nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_16

       nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_会话绑定_17

   访问内容的会话ID以及,创建会话时间都相同。

      

  3.负载均衡+session cluster

   session cluster的实现,适用于多个tomcat服务器之间,相互备份对方的session,这样

   每台tomccat的服务器中就拥有所有的session,这样,即便一台tomcat或多台tomcat

   down掉后,只要有一台服务器正常工作,会话就将继续保持,但如果所有的tomcat服

   务器down掉就无法正常利用会话工作。

   session cluster实现方式同session server差不多,不同在于对server.xml中的cluster集

   群的上下文配置。

   如:

   nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _18

   需要进行修改的也就是前半段配置,Membership上下文用于设置cluster之间的组播通信地址,端口,

   以及持续时间,超时时间等;

   Receiver上下文则是用于设置cluster之间互相发送会话数据的IP地址,端口,时间等;需要将IP地址改

   为当前服务器中可用的IP地址;

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_jkajp _19

  后半段配置无需变动。

  nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式_httpmod_20

  将之前的session server相关配置注释掉。

  

  

  

原文链接:https://blog.51cto.com/u_12480612/2055100

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享