qidao123.com技术社区-IT企服评测·应用市场

标题: HAProxy 安装与介绍 [打印本页]

作者: 老婆出轨    时间: 5 天前
标题: HAProxy 安装与介绍
HAProxy(High Availability Proxy)是一款利用C语言编写的,高性能的开源负载平衡器和代理服务器软件,专为TCP(L4)和HTTP(L7)应用而操持。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载平衡算法和康健查抄机制,是构建高可用性体系的抱负选择。


LB(Load Balance,负载平衡):是一种服务或基于硬件设备等实现的高可用反向代理技能,负载平衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
OSI 网络七层模型(OSI:Open System Interconnection, 开放体系互联)


根据 OSI模型 可将负载平衡分为:
负载平衡模型介绍
四层和七层负载平衡的区别:

一、介绍

HAProxy 是一款 TCP/HTTP 反向代理负载平衡服务器软件,可工作在OSI模型中的四层传输层以及七层应用层。
HAProxy特别适用于那些负载压力大的web站点,这些站点通常需要会话保持或七层处理。
HAproxy答应用户界说多组服务代理,代来由前端和后端组成,前端界说了服务监听的IP及端口,后端则界说了一组服务器及负载平衡的算法。通过服务代理将流量由前端负载平衡至后端服务器节点上。
HAProxy的工作流程如下:
1.1 核心

1.2 上风

点击了解《HAProxy 与 NGINX:全面比较

二、安装

haproxy官网:https://www.haproxy.org/
2.1 yum 安装

sudo yum install haproxy -y
注意: yum 安装的 HAProxy 版本大概比较旧,建议利用编译安装方式获取最新版本。
2.2 rpm 包安装

从第三方网站下载 rpm 包进行安装,比方:https://pkgs.org/download/haproxy
注意: 下载 rpm 包时,请务必选择可靠的来源,并注意版本兼容性。
2.3 编译安装

<ol>安装依靠包
sudo yum install -y make gcc pcre pcre-devel bzip2-devel openssl openssl-devel
下载并编译安装
  1. #下载安装包,并解压
  2. wget https://www.haproxy.org/download/3.0/src/haproxy-3.0.9.tar.gz
  3. tar -xzf haproxy-3.0.9.tar.gz
  4. cd haproxy-3.0.9
  5. #编译安装
  6. make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1
  7. sudo make install PREFIX=/usr/local/haproxy
  8. #创建软链接(可选)
  9. sudo ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
复制代码
配置并验证
  1. #创建服务用户
  2. sudo useradd -r -M -s /sbin/nologin haproxy
  3. #创建配置文件目录
  4. sudo mkdir /etc/haproxy
  5. #使用配置文件(可选)
  6. sudo cp addons/ot/test/empty/haproxy.cfg /etc/haproxy
  7. #验证 HAProxy 配置
  8. sudo haproxy -f /etc/haproxy/haproxy.cfg -c
  9. #启动测试
  10. sudo haproxy -f /etc/haproxy/haproxy.cfg
复制代码
创建 HAProxy 服务文件
  1. sudo tee /etc/systemd/system/haproxy.service <<-EOF
  2. [Unit]
  3. Description=HAProxy Load Balancer
  4. After=syslog.target network.target
  5. [Service]
  6. Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"
  7. ExecStartPre=/usr/sbin/haproxy -f \$CONFIG -c -q
  8. ExecStart=/usr/sbin/haproxy -Ws -f \$CONFIG -p \$PIDFILE
  9. ExecReload=/usr/sbin/haproxy -f \$CONFIG -c -q
  10. ExecReload=/bin/kill -USR2 \$MAINPID
  11. KillMode=mixed
  12. Restart=always
  13. Type=notify
  14. [Install]
  15. WantedBy=multi-user.target
  16. EOF
复制代码
server  [:] [params ...]
例子:
  1. defaults                     
  2.     log global
  3.     option httplog
  4.     log 127.0.0.1 local2
复制代码
3.5 聚合配置(listen)

