千家信息网

haproxy中怎么实现反向代理和负载均衡

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,这篇文章将为大家详细讲解有关haproxy中怎么实现反向代理和负载均衡,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。nginx可实现缓存功能,hapr
千家信息网最后更新 2025年01月25日haproxy中怎么实现反向代理和负载均衡

这篇文章将为大家详细讲解有关haproxy中怎么实现反向代理和负载均衡,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

nginx可实现缓存功能,haproxy不能实现缓存功能,这里只说明其反向代理功能和负载均衡功能

yum install haproxy主配置文件haproxy.cfg开启日志功能:编辑/etc/rsyslog.conf文件$ModLoad imudp$UDPServerRun 514  #开启udp514端口local2.*                                                /var/log/haproxy.log编辑/etc/haproxy/haproxy.cfg文件:log         127.0.0.1 local2配置负载均衡后端主机:global    log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     4000  定义面向客户端的总的最大连接数(面向客户端那一面)    user        haproxy    group       haproxy    daemon    # turn on stats unix socket    stats socket /var/lib/haproxy/stats#---------------------------------------------------------------------# main frontend which proxys to the backends#---------------------------------------------------------------------frontend  main *:80  #第一种方式#        bind *:80    #第二种方式#        bind *:8080    #只能用于frontend, listen; #        maxconn  也可以定义在这里或listen后,定义了单个实例的最大并发连接数,如果在global段定义就是所有实例总的   default_backend             websrvs#---------------------------------------------------------------------# round robin balancing between the various backends#---------------------------------------------------------------------backend websrvs    balance     roundrobin    server  web1 192.168.20.7:80 check #定义的名字web1会被加到请求首部发到后端,当后端有虚拟主机时很有用    server  web2 192.168.20.8:80 check


balance: 指明调度算法;几种调度算法:

动态:权重可动态调整
静态:调整权重不会实时生效
roundrobin: 轮询,动态算法,每个后端主机最多支持4128个连接;
static-rr: 轮询,静态算法,每个后端主机支持的数量无上限;
leastconn: 根据后端主机的负载数量进行调度;仅适用长连接的会话;动态;
hash-type:
map-based:取模法;静态;
consistent:一致性哈希法;动态;

下面的四种调度算法都基于上面的两种hash-type

source:
uri:对uri的左半部分(?标记之前的部分)或者整个uri做hash,除以后端服务器总权重后绑定到后端服务器
url_param: 根据url中的指定的参数的值进行调度;把值做hash计算,并除以总权重;
hdr() :根据请求报文中指定的header(如use_agent, referer, hostname)进行调度;把指定的header的值做hash计算得值除以总权重;
示例:

backend websrvs    balance     hdr(User-Agent)    hash-type consistent    server  web1 192.168.20.7:80 check    server  web2 192.168.20.8:80 check

测试:

mode: 健康状态检测时基于何种协议
HAProxy的工作模式;默认为tcp;有三种:tcp, http, health

只有客户端和前端,后端都是用http通信才可以使用http模式

在front段也可以指定log:

frontend  main *:80     log global     log         127.0.0.2 local3

使用use_backend 和acl定义后段

use_backend dynamic if url_dyn
use_backend static if url_css url_img extension_img

server段后可加的参数:

backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server;check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:  inter :设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;  rise :设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;  fall :确认server从正常状态转换为不可用状态需要检查的次数;cookie :为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;maxconn :指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;maxqueue :设定请求队列的最大长度;observe :通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有"layer4"和"layer7","layer7"仅能用于http代理场景;redir :启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应;需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以免造成循环;例如:  server srv1 172.16.100.6:80 redir http://imageserver.magedu.com checkweight :权重,默认为1,最大值为256,0表示不参与负载均衡;
option httpchkoption httpchk option httpchk    例如:backend https_relay    mode tcp    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.lee123.com    server apache1 192.168.1.1:443 check port 80使用案例:server first  172.16.100.7:1080 cookie first  check inter 1000server second 172.16.100.8:1080 cookie second check inter 1000

基于浏览器cookie实现session sticky:定义健康检查方式可以使用option:

要点:(1) 每个server有自己惟一的cookie标识;(2) 在backend中定义为用户请求调度完成后操纵其cookiebackend websrvs    balance     roundrobin    cookie SERVERID insert nocache indirect    server  web1 192.168.20.7:80 check cookie websrv1    server  web2 192.168.20.8:80 check cookie websrv2

wKioL1Y4qbmzOZf2AAIwdL1Eqd0065.jpg测试:注意到cookie头部的websrv1关键字了么?

开启统计页面:

listen statistics        bind *:9090        stats enable        stats hide-version        #stats scope .        stats uri /haproxyadmin?stats        stats realm "HAPorxy\ Statistics"        stats auth admin:mageedu        stats admin if TRUE

向日志中记录额外信息:
capture request header
capture response header

当mode为http时,记录丰富的日志信息:
option httplog----默认是开启的

错误页面重定向:
errorfile: 使用haproxy主机本地文件进行响应;
errorloc, errorloc302: 使用指定的url进行响应,响应状态码为302;不适用于GET以外的其它请求方法;
errorloc303:返回303状态码;

添加请求或响应报文首部:
reqadd
rspadd

frontend  main        bind *:80        bind *:8080    rspadd  Via:\ node1.lee.com    default_backend             websrvs

出现了Via:

动静分离的示例:frontend  main    bind *:80    bind *:8080    acl url_static       path_beg       -i /static /images /javascript /stylesheets    acl url_static       path_end       -i .jpg .gif .png .css .js    use_backend static          if url_static    default_backend             appsrvs#---------------------------------------------------------------------# static backend for serving up images, stylesheets and such#---------------------------------------------------------------------    backend static       balance roundrobin       server static1 192.168.20.7 check       server static2 192.168.20.8 check    backend appsrvs       balance     roundrobin       option forwardfor except 127.0.0.1 header X-Client       option httpchk       cookie SERVERID insert indirect nocache       server  web1 192.168.20.7:80 check cookie web1       server  web2 192.168.20.8:80 check cookie web2

关于haproxy中怎么实现反向代理和负载均衡就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

状态 服务器 服务 功能 检查 调度 均衡 健康 主机 权重 最大 动态 算法 代理 文件 参数 客户 方式 日志 静态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州服务器应用线束工厂 计算机软件开发者何去何从 英灵神殿的服务器文件存在哪 服务器日志位置 h2数据库怎么执行本地系统命令 云顶之弈服务器断开连接 望城区android软件开发师 达梦查询数据库是否支持分区 国家网络安全保卫局技术 网络安全都需要装哪些软件 我的世界国庆节服务器 重庆工业软件开发大概要多少钱 sqlplus查看数据库服务名 静安区市场软件开发销售 我的世界比赛服务器推荐 数据库中作业查看器视频 网络安全红蓝对外队伍对抗 防范网络安全知识宣传作文 宝德服务器开机格式化 县设立网络安全员方案 怎么搭建http服务器 毕设云开发数据库 网络技术有限公司工作图片 实验报告数据库的安全性 网络安全专项清理整治责任书 mpp数据库技术要求 腾讯云服务器实际能做什么 四川芯众惠网络技术有限公司 联想服务器远程管理ip更改 阿里容器化数据库技术
0