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 |

相关推荐
程序员JerrySUN2 分钟前
Linux 内核基础统简全解:Kbuild、内存分配和地址映射
java·linux·运维·服务器·嵌入式硬件·缓存·文件系统
努力做小白2 小时前
Linux驱动19 --- FFMPEG
linux·运维·驱动开发·单片机·嵌入式硬件·ffmpeg
SunTecTec3 小时前
IDEA 类上方注释 签名
服务器·前端·intellij-idea
Franciz小测测5 小时前
proxmox 解决docker容器MongoDB创建报错MongoDB 5.0+ requires a CPU with AVX support
运维·docker·容器
果子⌂6 小时前
Kubernetes 服务发布进阶
linux·运维·服务器·云原生·容器·kubernetes·云计算
SRC_BLUE_176 小时前
[网安工具] 自动化威胁检测工具 —— D 盾 · 使用手册
运维·自动化
望获linux6 小时前
【Linux基础知识系列】第六十三篇 - 文件编辑器基础:vim
linux·运维·服务器·网络·嵌入式硬件·操作系统·嵌入式软件
书唐瑞6 小时前
Percona pt-archiver 出现长事务
java·服务器·数据库
极客奇点6 小时前
PowerShell自动化备份Windows事件日志实战指南
运维·ad·域控·自动化备份·活动目录系统
末日汐7 小时前
Linux常见指令
linux·运维·服务器