listen 是HAProxy配置中的一个重要部分,它答应在一个配置块中同时界说前端(frontend)和后端(backend)的设置,简化了配置过程,特别适用于简朴的代理场景。
listen指令提供了一种简洁的方式来配置HAProxy,将前端和后端功能合并到一个配置块中,淘汰了配置文件的复杂性,特别适合不需要复杂路由规则的负载平衡场景。
listen语法结构
  1. sudo tee /etc/rsyslog.d/haproxy.conf <<-EOF
  2. \$ModLoad imudp
  3. \$UDPServerRun 514
  4. local2.* /var/log/haproxy.log
  5. EOF
复制代码
例子:
  1. #将 /etc/sysconfig/rsyslog 文件中的文件中的的配置为: SYSLOGD_OPTIONS="-c 2 -r -m 0"
  2. sudo sed -i '/SYSLOGD_OPTION/c\SYSLOGD_OPTIONS="-c 2 -r -m 0"' /etc/sysconfig/rsyslog
复制代码
3.6 负载平衡调度算法

HAProxy负载平衡调度算法可以在HAProxy配置文件中设定。支持配置多组后端服务组,每个组可以分别指定一种调度算法。以下是HAProxy支持的几种调度算法。
在 HAProxy 中,负载平衡算法可以分为 动态(Dynamic) 和 静态(Static) 两大类,主要区别在于是否实时考虑后端服务器的状态(如连接数、响应时间等)。以下是分类说明及典型利用场景:
选择建议
根据实际业务需求(如会话、性能、缓存)和服务器特性(如权重、连接数)选择合适的算法。
3.6.1 hdr 负载平衡算法详解

hdr 是 HAProxy 中的一种 动态负载平衡算法,它基于 HTTP 请求头(Header) 的内容进行流量分发,常用于高级路由和会话保持场景。以下是具体说明:
总结
hdr 的核心价值:通过 HTTP 头实现 机动的路由控制和会话保持,适合需要精致流量管理的场景。
推荐利用场景:

3.7 康健查抄(Health Check)

HAProxy 的康健查抄(Health Check)是确保后端服务器(Backend Server)可用性的关键机制,通过定期检测服务器状态,主动将故障节点从负载平衡池中移除或重新加入。常见的康健查抄类型包括TCP连接查抄、HTTP请求查抄等。
最佳实践
通过合理配置康健查抄,HAProxy 可以显著提高服务的可靠性和容错能力。根据实际需求选择 TCP/HTTP 查抄,并机动调整参数以优化性能。

四、实例
  1. frontend http-in
  2.     bind *:80
  3.     bind *:443 ssl crt /etc/ssl/certs/mydomain.pem
  4.     #示例1:HTTP到HTTPS重定向
  5.     redirect scheme https code 301 if !{ ssl_fc }
  6.     #示例2:路径重定向
  7.     redirect prefix /new/path code 301 if { path_beg /old/path/ }
  8.     #示例3:域名重定向
  9.     acl is_old_domain hdr(host) -i old.example.com
  10.     redirect prefix http://new.example.com code 301 if is_old_domain
  11.     #redirect prefix http://new.example.com code 301 if { hdr(host) -i old.example.com }
  12.     #示例4:域名重定向是否“保留路径”,原始请求:http://old.example.com/path/to/resource
  13.     #prefix - 保留路径,只重置协议和域名,重定向到:https://new.example.com/path/to/resource
  14.     redirect prefix https://new.example.com code 301 if { hdr(host) -i old.example.com }
  15.     #location - 丢弃路径,完全替换 URL,重定向到:https://new.example.com (丢失了原始路径)
  16.     redirect location https://new.example.com code 301 if { hdr(host) -i old.example.com }
  17.     #示例5:重定向是否保留参数,原始请求:http://example.com/old/path/?search=hello
  18.     #不使用 drop-query(默认),重定向到:http://example.com/new/path/?search=hello
  19.     redirect prefix /new/path code 301 if { path_beg /old/path/ }
  20.     #使用 drop-query,重定向到:http://example.com/new/path(?search=hello 被丢弃)
  21.     redirect prefix /new/path drop-query code 301 if { path_beg /old/path/ }
  22.     #示例6:添加尾部斜杠
  23.     redirect append-slash if { path_reg ^/path[^/]*$ }
  24.     #示例7:带条件的重定向
  25.     acl is_mobile hdr(User-Agent) -i -m reg (android|iphone|ipad)
  26.     redirect prefix http://m.example.com code 302 if is_mobile
复制代码

Via

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4