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反代即可;

      QQ截图20171225113528.jpg

     httpd配置:

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

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

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

     QQ截图20171225113638.jpg

     route=tomcatA

     route=tomcatB

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

    QQ截图20171225114805.jpg

     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让其能够通过指定域名访问到我们设置的应用

     QQ截图20171225114455.jpg

     QQ截图20171225114612.jpg

    

    访问192.168.72.3

    QQ截图20171225114911.jpg

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

   当我们将tomcatB的服务down掉后

    QQ截图20171225115116.jpg

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

  

   ②基于proxy_ajp_module

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

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

    QQ截图20171225115703.jpg

   最好将后端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中

   QQ截图20171225153549.jpg

   LoadModule装载模块

   JkWorkersFile用于设置任务配置信息

   JkLogFile用于设置日志文件

   JkLogLevel用于设置日志等级

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


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

   QQ截图20171225153926.jpg

   任务文件当中需要设置组中所有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中。

  QQ截图20171227005339.jpg

  

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

  QQ截图20171227005213.jpg    

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

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

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

  QQ截图20171227132948.jpg

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

  QQ截图20171227005510.jpg

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

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

  QQ截图20171227005304.jpg

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

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

  

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

  访问结果:

      QQ截图20171227004622.jpg

       QQ截图20171227004641.jpg

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

      

  3.负载均衡+session cluster

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

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

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

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

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

   群的上下文配置。

   如:

   QQ截图20171227142840.jpg

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

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

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

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

  QQ截图20171227142912.jpg

  后半段配置无需变动。

  QQ截图20171227142941.jpg

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

  

  

本文转自 wujunqi1996 51CTO博客,原文链接:http://blog.51cto.com/12480612/2055100



相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
18天前
|
前端开发 应用服务中间件 nginx
使用Docker快速搭建Web服务器Nginx
本文指导如何使用Docker快速搭建Nginx服务器。首先,通过`docker pull`命令获取Nginx镜像,然后以容器形式运行Nginx并映射端口。通过挂载目录实现本地文件与容器共享,便于自定义网页。使用`docker ps`检查运行状态,访问IP:8088确认部署成功。最后,介绍了停止、删除Nginx容器的命令,强调Docker简化了服务器部署和管理。
35 0
|
20天前
|
数据可视化 应用服务中间件 网络安全
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
Nginx Proxy Manager是一款强大的代理服务器管理工具,提供简单直观的界面来配置和管理Nginx代理服务器,帮助用户轻松提升配置的简洁性和便捷性。
41 0
简单易用的Nginx代理管理工具:体验便捷配置、高效管理
|
24天前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
175 0
|
1月前
|
弹性计算 算法 应用服务中间件
倚天使用|Nginx性能高27%,性价比1.5倍,基于阿里云倚天ECS的Web server实践
倚天710构建的ECS产品,基于云原生独立物理核、大cache,结合CIPU新架构,倚天ECS在Nginx场景下,具备强大的性能优势。相对典型x86,Http长连接场景性能收益27%,开启gzip压缩时性能收益达到74%。 同时阿里云G8y实例售价比G7实例低23%,是Web Server最佳选择。
|
2月前
|
网络协议 Unix 应用服务中间件
如何进行 Nginx HTTPS服务器搭建
【2月更文挑战第6天】
58 0
|
2月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
2月前
|
负载均衡 JavaScript 应用服务中间件
强大的WEB服务器-Nginx
强大的WEB服务器-Nginx
27 0
|
2月前
|
存储 弹性计算 API
ECS快照问题之绑定oss失败如何解决
阿里云ECS用户可以创建的一个虚拟机实例或硬盘的数据备份,用于数据恢复和克隆新实例;本合集将指导用户如何有效地创建和管理ECS快照,以及解决快照过程中可能遇到的问题,确保数据的安全性和可靠性。
|
2月前
|
Kubernetes 应用服务中间件 nginx
K8S Pod Sidecar 应用场景之一 - 加入 NGINX Sidecar 做反代和 web 服务器
K8S Pod Sidecar 应用场景之一 - 加入 NGINX Sidecar 做反代和 web 服务器
|
12天前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
20 0