简介
在前面已经学习了使用Nginx、LVS做负载均衡群集,它们都具有各自的特点,本章将要介绍另一款比较流行的群集调度工具Haproxy。首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建Web群集的方法,最后介绍Haproxy的参数优化和日志配置。
一、Haproxy概述
Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx。相比较而言,LVS.性能最好,但是搭建相对复杂:Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy 好。Haproxy 官方网站是http://www.haproxy.org/。本案例介绍使用Haproxy及Nginx搭建一套Web群集。
1.HTTP 请求
通过URL访问网站使用的协议是HTTP协议,此类请求一般称为HTTP请求。HTTP请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求URL返回状态码,通常正常的状态码为2xx. 3xx(如200、301),如果出现异常会返回4×x、5×x(如400.500)。
2.负载均衡常用调度算法
LVS、Haproxy、Nginx最常用的调度算法有三种,如下所述
- RR (Round Robin):RR算法是最简单最常用的一种算法,即轮询调度。
- LC (Least Connections):LC 算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求。
- SH(Source Hashing):SH即基于来源访问调度算法,此算法用于一些有Session会话记录在
服务器端的场景,可以基于来源的IP、Cookie等做群集调度。
3.常见的Web群集调度器
目前常见的Web群集调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx、硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等。
二、实验案例
实验环境:虚拟机 3台 centos7.9、网卡NAT模式 数量 1、组件包Haproxy nginx(httpd)
设备 | IP | 备注 |
Centos01 | 192.168.19.10 | Node1 |
Centos02 | 192.168.19.20 | Web1 |
Centos03 | 192.168.19.30 | Web2 |
1.准备工作
关闭防火墙
[root@love ~]# systemctl disable firewalld --now
关闭Selinux
[root@love ~]# setenforce 0
[root@love ~]# sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
配置IP DNS 网关
[root@love ~]# nmtui
2.编译安装Haproxy
安装组件node1配置
[root@love ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++ make
解压并安装haproxy
[root@love haproxy-1.5.19]# make TARGET=linux && make install
创建主配置文件
[root@love ~]# mkdir /etc/haproxy
[root@love haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
添加群集Web配置信息
[root@love ~]# vim /etc/haproxy/haproxy.cfg
listen web *:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.19.20:80 check inter 2000 fall 3
server inst2 192.168.19.30:80 check inter 2000 fall 3
添加haproxy系统服务
[root@love haproxy-1.5.19]# cp examples//haproxy.init /etc/init.d/haproxy
[root@love haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@love haproxy-1.5.19]# cd /etc/init.d/
[root@love init.d]# chmod +x haproxy
[root@love init.d]# chkconfig --add haproxy
启动服务
[root@love init.d]# systemctl start haproxy
3.Nginx节点配置
安装组件
[root@love ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++ make
创建Nginx用户
[root@love ~]# useradd -M -s /sbin/nologin nginx
解压并安装nginx
[root@love ~]# tar zxf nginx-1.24.0.tar.gz
[root@love ~]# cd nginx-1.24.0/
[root@love nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nging --with-http_stub_status_module
[root@love nginx-1.24.0]# make
[root@love nginx-1.24.0]# make install
创建主程序连接文件
[root@love nginx-1.24.0]# ln -s /usr/local/sbin/nginx /usr/local/sbin/
添加测试页面web1和web2
nginx1
[root@love nginx-1.24.0]# echo "<h1>AAAAA</h1>" > /usr/local/nginx/html/test.html
nginx2
[root@love nginx-1.24.0]# echo "<h1>BBBBB</h1>" > /usr/local/nginx/html/test.html
启动服务
[root@love nginx-1.24.0]# nginx
验证测试