Nginx/Httpd负载均衡tomcat配置教程

  在前一篇博客中我们聊了下用Nginx和httpd对后端tomcat服务做反代相关配置,回顾请参考https://www.jb51.net/article/191277.htm;今天我们来聊一聊用Nginx和httpd对tomcat集群做负载均衡的配置以及需要注意的点;在前边的演示和配置都是以单台tomcat来配置使用;但是在生产中单台tomcat实在支撑不了大规模的访问,这个时候我们就需要考虑把多台tomcat做成集群对外提供服务;多台tomcat做成集群对外提供服务就必然要有一个调度器来对客户端的请求做调度,常用的调度器有nginx httpd haproxy lvs等等;用这些调度器来对tomcat做负载均衡的配置和对其他web服务器做负载均衡的配置没有本质的不同;我们都可以把tomcat当作web服务器来配置就好;

  1、环境准备

  运行docker 启动两个tomcat容器当作后端tomcat server 并且把两台tomcat容器的网页目录分别用存储卷的方式映射到/tomcat/doc/tomcat1和tomcat1目录

  提示:以上就运行了两个tomcat容器,分别是tct1和tc2,并且我们把/usr/local/tomcat/webapps/myapp映射到宿主机的/tomcat/doc/tomcat1和tomcat2,这样做我们就可以直接把网页脚本放到宿主机上的这个目录从而实现把网页部署到tomcat的默认虚拟主机上;

  编辑两个容器的主页文件内容

  提示:以上分别给tomcat1和tomcat2提供了一个测试主页;

  现在分别放tomcat1和tomcat2看看对应主页是否能够访问到

  提示:可以看到tomcat1和tomcat2都能够访问到,到此后端tomcat的环境就准备好了;接下来我们来配置nginx来对他们做负载均衡;

  2、配置nginx对tomcat做负载均衡

  提示:以上配置就是把两台tomcat容器归并为tcsevs组,然后反代/的访问到这个组上即可。这样配置默认是轮询的;

  验证:访问宿主机上的80端口看看是否分别能够访问到后端两台tomcat容器提供的主页?

  检查nginx配置文件语法格式并启动nginx

  访问宿主机的80端口,看看是否能够访问到后端tomcat提供的页面?

  提示:可以看到访问宿主机的80端口是能够正常访问到后端tomcat服务器上的,并且也看出了默认轮询调度的效果;但是这里存在一个问题,同一用户访问宿主机的80端口,给我们响应的结果session id都不同,这意味着nginx并没有追踪到用户的状态信息,原因是因为http请求本来就是无状态的,为了让服务记录用户的状态信息,在nginx上我们可以基于源ip做调度,什么意思呢,就是同一源ip地址,nginx都把该请求调度到同一台后端server上,使得同一用户访问的状态信息始终调度到同一后端server上;

  nginx基于源ip做会话保持

  提示:ip_hash和hash $remote_addr都表示对源ip进行哈希计算,然后把取得到结果和总权重做模运算,结果落到那个节点,就调度到那个节点;什么意思呢,如上所示,后端server有两个,且权重都为1,那么他们的权重和就是2,ip_hash和hash $remote_addr就是把客户端的ip地址的前三段进行hash计算,然后把得到的值再和权重和做取模运算,很显然取模后端结果要么是0要么是1,如果取模后的结果是1,那么nginx基于它内部的对应关系,把该请求就调度到tomcatB或者tomcatA;

  测试:重启niginx ,访问宿主机的80端口看看是否都把请求调度到同一后端server上?

  提示:可以看到现在访问宿主机的80端口就没有在轮询了,而是始终调度到tomcatA这台server上进行响应;但是我们访问127.0.0.1的80端口它又调度到tomcatB上去了,这是因为nginx的调度算法中hash $remote_addr 和ip_hash是把IP地址的前24位做hash,所以如果你的IP前三段相同时,nginx它会认为是和nginxserver是同一局域网,所以它会把请求调度到同一局域网之前来请求过的后端server上进行响应;当然除了我们可以对源地址做hash,我们也可以对其他首部做hash计算,原理都是类似的,都是把对应首部的值做hash计算,然后同权重和做取模运算;然后根据nginx内部的对应关系,把取模后端结果相同的请求调度到同一后端server,就是基于这样的原理,把客户端和后端server绑定到一起实现了会话绑定;

  httpd对tomcat做负载均衡

  httpd做负载均衡器,需要确认httpd是否开启了proxy_http_module、proxy_module 、proxy_balancer_module如果需要用到ajp还需要确定proxy_ajp_module模块是否启用,以及调度算法的三个模块lbmethod_bybusyness_module 、lbmethod_byrequests_module、lbmethod_bytraffic_module;以上模块对于调度算法来说用到那个启用那个也行,对于http或者ajp也是一样的;用得到就启用,用不上不启用也没关系;

  提示:可以看到我们需要用的模块都是启用了的;

  配置httpd对后端tomcat 做负载均衡

  提示:从上面的配置,其实感觉和nginx的配置逻辑很相似,首先把后端server归并成一个组,然后反代时把请求代理到定义的组上即可;这里说一下调度算法吧,proxyset lbmethod 用来指定调度算法的,默认不写是使用byrequests,这个算法就是httpd里的轮询调度算法,当然在每个balancermember 后面加上权重,就成了加权轮询了;除此调度算法,我们还可以使用bytraffic,这个调度算法是根据和后端server的传输流量来调度,如果某个服务器传输流量很大,那么他会把请求往传输流量相对小的服务器上调度;bybusyness这个调度算法是根据后端server的繁忙程度来调度;类似nginx里的least_conn最少连接算法;对balancermember 我们也可以向nginx 那样设置单独属性,只需要在后面写上对应的属性即可;常用的属性有status 这个属性表示表示对应balancermember是处于什么状态,其中对status有6种取值;D表示禁用对应server,不提供任何请求;S表示人工手动标识为不可用;I表示强制上线模式(强制忽略错误模式);H表示热备模式(相当于nginx里的backup,只有组里的其他server都不可用时,它才会被激活,用于say sorry);E表示强制处于错误模式(即便没有错误也要让他处于有错误);N表示排干模式;除了status来指定balancermember的状态,还可以使用loadfactor来指定权重,类似于nginx里的weight;

  停掉nginx,检查httpd 的配置文件语法,如果没有问题就启动httpd

  访问httpd提供的服务,看看是否访问到后端tomcat的页面

  提示:可以看到和nginx的访问一样,都可以实现轮询;

  httpd基于cookie对后端tomcat做会话粘性

  提示:以上配置表示给客户端请求cookie首部添加一个标识,ROUTEID=%{BALANCER_WORKER_ROUTE}e表示,我们指定的ROUTEID标识的值为balancermember 后面的route属性指定的值;env=BALANCER_ROUTE_CHANGED表示,如果我们指定的route的值发生变化时,它需要重新调度;简单讲就是给cookie信息打标签;proxyset stickysession=ROUTEID 表示给该组所有成员设置会话粘性KEY的名称为ROUTEID,这个值通常要和上面的set-cookie后面的KEY对应;如果把它写到每个balancermember后面表示单独给某个server设置会话粘性KEY的名称;如果写在proxy配置段里需要用proxyset指令来设置,表示给该组的所有member设置 stickysession;简单讲就是声明以那个key来当做会话粘性的基准来做调度;这个逻辑和haproxy里面的会话保持设定类似;有关haproxy配置会话保持可以参考https://www.jb51.net/article/33639.htm;

  测试:检查httpd的配置文件语法,如果没有问题就重启httpd,然后访问httpd看看会有什么变化

  用curl 来模拟第一次访问httpd服务器,看看响应首部有什么变化?

  提示:可以看到访问httpd服务器,在响应首部会多一个set-cookie首部,并且该首部的的值就是我们之前在配置文件中配置的KEY和value;set-cookie首部主要是在浏览器下次请求时,它会把set-cookie首部的值用cookie首部携带去访问服务器,这样一来,服务器就可根据客户端请求报文的cookie的值,来分析本次请求是那个客户端发送过来,后续服务端该怎么调度;

  用浏览器访问,看看客户端后续的请求,是不是把第一次访问中的set-cookie的值拿上去请求服务端?

  提示:可以看到浏览器第一次访问,服务器会在响应首部中添加一个set-cookie的首部;这个首部的值就是ROUTEID是目前响应我们的后端server上的route的值;

  提示:可以看到客户端在请求首部cookie中,把之前set-cookie中的值都携带过去了;此时httpd收到客户端请求就可以根据设置的stickysession 指定的KEY来判断该把对应请求发送到那个后端server上进行响应了;这样一来,只要客户端的cookie不变,那么它每次访问服务端都会以cookie首部的值去告诉服务端该调度到那台后端server上;

  用curl模仿客户端请求携带cookie访问服务端

  提示:可以看到当我们使用curl模仿客户端访问携带cookie时,在响应首部就不会在给我们发set-cookie首部(这里的set-cookie是指和我们在服务器设定相关的首部),并且我们携带不同ROUTEID的cookie,它会根据我们携带的ROUTEID的值把我们调度到不同的后端server上进行响应;对于httpd负载均衡代理后端tomcat用ajp的配置方式和http的配置方式一样的,不同的只是把后端server的http协议修改成ajp,后端tomcat的端口修改成ajp协议监听的端口即可,默认tomcatajp协议监听在8009端口;

  配置httpd后端管理界面页

  提示:以上配置表示启动httpd管理页面,并绑定到/manager-page这个uri上,对于/manager-page这个uri不做任何代理,并且该rui只能允许ip地址为192.168.0.232的主机访问,其他主机都没有权限,包括服务器本身;

  验证:用非192.168.0.232的主机访问192.168.0.22/manager-page看看是否能够访问到?

  提示:可以看到用192.168.0.22去访问,提示403没有权限;

  用192.168.0.232去访问,看看是否能够访问到管理页面?

  提示:用192.168.0.232上的浏览器上可以正常访问到httpd的管理页面的;

  动态修改tomcat1的权重

  提示:正因为这个页面可以动态的更改后端服务器的属性,所以通常需要做访问限制;

