目录
一: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 |