一.概述
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,维护方便,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后,Haproxy还会自动将该RS服务器加入进来提供服务。
Haproxy特别适用于那些高负载、访问量很大。但又需要会话保持或七层应用代理的业务。Haproxy运行在普通的服务器硬件上,几乎不需要进行更多的优化就可以支 持数以万计的并发连接。并且它的运行模式使得它可以很简单、安全的整合到各种网站的架构中,同时,haproxy的代理模式,可以使得应用服务器不会暴露到网络中。
- haproxy和nginx的区别
-
Nginx特点
1.支持Http协议,工作在网络7层
2.支持通过端口健康检测
3.支持强大的正则匹配规则
4.支持WebSocket协议
5.支持Http Cache -
Haproxy特点
1.支持TCP与Http协议,工作在网络4层和7层
2.支持Session共享、Cookies引导
3.支持通过URL健康检测
4.支持8种负载均衡策略
5.支持心跳检测 - HAProxy工作原理
HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发链接。事件驱动模型因为在有更好的资源和时间管理的用户端(user-space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以及使每个CPU时间片(Cycle)做更多的工作。
- 负载均衡常用的调度算法
RR(Round Robin):算法是最简单最常见的一种算法,即轮询调度。
LC(Least Connections):算法即最小连接算法,根据后端的节点连接数大小动态分配前段请求。
SH(Source Hashing):SH基于来源访问调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源IP,Cookie等做群集调度
二.案例
-
- 编译安装Nginx1服务器
[root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# useradd -M -s / sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1 .12.0. tar.gz
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usx/1oca1/nginx --user=nginx --group=nginx
[root@localhost nginx-1.12.0]# make && make install
默认安装目录: /usr/local/nginx
默认日志: /usr/local/nginx/logs/
默认监听: 80。
默认Web目录: /usr/local/nginx/html
在客户端访问http://192.168.1.61/test. html测试,
(2)搭建Nginx2.
编译安装的步骤与Nginx1相同,不同之处在于建立测试页面。
[ root@localhost html]# echo "Server 192.168.1.62" > test. html
在ke客户端访问http://192.168.162/test . html测试
- 2.编译安装Haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-deve1
[root@localhost ~]# tar xf haproxy-1.5.19. tar.gz
[root@localhost haproxy-1.5.19]# make TARGET=linux26 //64位系统
[root@localhost haproxy-1.5.19]# make install
- 3.Haproxy服务器配置
(1 )建立Haproxy的配置文件,
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy / /创建配置文件目录
[root@localhost haproxy-1.5.19]# cp examples/haproxy . cfg /etc/haproxy/
//将haproxy.cfg文件复制到配置文件目录
(2) Haproxy配置项介绍。
Haproxy配置文件通常分为三个部分,即global. defaults 和listen。global 为全局配置,defaults 为默认配置,listen 为应用组件配置。
global配置项通常有下面配置参数
global
log 127.0.0.1 local0 //配置日志记录, local0为日志设备,默认存放到系统日志
log 127.0.0.1 locall notice //notice 为日志级别,通常有24个级别
maxconn 4096 //最大连接数
uid 99 //用户uid
gid 99 //用户gid
defaults配置项配置默认参数.
defaults
log global //定义日志为global配置中的日志定义
mode http //模式为http
option httplog //采用http日志格式记录日志
retries 3 //当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 //最大连接数
cont imeout 5000 //客户端超时时间
cont imeout 50000 //服务器超时时间
listen配置项一般配置应用模块参数。
listen appli4-backup 0.0.0.0:10004 //定义一个appli4-backup的应用
option httpchk / index . html //检查服务器的index.html文件
option persist / /强制将请求发送到已经down掉的服务器
balance roundrobin //负载均衡调度算法使用轮询算法
server inst1 192.168.114.56:80 check inter 2000 fall 3 //定义在线节点
server inst2 192.168.114.56:81 check inter 2000 fall 3 backup //定义备份节点
(3) 根据目前的群集设计,将haproxy, cfg配置文件的内容修改如下。
global
log 127 .0.0.1 loca10
1og 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
uid 99
gid 99
da emon
#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 .
serve r
instl 192.168.1.61 :80 check inter 2000 fall 3
serve r
inst2 192.168.1.62:80 check inter 2000 fall 3
- 4.创建自启动脚本
[root@localhost haproxy]# cp ~/haproxy-1.5. 19/examp1es/haproxy . init /etc/init
d/haproxy
[root@localhost haproxy]# ln -s /usx/1ocal/ sbin/haproxy /usr/ sbin/haproxy
[root@localhost haproxy]# chmod +x /etc/init. d/haproxy
[root@localhost haproxy]# chkconfig --add /etc/init. d/haproxy
[root@localhost haproxy]# /etc/init. d/haproxy start
Starting haproxy (via systemctl) :
[确定]
[root@localhost haproxy]# systemctl stop firewalld
- 5. 测试Web群集
通过上面的步骤,已经搭建完成Haproxy的Web群集,接下来需要验证群集是否工作正常。一
个群集一般需要具备两个特性,第- -个是高性能,第二个是高可用。
1)测试高性能
在客户端使用浏览器打开http://192.168.1 60/test .html,浏览器显示信息如图所示。
再次打开一个新的浏览器页面访问http://192.168.1. 60/test.html.浏览器显示信息如图所示