首页
IT
登录
6mi
u
盘
搜
搜 索
IT
HAProxy简介及配置文件详解(一)
HAProxy简介及配置文件详解(一)
xiaoxiao
2021-03-25
59
一 HAProxy简介
HAProxy提供
高可用、负载均衡以及基于TCP和HTTP的应用代理
,适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
HAProxy
特点和优点
:
1.
支持原声
SSL
,同时支持客户端和服务器的SSL.
2.支持
IPv6
和UNIX套字节(
sockets
)
3.支持
HTTP Keep-Alive
4.支持
HTTP/1.1压缩
,节省宽带
5.支持
优化健康检测机制
(SSL、scripted TCP、check agent...)
6.支持
7层负载均衡
。
7.
可靠性和稳定性
非常好。
8.
并发
连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
9.支持
8种负载均衡算法
,同时支持session保持。
10.支持
虚拟主机
。
11.支持
连接拒绝
、
全透明代理
。
12.拥有服务器状态
监控页面
。
13.支持
ACL
.
HAProxy为了让同一客户端访问服务器可以
保持会话
。有三种解决方法:
客户端IP
、
Cookie
以及
Session
1.HAProxy通过客户端IP进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。
2.HAProxy依靠真实服务器发送客户端的Cookie信息进行会话保持。
3.HAProxy将保存真实服务器的Session以及服务器标识,实现会话保持。
(HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)
HAProxy的
balance
8种负载均衡算法:
1.
roundrobin
: 基于权重轮循。
2.
static-rr
: 基于权重轮循。静态算法,运行时改变无法生效
3.
source
: 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
4.
leastconn
: 最小连接。(适合数据库负载均衡,不适合会话短的环境)
5.
uri
: 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
6.
uri_param
: 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
7.
hdr(<name>)
: 根据http头转发,如果不存在http头。则使用简单轮循。
HAProxy主要工作模式
1.tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
2.
http模式(一般使用)
:该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
HAProxy架构图
二 HAProxy安装及配置文件参数
HAProxy安装
yum install haproxy
-
y
HAProxy环境
配置文件:/
etc
/
haproxy
/
haproxy
.
cfg
global
全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug
相关参数
(proxies
代理配置段)
default
默认配置 (fronttend backend listen 三个的默认参数)
frontend
前端
定义一系列监听套字节,接收客户端请求
backend
后端
定义一系列后端服务器,请求转发
listen
前后端直接关联
配置文件详解
global
chroot dir #工作目录chroot
#全局日志配置,使用127.0.0.1的rsyslog服务中local3日志设备,等级info
log
127.0
.
0.1
local3 info
#每个进程最大并发数
maxconn
4096
#后台进程数量
nbproc 1
#用户
user nobody
group nobody
#后台程序模式工作
daemon
#HAProxy pid文件存储目录
pidfile /var/run/haproxy-private.pid
#tune.bufsize 16384 设置buffer(B)
defaults
#模式(
tcp http
health)
mode
http
#连接后端服务器重试次数,超出后标为不可用
retries 3
timeout connect 10S #连接服务器最长等待时间(ms)
timeout client 20s #连接客户端发送数据最长等待时间。
timeout server 30s #服务器回复客户端最长等待时间。
timeout check 5s #对后端服务器的检测超时时间。
frontend www #定义名为www的前端虚拟节点
# bind [<address>:<port_range>] interface <interface> 监听套字节定义
bind *:80
mode http
option httplog #启用日志记录HTTP请求。
option forwardfor
#启用后后端服务器可以获得客户端IP
option httpclose #客户端和服务器完成一次连接请求后,HAProxy主动关闭TCP链接(优化选项)
log global #使用全局日志配置
default_backend htmpool
#指定后端服务池(backend定义htmpool)
backend htmpool #定义名为htmpool的真实服务器组
mode http
option redispatch #用于cookie保持环境。(如后端服务器故障,客户端cookie不会刷新,用此来把用户请求强制定向到正常服务器)
option abortonclose #负载均衡很高时,自动结束当前队列处理时间长的连接
balance roundrobin
#负载均衡算法。
cookie SERVERID #允许向cookie插入SERVERID.下面server可以使用cookie定义
#option httpchk <method> <url> <vesion>
#mothod: OPTION、GET、HEAD (其中HEAD仅检测是否返回状态码200 更快,更简单)
option httpchk
GET /index.php #启用HTTP服务状态检测功能
#server <name> <address>[:port] [param*]
#[param*]为后端设定参数
#cookie server1 指定后端服务器设置cookie值,目的实现持久连接,指定的cookie值在请求时会被检查,第一次此cookie值将挑选后端服务器将一直被沿用。
#weight num权重
#check启用后端执行健康检测
#inter num 健康状态检测时间间隔
#rise num 从故障状态转换至正常需成功检测次数
#fall num 从正常转换故障需失败次数
#backup 设置后端真实服务器备份服务器,仅在所有真实服务器不可用启用
server
web1 192.168.1.186:80 cookie server1
weight 6 check inter 2000 rise 2 fall 3
server
web2 192.168.1.188:80 cookie server2
weight 6 check inter 2000 rise 2 fall 3
listen admin_stats #定义HAProxy监控页面
bind
0.0
.
0.0
:
9188
mode http
log
127.0
.
0.1
local3 err
stats refresh
30s #HAProxy监控页面统计自动刷新时间。
stats uri
/
haproxy
-
status #设置监控页面URL路径。 http//IP:9188/haproxy-status可查看
stats realm welcome login\
Haproxy #统计页面密码框提示信息
stats auth admin
:
123456
#登录统计页面用户和密码
stats hide
-
version #隐藏HAProxy版本信息
stats admin
if
TRUE #设置TURE后可在监控页面手工启动关闭后端真实服务器
ACL权限
#3.4层匹配 dst,src 目的IP和源IP
(写入
frontend
中)
#禁止192.168.0.0/24网段用户访问
acl bad src
192.168
.
0.0
/
24
block
if
bad
#七层匹配 req.hdr([<>name[,<occ>])
#用户访问www.server2.com时(报头正则匹配),代理转发给server2 -i是不区分大小写
acl www hdr_reg
(
host
)
-
i
^(
www
.
server2
.
com
)
$
use_backend server2
if
www
#acl其他设置
acl url_static path_end .git .png .css .js (URL请求结尾)
acl host_www hdr_beg(host) -i www
acl host_static hdr_beg(host) -i img. video. download. ftp. (域名开头)
日志配置
vim /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun
514
local3
.*
/
var
/
log
/
haproxy
systemctl restart rsyslog
参考博客:
http://51eat.blog.51cto.com/11892702/1891934
转载请注明原文地址: https://ju.6miu.com/read-37832.html
技术
最新回复
(
0
)