一、Haproxy概述
Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如 LVS 和Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的 upstream 模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy 好。
二、Haproxy知识点
1. HTTP 请求
通过 URL 访问网站使用的协议是 HTTP 协议,此类请求一般称为 HTTP 请求。HTTP 请求的方式分为 GET 方式和 POST 方式。当使用浏览器访问某一个 URL,会根据请求 URL 返回状态码,通常正常的状态码为 2××、3××(如 200、301),如果出现异常会返回 4××、5××(如 400、500)。
2. 负载均衡常用调度算法
LVS、Haproxy、Nginx 最常用的调度算法有三种,如下所述。
(1)RR(Round Robin)。RR 算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点 A、B、C,第一个用户访问会被指派到节点 A,第二个用户访问会被指派到节点 B,第三个用户访问会被指派到节点 C,第四个用户访问继续指派到节点 A,轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询,即根据每个节点的权重轮询分配访问请求。
(2)LC(Least Connections)。LC 算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求。例如,有三个节点 A、B、C,各节点的连接数分别为 A∶4 、B∶5、 C∶6,此时如果有第一个用户连接请求,会被指派到 A 上,连接数变为 A∶5 、B∶5、C∶6;第 二个用户请求会继续分配到 A 上,连接数变为 A∶6、B∶5、C∶6;再有新的请求会分配给 B,每次将新的请求指派给连接数最小的客户端。由于实际情况下 A、B、C 的连接数会动态释放,很难会出现一样连接数的情况,因此此算法相比较 rr 算法有很大改进,是目前用到比较多的一种算法。
(3)SH(Source Hashing)。SH 即基于来源访问调度算法,此算法用于一些有 Session
会话记录在服务器端的场景,可以基于来源的 IP、Cookie 等做群集调度。例如,使用基于源 IP 的群集调度算法,有三个节点 A、B、C,第一个用户第一次访问被指派到了 A,第二个用户第一次访问被指派到了 B,当第一个用户第二次访问时会被继续指派到 A,第二个用户第二次访问时依旧会被指派到 B,只要负载均衡调度器不重启,第一个用户访问都会被指派到 A,第二个用户访问都会被指派到 B,实现群集的调度。此调度算法好处是实现会话保持,但某些 IP 访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。
3. 常见的 Web 群集调度器
目前,常见的 Web 群集调度器分为软件和硬件。软件通常使用开源的 LVS、Haproxy、Nginx,硬件一般使用比较多的是 F5。也有很多人使用国内的一些产品,如梭子鱼、绿盟等。
三、实验案例环境
1.使用三台服务器模拟搭建一套 Web 群集,具体的拓扑如图
主机 | 操作系统 | IP地址 | 软件 |
Haproxy 服务器 | CentOS 7.6 x86_64 | 192.168.10.101 | haproxy-1.5.19.tar.gz |
nginx1 | CentOS 7.6 x86_64 | 192.168.10.102 | nginx-1.20.1 |
nginx2 | CentOS 7.6 x86_64 | 192.168.10.103 | nginx-1.20.1 |
客户端 | CentOS 7.6 x86_64 | 192.168.10.107 | curl |
2.实验需求
(1) 测试安装 nginx、haproxy;
(2)Haproxy、nginx 配置
(3)都要关闭防火墙、selinux
四、实验步骤
1.在102、103IP主机上yum安装nginx服务器
yum -y install epel-release
yum -y install nginx
2.编辑网页文档
vim /usr/share/nginx/html/index.html
填入内容: web1
在103web上同等操作,内容为“web2”,因为轮询好辨别
启动: systemctl start nginx
3.编译安装 Haproxy,Haproxy 官方下载软件网站是 http://www.haproxy.org/
在 Haproxy 服务器使用 haproxy-1.5.19.tar.gz 安装包进行编译安装
yum -y install pcre-devel bzip2-devel gcc-c++
tar xf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19
make TARGET=linux2628 && make install
4.Haproxy 服务器配置
(1)建立 Haproxy 的配置文件
mkdir /etc/haproxy //创建配置文件目录
cp examples/haproxy.cfg /etc/haproxy/ //将 haproxy.cfg 文件复制到配置文件目录
Haproxy 配置项介绍:
Haproxy 配置文件通常分为三个部分,即 global、defaults 和 listen。global 为全局配置,defaults 为默认配置,listen 为应用组件配置。
global 配置项通常有下面配置参数
global
log 127.0.0.1 local0 //配置日志记录,local0 为日志设备,默认存放到系统日志
log 127.0.0.1 local1 notice //notice 为日志级别,通常有 24 个级别
maxconn 4096 //最大连接数
uid 99 //用户 uid
gid 99 //用户 gid
defaults 配置项配置默认参数,一般会被应用组件继承
defaults
log global //定义日志为 global 配置中的日志定义
mode http //模式为 http
option httplog //采用 http 日志格式记录日志
retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch //当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 //最大连接数
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen 配置项一般配置应用模块参数
listen appli4-backup 0.0.0.0:10004 //定义一个 appli4-backup 的应用
option httpchk /index.html //检查服务器的 index.html 文件
option persist //强制将请求发送到已经 down 掉的服务器
balance roundrobin //负载均衡调度算法使用轮询算法
server web1 192.168.10.102:80 check inter 2000 fall 3 //定义在线节点
server web1 192.168.10.103:80 check inter 2000 fall 3
(2)修改 haproxy.cfg 配置文件
将 haproxy.cfg 配置文件的内容修改如下
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.10.102:80 check inter 2000 fall 3
server inst2 192.168.10.103:80 check inter 2000 fall 3
5.创建自启动脚本
cp ~/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
/etc/init.d/haproxy start #启动
6.测试 Web 群集
用104客户机测试访问负载均衡
curl 192.168.10.101