博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/06/12 M 实现haproxy负载均衡功能以及集群管理
阅读量:3926 次
发布时间:2019-05-23

本文共 4149 字,大约阅读时间需要 13 分钟。

**之前讲了haproxy基本操作

回顾:haproxy是一个高性能的 tcp/http reverse(相反) proxy
haproxy的配置文件分为两大段,haproxy.cfg
global 全局
proxies 代理配置段,4部分组成
提供默认配置defaults(为前端,后端或listen提供默认配置)
frontend 类似nginx server 定义如何接受或处理客户端请求,(面向客户端连接建立以后,可以向后端服务器进行转发,这种转发只能成模拟客户端协议转发或者是简单的建立一个信道,这取决于7层还是4层)
listen
backend 后端服务器为组,定义出调度方法的配置,因为是backend,(listen也有这个功能)
**
在这里插入图片描述
**global当中具体有一些指令,有些非常关键的参数,其中由log,maxconn (haproxy支持的最大连接数,和进程本身相关,多数工作在单进程模式下)
回顾下代理配置段的常见参数 proxies:bind(用来绑定监听地址端口),balance(调度算法),default_backend 默认后端
server(可以定义backend后端主机),hash-type
balance调度算法有哪些
roundrobin动态
static-rr静态
leastconn最少链接
first
source
uri
hdr(可以指定自己的HEADER)
url_param
**
在这里插入图片描述
在后端服务器还可以使用server来定义(server依然是配置参数的keywords,配置指令),后端服务器,
server关键词+name唯一标识,这个标识会记录到日志当中,因此至少是当前配置段唯一的标识
address后端服务器主机地址
port端口(如果省略则可以直接跟frontend中监听端口一致)
param可以设定服务器的工作特性,如果多个server都可以使用某个默认,可以使用default-server
如果想把每个服务器的setting设定好,可以放到default-server上
对于服务器怎么做检测也可以在default-server后面直接定义,其他server继承default-server的值就可以了
在这里插入图片描述
对整个haproxy来讲,server的一个参数是有自己专门的配置段的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对主要参数了解即可,
maxconn 当前一个server的最大并发连接数,每个服务器上线在进行测试以后就设定一个合理的值,不要使用默认的,万一这个服务器被分发过来太多请求的话,服务器忙不过来,会每个请求都无法处理
backlog,达到了最大连接数,后面就要跟上排队的长度,超出长度拒绝响应
backup (nginx可以把自己设置成一个sorry server),这个服务器未必只能sorry server ,也可以提供一些降级的服务
超出服务器并发链接请求,可能导致服务器健康检测失败
所以可以做两个服务器集群,一个是正常提供服务的集群,一旦这个集群的服务都无法响应时,可以用另外一个备用集群来处理,而这个备用的内容,不是say sorry,而是仅仅用静态的方式,来给用户呈现一个页面,用户可以点击页面的某些链接来打开其中的描述,只能看,但是不是交互,静态处理的,不是程序,也不能使用数据库查询,对nginx而言,对静态内容响应,只要磁盘IO,网络IO不受问题,单个服务器响应几万个并发不是问题
所以可以提供用户短暂的访问,要交易,就跳出正在维护
这就是降级服务模型
在这里插入图片描述
一旦前端服务器负载过大,可以触发降级操作,可以很多种策略来实现,
帮我们的主机都宕机后才触发,也可以超出配额的direct请求转发到这个上面来,可以做过载保护
nginx引入了过载保护,要用相应模块来实现
事实上,将来真正配置实现的,通常会有一些监控系统来触发保护机制
在这里插入图片描述
check健康状态监测,除了定义好的地址端口,也可以用到专门的地址端口
当 每个server有多个地址的时候,就可以后端服务器做检测,使用别的链接,并不影响正常服务时的带宽
inter每多长时间检测一次,默认单位毫秒
rise 检测几次都ok,才认为是ok的,默认为两次
fail 从ok到fail,要检测3次,都为fail才认为fail
一般来讲服务器检查状态只有两种,ok,problem
check到底是7层还是4层
7层可以请求特定资源,要求回应码是多少
4层检测可以检测对方的端口能响应就是可以的
3层检测主机连接就可以了
在这里插入图片描述
而对于haproxy,还有其他参数来定义检测方法
在这里插入图片描述
httpchk,7层检查方式,smtpchk ,如果不做4层检测,默认就是7层检测,只要tcp3次握手的第一次,主要能得到对方的回应,就认为是对方服务是ok的
在这里插入图片描述
cookie,为每一个后端server指定一个cookie值。,一个静态cookie值,这时候haproxy集群有两个server,如果这两个server都能为用户设定cookie,即便不能设定cookie也没事,我们server可以自己设定,如果用户请求第一次发来时,一个链接发到服务器时,后端服务器有可能自己设定cookie,响应报文中使用set-cookie去设定,对于这种设定的结果,我们可以尝试着在中间的代理服务器上,把这个set-cookie的值上进行修改,这个value在客户端收到以后,会赋值给自己的cookie首部,再请求时都会带这个值,
cookie的值就是后面服务器的标识符,这个标识符就是使用cookie参数给定的value
在这里插入图片描述
后端服务器没有设定cookie,中间代理服务器也可以设定cookie
所以同一个人再次请求的时候,也会带有cookie,哪个server提供的服务
来自同一个cookie请求发送给同一个服务器,这就是基于cookie的会话联系
除了server参数
还有全局的专用的cookie
在这里插入图片描述
nginx有个down,服务器并没有不可用,但是可以人为down掉的,比如灰度发布,down掉,更新之后再发布上去,而haproxy是用disabled
在这里插入图片描述
redir 重定向,能够把代理发给此server的get,head的请求重定向至指定的url,加个映射以后,后端服务器会把请求重定向或者映射到其他服务器上去
现在简单演示一下效果,既然能做健康性检测,后端服务器down了,就不会调度了
在这里插入图片描述
在这里插入图片描述
现在就是权重的效果
在这里插入图片描述
现在把一个服务器下线
在这里插入图片描述
现在是每两秒一次检测,检测三次失败
在这里插入图片描述
在这里插入图片描述
检测两次成功,就正常调度
在这里插入图片描述
也可以指定每隔几秒检查一次,inter 1000ms
一次就是rise成功,两次就fall,针对服务器来讲,也可以设定maxconn 2000,也可以指定后面对吗队列,backlog 500
在这里插入图片描述
可以标记一个disabled,这是server背后的参数的指令和参数的使用方法,
redir 重定向
在这里插入图片描述
在这里插入图片描述
修改成这样
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
出现问题,查看文件
在这里插入图片描述
在这里插入图片描述
也不能转
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总共server的参数,其他的参考文档
接下来是haproxy内建的工具叫做内置的统计页接口,内置的状态页(nginx也有一个status,haproxy也有,不光显示状态数据,还能显示统计数据,所以叫stats,)
在这里插入图片描述
在这里插入图片描述
想要使用,可以在frontend,backend使用stats enable,即可生效,可以定义一个server一样,在backend就可以定义,要想生效,一定在可以被调度到此backend能访问的接口上
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