到此这篇关于Nginx/Httpd负载均衡tomcat配置的文章就介绍到这了,更多相关Nginx/Httpd负载均衡tomcat配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nginx为Tomcat服务器作反向代理的配置教程

    web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西. 但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景. apache用的越来越少

  • Nginx+Tomcat的服务器端环境配置详解

    Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK安装: #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/ 下. #然后配置

  • Linux下Tomcat+Nginx服务器环境安装配置的简明教程

    一.安装 1.安装JDK 下载的jdk文件为:jdk-6u45-linux-x64.bin,执行如下命令进行安装: #./jdk-6u12-linux-i586.bin 2.安装tomcat: #tar zxvf apache-tomcat-6.0.18.tar.gz #mv apache-tomcat-6.0.29 tomcat 这里我将解压后的apache-tomcat-6.0.29重命名为了tomcat方便操作. 3.配置环境变量: 编辑/etc下的profile文件,加上如下内容: JA

  • tomcat+nginx域名配置方法

    大多数时候我们一台服务器会放置多个tomcat,这时如何通过域名的方式(不加端口号)访问tomcat下的某个项目,通常情况下是修改tomcat端口为80,但对多tomcat有很多呕病,比如你要解决80端口被占用的情况,本文就不细说了. 下面说说如何通过nginx代理的方式进行域名访问 找到nginx/conf/nginx.conf,做如下关键配置: upstream xx{ #配置upstream节点,这里节点名为"xx" server 116.255.111.111:8080; }

  • 详解nginx 配置多个tomcat共用80端口

    场景:项目1放在tomcat1中,项目2放在tomcat2中,两个tomcat放在同一台服务器上,需要共享80端口访问 注意:这里和集群部署是不同的,集群部署是一个项目放在多个tomcat中. 这里通过nginx做反向代理,nginx请到http://nginx.org/en/download.html自行下载, 修改conf/nginx.conf中的server如下: server { listen 80; server_name 192.168.1.197; #charset koi8-r;

  • Nginx/Httpd反代tomcat配置教程

    在上一篇博客中,我们了解了tomcat的server.xml中各组件的用法和作用:其中对于tomcat连接器来说,它分三类,一类是http连接器,一类是https连接器,一类是ajp连接器:通常tomcat作为应用服务器,我们不建议也不应该让tomcat直接面向客户端提供服务:因此进入tomcat的访问就只有其他反代服务器的请求了:如果说tomcat使用其他反代服务器对外提供服务,那么对于https的访问就应该由代理服务器端来实现,从代理服务器到tomcat的访问,我们应该还是使用http或者a

  • windows下nginx+tomcat配置负载均衡的方法

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Nginx 安装Nginx教程 2.配置两个Tomcat 在本机上配置两个Tomcat,分别为tomcat7-8081.tomcat7-8082. tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:this is 8081 port tomcat7-8082访问

  • Nginx/Httpd负载均衡tomcat配置教程

    在前一篇博客中我们聊了下用Nginx和httpd对后端tomcat服务做反代相关配置,回顾请参考https://www.jb51.net/article/191277.htm:今天我们来聊一聊用Nginx和httpd对tomcat集群做负载均衡的配置以及需要注意的点:在前边的演示和配置都是以单台tomcat来配置使用:但是在生产中单台tomcat实在支撑不了大规模的访问,这个时候我们就需要考虑把多台tomcat做成集群对外提供服务:多台tomcat做成集群对外提供服务就必然要有一个调度器来对客户

  • Nginx四层负载均衡的配置指南

    一.四层负载均衡介绍 什么是四层负载均衡 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器. 以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器.TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作.在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,

  • 使用nginx进行负载均衡的搭建全过程

    目录 1. nginx负载均衡介绍 2. nginx负载均衡策略 2.1 轮询 2.1.1 普通轮询方式 2.1.2 权重轮询方式 2.2 最少连接 2.3 ip hash 3. nginx负载均衡搭建示例 3.1 tomcat配置 3.2 nginx配置 总结 1. nginx负载均衡介绍 nginx应用场景之一就是负载均衡.在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率:另外如果其中某一台服务器挂

  • 简单测试Apache是如何完成负载均衡策略配置

    随着访问量的不断提升,以及对响应速度要求的苛刻,进行负载均衡设置就显得尤为重要了.公司的系统在最初设计的时候就已经考虑到了负载均衡的规划,www静态服务器配置了两台,由于初期项目时间紧,并且访问量并不高,所以当时只用了一台,另一台在内网中,只是进行了同步,并为发挥出效用来.此次就是对负载均衡的一个简单测试. 先介绍一下apache mod_proxy_balancer的几个配置规则: 将Apache作为LoadBalance前置机分别有三种不同的部署方式,分别是: 1 )轮询均衡策略的配置 进入

  • Nginx搭建负载均衡集群的实现

    (1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策略 nginx的负载均衡用于upstream模板定义的后端服务器列表中选取一台服务器接收用户的请求.一个基本的upstream模块如下: upstream [服务器组名称]{ server [IP地址]:[端口号]; server [IP地址]:[端口号]; .... } 在upstream模块配置

  • 使用nginx做负载均衡的模块解读

    使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 nginx 的负载均衡功能依赖于 ngx_http_upstream_module模块,所支持的代理方式有 proxy_pass(一般用于反向代理),fastcgi_pass(一般用于和动态程序交互),memcached_pass,proxy_next_upstream,fastcgi_next_p

  • springboot整合Nginx实现负载均衡反向代理的方法详解

    目录 一.百度百科 二.Nginx作为web服务器 三.Nginx处理请求逻辑图 四.Nginx的优点 五.Nginx应用场景 1.反向代理 2.负载均衡 3.动静分离 六.Nginx的常用命令 1.启动 2.从容停止 3.快速停止 4.强制停止 5.重启 6.重启Nginx服务 七.Nginx配置文件 八.Nginx 配置实例-反向代理实例 1.实现效果 2.准备工作 3.访问过程的分析 4.具体配置 5.最终测试 九.Nginx 的原理 1.mater 和 worker 2.worker 如

  • 详解Linux系统配置nginx的负载均衡

    详解Linux系统配置nginx的负载均衡 负载均衡的几种方式: 1.轮询:默认按照时间顺序对所有服务器一个一个的访问,如果有服务器宕机,会自动剔除: 2.weight:服务器的方位几率和weight成正比,这个可以在服务器配置不均的时候进行配置: 3.ip_hash:对每个请求的ip进行hash计算,并按照一定的规则分配对应的服务器(可解决session共享): 4.fair:按照每台服务器的响应时间(rt)来分配请求,rt知道优先分配: 5.url_hash:按照访问url的hash值来分配

  • Nginx实现负载均衡的项目实践

    目录 一.Nginx介绍 二.Nginx特点 三.Nginx负载均衡 3.1 认识 upstream 模块 3.2 Nginx负载均衡策略 3.3 Nginx负载均衡实例 总结 一.Nginx介绍 Nginx是一款高性能的Http和反向代理服务器,也是一个IMAP/POP3/SMTP服务器(电子邮件代理),最早开发这个产品的目的之一也是作为邮件代理服务器.因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗及其高并发性能强而广泛应用于各种生产部署之中.而且nginx是基于事件驱动模型(ep

随机推荐