当前位置: 首页 > news >正文

HAProxy 简介及配置

一、HAProxy 简介

HAProxy 是由法国人 Willy Tarreau 开发的开源软件,专为处理高并发场景设计,能支持 10000 以上客户端同时连接,是高性能的 TCP 和 HTTP 负载均衡器。它提供高可用性、负载均衡以及基于 TCP 和 HTTP 的应用代理,支持虚拟主机,是免费、快速且可靠的负载均衡解决方案,尤其适合处理高负载站点的七层数据请求,还能屏蔽内部真实服务器,抵御攻击。

官网:http://www.haproxy.com

二、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(access control list)。

三、HAProxy 保持会话的三种解决方法

为确保同一客户端访问服务器能保持会话,HAProxy 有以下三种解决方法:

  1. 通过客户端 IP 进行 Hash 计算并保存,使相同 IP 访问代理服务器时转发给固定的真实服务器。
  2. 依靠真实服务器发送给客户端的 Cookie 信息进行会话保持。
  3. 保存真实服务器的 Session 以及服务器标识,实现会话保持。(HAProxy 仅要求后端服务器网络联通,无需像 LVS 那样进行繁琐的 ARP 配置)

四、HAProxy 的 8 种负载均衡算法

  1. RR(Round Robin):轮询调度,将请求按顺序轮流分配给后端节点。例如三个节点 A、B、C,第一个用户到 A,第二个到 B,第三个到 C,第四个再到 A,以此类推。
  2. LC(Least Connections):最小连接数算法,根据后端节点连接数动态分配请求,将新请求分配给连接数最小的节点。
  3. SH(Source Hashing):基于来源访问调度算法,适用于服务端有 Session 会话记录的场景,可基于来源的 IP、Cookie 等进行集群调度,能实现会话保持,但可能因部分 IP 访问量大导致负载不均衡。
  4. uri(资源标识符):根据请求的 URI 调度,适用于 CDN(内容分发网络)。
  5. url_param(资源定位符):根据 HTTP 请求头锁定每次 HTTP 请求。
  6. rdp—cookie(name):根据 cookie(name)锁定并哈希每次 TCP 请求。
  7. source:根据请求的源 IP,类似 Nginx 的 IP hash 机制。
  8. static-rr:根据权重进行轮询。

五、HAProxy 主要工作模式

  1. tcp 模式:在客户端和服务器之间建立全双工连接,不处理七层报文,通常用于 SSL、SSH、SMTP 等应用层。
  2. http 模式(一般使用):转发客户端请求给后端服务器前会深度分析,拒绝所有不与 RFC 格式兼容的请求。

六、HAProxy 安装

6.1 通过 tar.gz 安装

  1. 准备 HAProxy 安装包(如 haproxy-2.9.5.tar.gz),传到 /opt 目录。
  2. 解压到 /usr/local/src:

bash

tar -zxvf haproxy-2.9.5.tar.gz -C  /usr/local/src
cd /usr/local/src/haproxy-2.9.5/
  1. 查询系统内核版本:

bash

uname -r
  1. 编译,centos6.X 用 TARGET=linux26,centos7.x 用 linux31:

bash

make TARGET=linux31 PREFIX=/usr/local/haproxy [ARCH=x86_64]
  1. 安装到 /usr/local/haproxy 目录:

bash

make install PREFIX=/usr/local/haproxy
  1. 创建目录和配置文件:

bash

mkdir -p /usr/data/haproxy/
vim /usr/local/haproxy/haproxy.cfg

6.2 通过 yum 安装

bash

yum -y install haproxy

七、HAProxy 配置文件参数

HAProxy 配置文件 haproxy.cfg 的默认地址为 /etc/haproxy/haproxy.cfg,由 global 和 proxies 两大部分组成。

7.1 global 全局配置