修改配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就成功了
pid,详细进程编号
uptime 进程运行多久了
system limit 最大能打开多大内存
maxconn最大并发链接4000
current conns当前连接数
running tasks当前运行任务
在这里插入图片描述
queue 队列,session rate会话速率,session会话统计数据,btytes 以字节为单位的进站出站统计数据,denied拒绝请求响应,eroor错误的请求或响应以及
warnings警告的
server端
在这里插入图片描述
eshop定义的前端,websrv定义的后端
在这里插入图片描述
在这里插入图片描述
当前正在活动的,备用的对应
在这里插入图片描述
当前正在允许,马上要宕了,正在宕的过程中
在这里插入图片描述
、活动的,当前正在down状态,目前正在启动
在这里插入图片描述
可以是活动或是备用的,当前处于down状态
在这里插入图片描述
软停机状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
服务器定义成backup以后,可以stop掉,查看状态变化
在这里插入图片描述
在这里插入图片描述
完全down掉了
在这里插入图片描述
在这里插入图片描述
因为现在定义是检查三次,会查看到状态变化
在这里插入图片描述
L4ok表示底下4层检查在这里插入图片描述
act表示是不是active状态的,-表示不是active的
bck表示backup 主机
chk健康状态检查次数,
dwn代表down了几次
dwntime,代表down的累计时长
在这里插入图片描述
可以尝试修改状态页的配置
可以把uri进行修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用刚才定义的uri
在这里插入图片描述
这个访问页面还可以做basic认证
在这里插入图片描述
realm的定义弹出对话框 的时候可以说明是 什么
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
认证成功还可以用另外一个指令。
在这里插入图片描述
管理级别 接口
在这里插入图片描述
cond,条件,通常是每一个用户的ACL访问控制列表
在这里插入图片描述
只要验证了,任何人都能使用这个接口
在这里插入图片描述
可以加一个认证成功,能不能访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
force down强制下线
kill sessions杀死所有会话
在这里插入图片描述
在这里插入图片描述
对于统计接口来讲,放在80服务,有时候并不安全,可以自己选择一个listen来定义
在这里插入图片描述
监听1080,仅用于,状态页
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的version是一个很严重的信息泄露,可以隐藏掉
在这里插入图片描述
也可以设定stats页面自动刷新多长时间
在这里插入图片描述
在这里插入图片描述
下一个参数是maxconn,再某一个前后端设置,i定义最大并发链接
在这里插入图片描述
可以在frontend定义
在这里插入图片描述
在这里插入图片描述
刷新页面得出4000
在这里插入图片描述
如果没有修改,将会继承默认值3000
在这里插入图片描述
一般来讲frontend的maxconn,不应该大于各后端server的maxconn之和
mode代表haproxy的工作模式
在这里插入图片描述
**bind监听某个端口
balance调度算法
mode t’c’p
**
先用ssh进行演示
leastcon最少链接,代表长连接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有向后端直接进行转发
改成这个
在这里插入图片描述
就可以了
在这里插入图片描述
在这里插入图片描述
说明这样配置是没有问题的,现在直接使用3306端口试试
在这里插入图片描述
在这里插入图片描述
现在是健康的
在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述
![在这里
现在就链接不上去了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载地址:http://dbkgn.baihongyu.com/

你可能感兴趣的文章
poj 1436 Horizontally Visible Segments(线段树成段覆盖问题+简单hash),好题,覆盖问题想法较难
查看>>
hdu 3308 LCIS(线段树单点更新+区间合并)中等难度的题目
查看>>
poj 3042 Grazing on the Run(区间DP,三维DP)
查看>>
poj 1991 Turning in Homework(区间DP,大区间推出小区间的思想)好题,想法很独特
查看>>
codeforces 395 B1. iwiwi(待续)
查看>>
hdu 4283 You Are the One(区间DP)题目转换难,状态难,。。。
查看>>
poj 2299 Ultra-QuickSort(树状数组+离散化的题目)据说是简单题,不过还是觉得好难。。。
查看>>
poj 2352 Stars(简单树状数组)此题也可以用线段树来做
查看>>
树状数组详细解释
查看>>
hdu 1596 find the safest road(最短路求最大值的题目,有两种稍微不同的处理方式)
查看>>
poj 1195 Mobile phones(二维的树状数组)得好好看。。。
查看>>
poj 2481 Cows(树状数组)题目有陷阱,转换后与stars类似
查看>>
poj 3067 Japan(树状数组,注意题目向树状数组的转换)
查看>>
A. On Segment's Own Points
查看>>
codeforces 397B. On Corruption and Numbers
查看>>
问题 E : 坤哥的难题 (题目本来觉得很难,但是数据很水,居然简单的for就AC)
查看>>
问题 F : 8 (做了这道题目,我才发现原来汉语的题目是如此的难懂)
查看>>
SqlMapConfig.xml中的setting属性设置
查看>>
hdu 3172 Virtual Friends(简单并查集)
查看>>
find the most comfortable road(并查集加贪心)
查看>>