Haproxy搭建web群集

目录

一:Haproxy

1.Haproxy常见的调度算法

二:环境案例

1.配置web主机

2.配置haproxy主机

3.Haproxy日志


一:Haproxy

Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的upstream 模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy 好。Haproxy 官方网站是 http://www.haproxy.org/。

1.Haproxy常见的调度算法

HAProxy 常见的调度算法分为静态调度算法和动态调度算法,具体如下:

静态调度算法

  • static - rr:基于权重的轮询调度,不支持运行时权重动态调整,只支持权重为 0 和 1,也不支持后端服务器慢启动,其后端主机数量没有限制,相当于 LVS 中的 wrr
  • first:根据服务器在列表中的位置,自上而下进行调度。只有当第一台服务器的连接数达到上限,新请求才会分配给下一台服务器,会忽略服务器的权重设置,此方式使用较少。

动态调度算法

  • roundrobin:轮询动态调度算法,是 HAProxy 的默认调度算法。支持权重的运行时调整,还支持慢启动,即新加的服务器会逐渐增加转发数,每个后端 backend 中最多支持 4095 个 real server
  • leastconn:最少连接动态算法,支持权重的运行时调整和慢启动。该算法会将新客户端连接优先调度到当前连接最少的后端服务器,比较适合长连接场景,如 MySQL 等
  • source:基于用户源地址 hash 并将请求转发到后端服务器,默认为静态的取模方式,但可通过 hash - type 选项更改。后续同一个源地址请求将被转发至同一个后端 web 服务器,比较适用于 session 保持、缓存业务等场景。
  • uri:基于客户端请求的 URI 做 hash 计算,可通过 hash - type 指令指定使用 hash 取模算法还是 hash 一致性算法。适用于后端为 varnish 这样的缓存服务器,能让相同 URI 的请求始终发往同一台后端服务器。

二:环境案例

|---------|------------|----------------|---------|
| 主机 | 操作系统 | IP | 应用 |
| web1 | open Euler | 192.168.10.102 | httpd |
| web2 | open Euler | 192.168.10.103 | httpd |
| haproxy | open Euler | 192.168.10.101 | haproxy |

1.配置web主机

(1)在web1 web2 上创建测试网站

web1

web2

使用haproxy主机测试

2.配置haproxy主机

haproxy主机

(1)安装haproxy

(2)建立Haproxy的配置文件

Haproxy 配置项介绍:

Haproxy 配置文件通常分为三个部分,即 global、defaults 和 listen。

global 为全局配置,defaults 为默认配置,listen 为应用组件配置。

global 配置项通常有下面配置参数,以示例参数说明如下:

defaults 配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将按照默认配置参数设置。

listen配置项一般配置应用模块参数:

(3)测试web群集

使用浏览器访问haproxy主机

可以看到群集的负载均衡已生效,满足了群集的高性能需求

3.Haproxy日志

Haproxy 的日志默认输出到系统的 syslog 中,查看起来不是非常方便,为了更好地管理 Haproxy 的日志,在生产环境中一般单独定义出来,定义的方法如下所述

(1)修改 haproxy 配置文件,将原有的配置更改为以下配置:

(2)配置Rsyslog服务

创建 rsyslog 的 HAProxy 日志规则文件:

(3)重启 Rsyslog和 HAProxy 服务

(4)测试日志信息

在客户端访问 http://192.168.10.103/test.html后,可以使用 tail -f/var/log/haproxy.log 即时査看 Haproxy 的访问请求日志信息。

4.Haproxy的参数优化

|--------------------------|----------------|---------------------------------------------------------------------|
| 参数 | 参数说明 | 优化建议 |
| maxconn | 最大连接数 | 此参数根据应用的实际使用情况进行调整,推荐使用10240,同时"defaults"中的最大连接数的值不能超过"global"段中的定义 |
| daemon | 守护进程模式 | Haproxy可以使用非守护进程模式启动,生产环境建议使用守护进程模式启动 |
| nbproc | 负载均衡的并发进程数 | 建议与当前服务器CPU核数相等或为其2倍 |
| retries | 重试次数 | 此参数主要用于对群集节点的检查,如果节点多,且并发量大,设置为2次或3次:在服务器节点不多的情况下,可以设置5次或6次 |
| option http-server-close | 主动关闭 http 请求选项 | 建议在生产环境中使用此选项,避免由于timeout 时间设置过长导致http连接堆积 |
| timeout http-keep-alive | 长连接超时时间 | 此选项设置长连接超时时间,具体参考应用自身特点设置,可以设置为 10s |
| timeout http-request | http 请求超时时间 | 建议将此时间设置为5~10s,增加http连接释放速度 |
| timeout client | 客户端超时时间 | 如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为 1min 左右就可以ha |

相关推荐
Wang's Blog8 小时前
RabbitMQ: 全面安装与运维指南之从基础部署到高级配置
运维·分布式·rabbitmq
CIb0la8 小时前
Linux 6.19-rc1 释出,龙芯为内核加入 32 位架构支持
linux·运维
model20058 小时前
Web 服务和 SFTP 用户 操作目录
linux·运维·服务器
刃神太酷啦8 小时前
Linux 进程核心原理精讲:从体系结构到实战操作(含 fork / 状态 / 优先级)----《Hello Linux!》(6)
java·linux·运维·c语言·c++·算法·leetcode
Lethehong8 小时前
从零到精通:Docker容器化完整指南与实战练习
运维·docker·容器
kevin_水滴石穿8 小时前
docker-compose.yml案例
java·服务器·开发语言
OurBMC社区8 小时前
玩转OurBMC第二十三期:OurBMC之PCIe接口应用(下)
linux·运维·网络
Guheyunyi8 小时前
用电安全管理系统的三大系统架构
大数据·运维·人工智能·安全·架构·系统架构
weixin_307779138 小时前
Jenkins Pipeline: Multibranch 插件详解:现代CI/CD的多分支管理利器
运维·开发语言·自动化·jenkins·etl
刀刀是个萌妹子8 小时前
使用CloneZilla还原操作系统
linux·运维·服务器