当前位置:网站首页>HAproxy:负载均衡
HAproxy:负载均衡
2022-08-09 11:44:00 【focus_lyh】
简介
HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
摘录地址:https://www.bilibili.com/read/cv13811038
一、拓扑图
二、配置部署
2.1 安装
yum -y install haproxy
2.2 配置
2.2.1 基础配置
vim /etc/haproxy
...
配置文件详解
HAproxy配置文件(haproxy.cfg )主要由5部分组成,但有些部分并不是必须的
- global 全局配置段进程,安全配置,性能调整,Debug参数
- defaults 默认配置段为frontend, listen, backend提供默认配置
- frontend ACL配置段此部分用于设置接收用户请求的前端虚拟节点,并根据ACL规则直接指定要使用的后端backend
- backend 真实集群配置段此部分用于设置群集后端服务集群的配置,处理前端用户的请求,添加真实的服务器
- listen 代理配置段用来设置haproxy代理服务页面,监听整个后端集群状态
全局配置 global
global
log 127.0.0.1 local0 日志输出配置,所有日志都记录在本机,通过local0输出
#log 127.0.0.1 local0 notice local0代表日志设备,info,notice代表日志级别。
#log 127.0.0.1 local0 info
maxconn 4096 #每个HAproxy进程的最大连接并发数
chroot /usr/local/haproxy #改变当前工作目录,软件安装目录
uid 99 #所属运行的用户uid,也可以设置运行HAproxy进程的用户
gid 99 #所属运行的用户组gid,也可以设置运行HAproxy进程的用户和组
daemon #以后台形式运行ha-proxy
nbproc 3 #启动3个ha-proxy进程,可以设置多个进程提高性能
要小于服务器的CPU内核数,过多的进程可能会导致进程崩溃
pidfile /usr/local/haproxy/run/haproxy.pid #pid文件位置
debug #调试模式,输出启动信息到标准输出
默认的全局配置 defaults
defaults
log global #集成全局配置中的日志格式
mode http #所处理的类别(#7层 http;4层tcp) tcp模式一般用于,SSL,SSH,SMTP,MySQL等
option httplog #日志类别http日志格式
option http-server-close #每次请求完毕后主动关闭http通道
option dontlognull # 不记录健康检查的日志信息
option forwardfor except 127.0.0.1 如果后端服务器需要获得客户端真实ip需要配置的参数
可以从http header中获得客户端ip
option redispatch #serverID对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
maxconn 20480 #最大连接数
stats refresh 30 统计页面刷新间隔
retries 3 3次连接失败就认为该服务不可用
balance roundrobin # rr 轮询负载均衡
#balance source # source 轮询负载均衡
#balance leastconn # 最小连接的负载均衡方式,推荐在Mysql、LDAP等情况下使用
timeout connect 5000 连接超时
timeout client 50000 客户端超时
timeout server 50000 后端服务器超时
timeout check 2000 设置对后端服务器的检测超时时间,默认单位是毫秒
timeout http-request 10s
虚拟前端部分 frontend
frontend www
bind *:80 | 0.0.0.0:80 只能在frontend和listen部分进行定义,用于定义一个或几个监听的套接字
bind 主机名|IP地址|*:port interface <ens33>(可选)
option httplog #启用日志记录http请求
option forwardfor #通过X-Forwarded-For信息,来记录客户端来源IP
option httpclose #表示在客户端和服务器端完成一次连接请求后,HAproxy将主动关闭此TCP连接
log global
default_backend web #指定默认的后端服务器池,指定后端真实服务器。1234567
真实服务器集群部分 backend
backend web 使用backend关键字定义名为web的后端真实服务器组
mode http
option loghttp
option redispatch 如果后端服务器发生故障,会通过此参数,
将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常
option abortonclose 此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接
balance roundrobin 定义负载均衡算法
cookie SERVERID 表示允许向cookie插入serverid。
每台服务器的serverid可在下面的server关键字中使用cookie关键字定义
option httpchk GET /index.html 启用http的服务状态检测功能
option httpchk HEAD /index.html HTTP/1.1\r\nHost:\ www.xxx.com 头部检测格式
server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 192.168.10.22:9000 cookie server2 weight 6 check inter 2000 rise 2 fall 3
注释如下:
#服务器定义web1,cookie表示serverid为web1
#check inter 2000 检测心跳频率
#rise 3 是三次正确认为服务器可用 fall 3 是三次失败认为服务器不可用
#weight代表权重,backup为备份节点
代理页面监听部分 listen
listen web_stats #通过listen定义了一个名为“web_stats”的监控页面
bind 0.0.0.0:80 #此处可以设置监听页面的端口号,可以是任意端口号
log global
mode http
stats refresh 30s #设置HAproxy监控统计页面自动刷新时间
stats uri /haproxy-stats #设置HAproxy监控统计页面的URL路径,
stats realm welcome logn\ Haproxy #设置登录HAproxy监控统计页面时,密码框上的文本提示信息
stats auth admin:123.com #设置登录HAproxy统计页面的用户名和密码,可以为监控页面设置多个用户名和密码,每行一个
#stats auth shm:123.com
stats hide-version #用来隐藏统计页面上HAproxy的版本信息
stats admin if TURE #可以在监控页面上手工启用或禁用后端真实服务器。
2.2.2 健康检查
http健康检查方式注解GETclient请求服务器资源,服务器返回对应资源HEAD只请求响应报文中的HTTP头部POST将客户端的数据提交到服务器PUT从客户端向服务器传送的数据代替指定的文档内容DELETE删除,请求服务器删除 request-URI 标识资源MOVE请求服务器将指定页面转移到另外网络。
1、通过监听端口进行健康检测 通过监听端口只会去检查后端server的端口,并不能保证服务的真正可用。
listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
2、通过URI获取进行健康检测,用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。
listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk GET /index.html
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
3、通过request获取的头部信息进行匹配进行健康检测 。这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。
listen http_proxy 0.0.0.0:80
mode http
cookie SERVERID
balance roundrobin
option httpchk HEAD /index.jsp HTTP/1.1\r\nHost:\ www.xxx.com
server web1 192.168.1.1:80 cookie server01 check
server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
2.3 启动服务
systemctl start haproxy
systemctl enable haproxy
边栏推荐
- win10右键文件,一直转圈
- 【面试高频题】可逐步优化的链表高频题
- TIC2000系列处理器在线升级
- Oracle Database Architecture
- wpf实现简易画板功能(带截取画板,签名截图等等)
- [Essence] Analysis of the special case of C language structure: structure pointer / basic data type pointer, pointing to other structures
- 电解电容漏电流及均压
- BeanFacroty和FactoryBean到底是什么?AppliacationContext它又是什么?
- 在北京参加UI设计培训到底怎么样?
- IDEA close/open reference prompt Usages
猜你喜欢
WPF implements a MessageBox message prompt box with a mask
log4net使用指南(winform版,sqlserver记录)
结构体知识点整合(前篇)
Fapi_StatusType Fapi_issueProgrammingCommand使用注意事项
How tall is the B+ tree of the MySQL index?
Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接
2022 全球 AI 模型周报
wpf实现简易画板功能(带截取画板,签名截图等等)
Win10调整磁盘存储空间详解
[Interview high-frequency questions] Linked list high-frequency questions that can be gradually optimized
随机推荐
【Basic model】Transformer-实现中英翻译
MySQL事务隔离级别
web course design
Redis的下载安装
redis主从复制
PAT 1015 进制转换
从零开始Blazor Server(9)--修改Layout
GET请求和POST请求区别
[现代控制理论]5_系统的可控性_controllability
C# Get system installed .NET version
Modify the VOT2018.json file and remove the color in the image path
未来装备探索:数字孪生装备
Shell之常用小工具(sort、uniq、tr、cut)
Redis的常用数据结构和底层实现方式
杂记(6)
wpf path xaml写法和c#写法对比
Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
结构体变量的首地址获取注意事项
防止数据冒用的方法
OpenSSF的开源软件风险评估工具:Scorecards