包含进程及安全配置、性能调整、Debug 等相关参数,例如:

  • chroot:锁定运行目录
  • deamon:以守护进程运行
  • user、group、uid、gid:运行 haproxy 的用户身份
  • nbproc:开启的 haproxy 进程数,与 CPU 保持一致
  • maxconn:每个 haproxy 进程的最大并发连接数
  • log:定义全局的 syslog 服务器

示例:

bash

global chroot /var/haproxy             # 锁定运行目录uid 99                          # 所属运行的用户uid gid 99                          # 所属运行的用户组 daemon                          # 守护进程。以后台形式运行haproxy nbproc 1                        # haproxy进程数,与CPU保持一致pidfile /var/run/haproxy.pid    # haproxy的pid存放路径ulimit-n 65535	                # ulimit的数量限制maxconn 20480                   # 默认最大连接数 log 127.0.0.1 local0            # 日志输出配置log 127.0.0.1 local1 notice   	# notice为日志级别

7.2 proxies 代理配置

主要包括 defaults、frontend、backend、listen 四部分。

7.2.1 defaults

为 frontend、backend、listen 提供默认配置,例如:

  • option redispatch:当服务器挂掉后,强制定向到其他健康服务器
  • mode http:默认工作类型
  • timeout connect:客户端请求到后端 server 的最长连接等待时间
  • balance roundrobin:默认的负载均衡方式

示例:

bash

defaults log global                      # 应用全局日志配置mode http                       # 处理类别为http(7层)maxconn 20480                   # 最大连接数 option httplog                  # 日志类别为http日志格式 option httpclose                # 每次请求完毕后主动关闭http通道 option dontlognull              # 不记录健康检查的日志信息 option forwardfor               # 让后端服务器获得客户端真实ipoption redispatch               # 服务器挂掉后强制定向到其他健康服务器option abortonclose             # 服务器负载高时结束久等连接 stats refresh 30                # 统计页面刷新间隔 retries 3                       # 检查节点服务器失败次数balance roundrobin              # 负载均衡方式为轮询contimeout 5000                 # 连接超时时间clitimeout 50000                # 客户端超时时间srvtimeout 50000                # 服务器超时时间timeout check 2000              # 心跳检测超时时间
7.2.2 frontend

指定接收客户端侦听套接字设置,类似 Nginx 的 server {},可定义 ACL 策略进行匹配操作。

示例:

bash

frontend http_80_in bind 0.0.0.0:80      # 监听端口mode http            # http的7层模式 log global           # 应用全局的日志配置 option httplog       # 启用http的log option httpclose     # 每次请求完毕后主动关闭http通道 option forwardfor    # 让后端服务器获得客户端真实IP# acl策略配置acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$    acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn# acl策略匹配相应 use_backend  server_web  if itnihao_web use_backend  server_blog if itnihao_blog default_backend server_bbs  # 以上都不满足时使用默认backend
7.2.3 backend

指定将连接请求转发至后端服务器的相关设置,类似 Nginx 的 upstream {}。

示例:

bash

backend server_web mode http                         # http的7层模式 balance roundrobin                # 负载均衡方式为轮询cookie SERVERID                   # 允许插入serverid到cookie中option httpchk GET /index.html    # 心跳检测的文件 server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1     server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2
7.2.4 listen

同时拥有前端和后端配置,只对 TCP 有效,可用于配置监控页面等。

示例(监控页面配置):

bash

listen admin_status                bind 0.0.0.0:65532             # 监听端口 mode http                      # http的7层网络模式 log 127.0.0.1 local3 err       # 错误日志记录 stats refresh 5s               # 每隔5秒自动刷新监控页面 stats uri /admin?stats         # 监控页面的url stats realm itnihao\ itnihao   # 监控页面的提示信息 stats auth admin:admin         # 监控页面的用户和密码stats auth admin1:admin1       # 另一个用户和密码stats hide-version             # 隐藏HAproxy版本信息  stats admin if TRUE            # 手工启用/禁用后端服务器

