2019/06/29 tomcat cluster(05)

在这里插入图片描述
单台主机反代用户请求到后端tomcat主机,有三种方式
nginx 基于http链接器到tomcat
httpd 基于http连接器到tomcat
httpd基于ajp连接器到tomcat 8009端口
都可以把后端主机扩展为多个,从而能够实现反代时做负载均衡
nginx用的是http-upstream module
httpd则使用的是http-prolenm-proxy-modlue协议
还有用ajpconnector、

在这里插入图片描述
要用到负载均衡,使用n3称为tomcat主机,连接器刚才设定的网络上
先同步n3时间 ntpdate 172.16.0.1

在这里插入图片描述
两组程序包给装上,配置地址
在这里插入图片描述
把n2的目录复制到n3上
在这里插入图片描述
在n3主机上一样创建应用
在这里插入图片描述也可以把n2的网页复制过来
在这里插入图片描述
修改n3的网页
在这里插入图片描述
在这里插入图片描述
启动服务
在这里插入图片描述
测试能否访问
在这里插入图片描述
在这里插入图片描述
现在就可以在反代主机上 配置反代应用了,先调整为nginx反代
在这里插入图片描述
在对应的httpd上下文中,使用一个upstream模块
在这里插入图片描述
编辑con.d/ilinux。conf
在这里插入图片描述
无论静态内容和动态内容都代理到后端主机,分别分离代理
在这里插入图片描述
在这里插入图片描述
刷新就会红绿切换
在这里插入图片描述
可以用curl命令测试在这里插入图片描述
在这里插入图片描述
说明是轮询的,后端主机如果是动态应用的话,就不能轮询,只能维持会话,有三种方式
在这里插入图片描述
(1) session sticky
source_ip 基于源地址绑定(比较粗糙,nginx使用iphash算法)
nginx: ip_hash(或者可以hash $request_url)
haproxy: 使用source 调度算法
lvs:使用 sh 调度算法
cookie: 基于cookie绑定 (需要在7层代理上实现)
nginx:使用 hash cookie
haproxy: cookie、
绑定地址有很多问题,所以有下面的方式
(2) session cluster:delta session manager (把两个tomcat主机定义成一个会话集群)
(3) session server:redis(store), memcached(cache)

把两个tomcat主机定义成一个会话集群,依然可以负载均衡调度,sessionn不会变,红绿来回切换
在这里插入图片描述
还有一个方式叫session server
在这里插入图片描述
还可以再加一台主机作为会话保存的主机,比如memcached
现在第一步用nginx实现负载均衡已经搞定了
在这里插入图片描述
采用一致性hash算法,来完成服务器选取的
在这里插入图片描述
使用nginx -s reload
现在访问试试,就都是A了

v
继续编辑应用
在这里插入图片描述
此时hash下cookie,能否实现绑定
在这里插入图片描述
** nginx -s reload
这一次是基于cookie绑定,刚才定义的应用程序会定义成cookie的**
在这里插入图片描述
把调度算法注释了
在这里插入图片描述
在这里插入图片描述
、再次使用reload
轮询访问没有问题,说明之前确实是绑定了

在这里插入图片描述
接下来使用httpd
在这里插入图片描述
这里必须要的模块是balance,才能完成基于httpd的负载均衡的
这个模块实现的功能跟upstream功能类似,先把服务器定义成组,然后定义负载均衡算法
这个balance负载均衡算法有三种
by traffic 根据后端服务器的流量来检查,谁带宽占的少就调度
by request 根据请求调度,相当于给wrr做加权轮询 支持权重
by business 看谁忙,谁闲就接受请求

在这里插入图片描述
在这里插入图片描述
request这种方式就跟轮询一样
balance 需要把被代的服务器定义成组,
定义成组的方式定义使用proxy。用balancer://(固定字符串不能改变,表示调用balacer模块命名组建,相当于upstream后面加个组名是一样的)来定义后面
tcsrvs才是名字,组名

在这里插入图片描述
balancermember来定义它的成员
设定代理功能的某个属性,比如lbmethod调用方法是byrequests

