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 |

相关推荐
hgdlip27 分钟前
固定ip和非固定ip的区别是什么?如何固定ip地址
服务器·网络·tcp/ip
IT葛大侠29 分钟前
OSPF域间路由
运维·网络·计算机网络
搬码临时工30 分钟前
有公网ip但外网访问不到怎么办?内网IP端口映射公网连接常见问题和原因
运维·服务器·网络·网络协议·tcp/ip·php·远程工作
huangyuchi.31 分钟前
【Linux】编译器gcc/g++及其库的详细介绍
linux·运维·服务器·笔记·编译器·gcc·g++
我是苏苏31 分钟前
C#基础:使用线程池执行并行任务
java·服务器·c#
egoist20233 小时前
【Linux仓库】冯诺依曼体系结构与操作系统【进程·壹】
linux·运维·服务器·开发语言·操作系统·冯诺依曼体系结构
白总Server4 小时前
Golang 依赖注入:构建松耦合架构的关键技术
linux·运维·服务器·macos·架构·golang·xcode
机械心4 小时前
Docker容器使用手册
运维·docker·容器
FreeBuf_5 小时前
黑客利用GitHub现成工具通过DevOps API发起加密货币挖矿攻击
运维·github·devops
m0_746177197 小时前
小白畅通Linux之旅-----Linux日志管理
linux·运维·服务器