7.3 完整配置文件示例

bash

globallog /dev/log    local0 infolog /dev/log    local0 noticemaxconn 4096uid 99gid 99daemondefaultslog globalmode    httpoption  httplogretries 3maxconn 4096contimeout  5000clitimeout  50000srvtimeout  50000listen  webcluster 0.0.0.0:80option  httpchk GET /index.htmlbalance roundrobinserver  inst1 192.168.200.103:80 check inter 2000 fall 3server  inst2 192.168.200.104:80 check inter 2000 fall 3listen admin_statsbind 0.0.0.0:8000mode httpoption httplogmaxconn 100stats refresh 30sstats uri /statsstats realm Crushlinux\ Haproxystats auth  admin:adminstats hide-version

八、服务自启动脚本配置

bash

cp /usr/src/haproxy-2.9.5/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
chmod +x /etc/init.d/haproxy 
/etc/init.d/haproxy start# 将haproxy服务交由systemd管理
chkconfig --add /etc/init.d/haproxy
# 启动
systemctl start haproxy
# 设置开机自启
chkconfig --level 35 haproxy on

九、Haproxy 日志配置

Haproxy 日志默认输出到系统 syslog,为便于管理可单独配置:

  1. 修改 haproxy.cfg 的 global 选项:

bash

log /dev/log    local0 info
log /dev/log    local0 notice
  1. 重启 haproxy:

bash

service haproxy restart
  1. 在 /etc/rsyslog.d/ 下创建 haproxy.conf:

bash

if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -/var/log/haproxy/haproxy-info.log &~
if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log &~
  1. 重启 rsyslog 服务:

bash

service rsyslog restart

十、状态统计功能测试

仅七层可配置状态统计功能:

bash

listen stats # 定义监控页面    mode httpoption httplogbind *:1080                   # 绑定端口1080    stats refresh 30s             # 每30秒更新监控数据    stats uri /stats              # 访问监控页面的uri    stats realm HAProxy\ Stats    # 监控页面的认证提示    stats auth admin:admin        # 监控页面的用户名和密码

配置后,可通过访问对应端口和 URI 查看监控页面。

http://www.dtcms.com/a/565897.html

相关文章:

  • 电商系统网站建设网站客户端制作教程
  • 只会后端不会前端如何做网站免费wordpress页面编辑器
  • BIRGMA验厂要求
  • 铝电解电容器用阳极箔:市场格局、技术演进与未来趋势
  • linux服务-vsftpd搭建
  • SAP PP生产报废单功能分享
  • 汇川H5U+HMI仿真运行追飞剪程序
  • 服装设计网站免费临桂住房和城乡建设局网站
  • 原子性与原子操作
  • Java使用okhttp发送get、post请求
  • 两种上传图片的方式——91张先生
  • web3品牌RWA资产自主发行设计方案
  • 网站公司是做什么的长沙做网站备案
  • 【k8s】Kubernetes 资源限制设置规范手册 MB与MiB的概念混淆问题
  • 网站开发需要多长时间互联网有限公司
  • 撰写网站规划书网络服务示范区创建情况
  • 汇川高压变频故障码解析F134 F149 F150 F151 F154 F155 F157 F159 F160
  • 从 C 到 C++20 协程编写方法的演变。第一部分:函数 + 宏 = 协程
  • 采购管理软件选型避坑指南
  • 广州网站搭建多少钱网站的pv uv
  • ubuntu上安装交叉编译工具链说明
  • 【博资考5】网安2025
  • 怎样在别人网站做加强链接宁波网站推广专业服务
  • 做网站申请域名中国定制家具网
  • 合肥网站建设司图石家庄建设局网站怎么打不开
  • 开启学习具身智能之路
  • 使用husky+ commitlint检查提交描述是否符合规范要求
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析3
  • 达梦删除表空间的内部执行过程
  • 外贸建设网站合优做网站需要多少钱