在这里插入图片描述
然后后面配置虚拟主机的时候,里面定义其代理方式的,不再代理到主机,而是代理到balancer://tcsrvs在这里插入图片描述
对于httpd来讲斜线必须存在,用来做映的
不像nginx在location 跟当中的定义

在这里插入图片描述
现在来编辑httpd的配置
在这里插入图片描述
需要在virtual host之外先定义组
proxy balancer tcsrvs
balancermember 定义调度成员
proxy set 定义lbmethod属性 byrequests
下面的proxy set 就不再是proxy pass了应该是 balancer 😕/tcsrvs/

在这里插入图片描述
检查语法,启动服务
httpd -t && systemctl start httpd.service
现在刷新是不会变化的

在这里插入图片描述
在这里插入图片描述
对于使用反代的功能的时候,也有很多属性也可以在balance lbmethod中进行定义,比如权重之类的
前端主机上安装manual,查看文档中的内容,也可以访问互联网

在这里插入图片描述
httpd定义链接的方法也很简单,只需要定义proxy组就可以了,反代的时候反代到组上,整体运用方式并没有和nginx有什么显著的区别
现在配置下ajp连接器,无非也是组,反代成后端主机是ajp接口的

在这里插入图片描述
可以换个名字不然与tcsrvs冲突
在这里插入图片描述
检查语法,启动服务
httpd -t && systemctl restart httpd.service,
测试访问没有问题
这是使用8009端口,ajp连接器的
这是两种后端使用两种不同协议模块的定义,调度到后端去的负载均衡算法

在这里插入图片描述
查看反向代理设置指南的
在这里插入图片描述
在这里插入图片描述
loadfactor 叫调度离子,或者叫负载因子 (定义权重
timeout=1 超时时间间隔为1s中
在这里插入图片描述
甚至可以定义最后的status,加个status用来设置当前主机所处的状态
这些balancermember选项上都可以用

在这里插入图片描述
这个是可以定义很多key=value
在这里插入图片描述
balance 语法
在这里插入图片描述
BalancerMember:
BalancerMember [balancerurl] url [key=value [key=value …]]

proxy能用的value,这边都能用
在这里插入图片描述
status:(诸多状态
D: Worker is disabled and will not accept any requests.(nginx,down,表示禁用了
S: Worker is administratively stopped. 管理中止,也相当于人为的软中止(在haproxy中有很多模式,管理,维护模式,软中止模式
I: Worker is in ignore-errors mode and will always be considered available.关闭健康状态,检查功能
经常用到的status=H
H: Worker is in hot-standby mode and will only be used if no other viable workers are available.
(在nginx上配置主机可以等于backup,等于sorry server,叫做hot-standly)
E: Worker is in an error state. 一直处于不健康状态,手动设置于不健康状态
N: Worker is in drain mode and will only accept existing sticky sessions destined for itself and
ignore all other requests.一旦属于n模式,只有此前曾经保持链接时,把粘性功能启动时,分配到此前主机中,其他的都不接受了,通常这种方式,等会没有链接请求,就可以下线了

在这里插入图片描述
loadfactor:
负载因子,即权重;(不能在反代用,(多台主机才叫负载均衡)只能在负载均衡时用

在这里插入图片描述
最大并发链接数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置负载均衡调度方法,只有在balancer时才可以使用
lbmethod:可用值有三种,(bytraffic,bybusyness,byrequests)
Balancer load-balance method. Select the load-balancing scheduler method to use.
Either byrequests, to perform weighted request counting; @1bytraffic,
to perform weighted traffic byte count balancing; or @2bybusyness,
to perform pending request balancing. The default is @3byrequests.
默认不写也表示轮询的意思

在这里插入图片描述
stickysession 会话粘性 2.4.4之后的版本才能支持
需要借助其他的配置参数才能配置的
Balancer sticky session name. The value is usually set to something like JSESSIONID or
PHPSESSIONID, and it depends on the backend application server that support sessions.
If the backend application server uses different name for cookies and url encoded id
(like servlet containers) use | to separate them.
The first part is for the cookie the second for the path.
Available in Apache HTTP Server 2.4.4 and later.

在这里插入图片描述
在客户端请求时,加上 ROUTID={balancer_worker_route}e等于替换了这个首部的值,并应用这个站点的/,而后才能实现基于cookie的会话粘性
这个时候在session sticky,真正意义上生效起来,
ProxySet stickysession=ROUTEID(在已有的cookie中加入一个名称叫routid。应该是服务器自己的rout符号(tomcatA,tomcatB,在haproxy中也可以使用cookie来给后端主机加上名称
所以客户端再次请求时会强行,在它的cookie中,注入一个routid,如果这次访问是挑选的第一个主机,那么它的值就成了tomcatA,所以以后再来访问时,在cookie中就可以加上,routid的tomcatA,每一次httpd就能判断是谁了
基于这种方式就是基于cookie的会话粘性

在这里插入图片描述
现在试一下
在这里插入图片描述、proxy set表示这个设定对所有主机都有效
等于在每个主机后加一个stickysession=routeid

在这里插入图片描述
重启服务
httpd -t && systemctl restart httpd
curl命令如果基于cookie做粘性的话,默认是不带cookie的
所以用浏览器进行访问

在这里插入图片描述
在这里插入图片描述
所以就能实现会话粘性,这个会话粘性跟你使用的连接器没有关系,ajp也可以这么实现
在这里插入图片描述

	会话粘性的实现方法:
		Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

		<proxy balancer://tcsrvs>
			BalancerMember http://172.18.100.67:8080 route=TomcatA (每个主机的唯一标识符)loadfactor=1
			BalancerMember http://172.18.100.68:8080 route=TomcatB loadfactor=2
			ProxySet lbmethod=byrequests
			ProxySet stickysession=ROUTEID
		</Proxy>

		<VirtualHost *:80>
			ServerName lb.magedu.com
			ProxyVia On
			ProxyRequests Off
			ProxyPreserveHost On
			<Proxy *>
				Require all granted
			</Proxy>
			ProxyPass / balancer://tcsrvs/
			ProxyPassReverse / balancer://tcsrvs/
			<Location />
				Require all granted
			</Location>
		</VirtualHost>	

以后要经常看文档
在这里插入图片描述
对于balancer而言,还可以设定内部启用的状态页,这个状态业类似haproxy的web-gui,能够实现一些软管理功能,可以实现在这个接口下去实现我们的服务器哪个上线,哪个下线
balancer模块有个内建的状态页接口,想起用,就跟启用http接口一样,首先定义location,并设定内建的处理器balancer-manager
定义哪些人能够访问
proxypass 不反代为后端主机,由自己的httpd处理

在这里插入图片描述
在这里插入图片描述
在对应的virtualhost内部加一个location
proxypass 不向后端反代

在这里插入图片描述
httpd -t && systemctl restart httpd 重启
就能够访问了

在这里插入图片描述
在这里插入图片描述
ajp和http两组都显示出来了
点一下,下部分会出现设置
hot-standby=sorryserver

在这里插入图片描述
ignore errors 无视错误
点一下submit,这个主机就变成standby模式了

在这里插入图片描述
如果把tomcatB宕机了
在这里插入图片描述
健康状态监测应该是失败的
现在处于error状态

在这里插入图片描述
现在tomcatA就能使用了
在这里插入图片描述
如果tomcatB在重新上线,就又上线了
在这里插入图片描述
现在就ok了
在这里插入图片描述
curl本身没有cookie的,做了会话粘性也没有用
在这里插入图片描述
这个不能让别人随意访问,应该设定内网主机或者仅管理口
在这里插入图片描述

启用管理接口:
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted

在这里插入图片描述
基于会话做tomcat集群也是可以的
反而会话粘性不常用

Tomcat Cluster
	(1) httpd + tomcat cluster
		httpd: mod_proxy, mod_proxy_http, mod_proxy_balancer
		tomcat cluster:http connector
	(2) httpd + tomcat cluster
		httpd: mod_proxy, mod_proxy_ajp, mod_proxy_balancer
		tomcat cluster:ajp connector
	(3) httpd + tomcat cluster
		httpd: mod_jk
		tomcat cluster:ajp connector
	(4) nginx + tomcat cluster

所以实现把会话保存在memcached,冗余
使用session server功能还是非常重要的

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值