目录导航
一个开源的代理中间件,主要用来负载均衡
本文参考3W学习方法来叙述内容。
一、What
1、Haproxy是什么?
一个C语言编写的代理中间件,主要用来实现服务端反向代理、负载均衡。
负载均衡中常用的三种调度算法:
- Round Robin:即轮询调度。根据轮询分配访问请求来实现负载均衡的效果。此算法还有一种加权轮询,即根据每个节点分配的权重轮询分配访问请求。
- Least Connections:即最小连接数法。根据后端节点的连接数大小动态分配前端请求。每次将新的请求指派给连接数最小的后端节点。
- Source Hashing :基于来源访问调度算法。该算法用于服务端需要保存Session会话记录的场景。可以基于来源IP、Cookie等做集群调度。该算法的好处是实现会话保持,但某些IP访问量非常大时,可能会导致负载不均衡,不分节点访问量变大,影响业务使用。
二、Why
1、Haproxy的优点
- 开源免费,社区活跃,使用者众多。
- 支持基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机。
- 支持很高的并发,官方文档描述haproxy可以跑满10Gbps。
- 支持连接拒绝
- 支持全透明代理(已具备硬件防火墙的典型特点)
三、How
1、Haproxy的工作原理
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。
2、安装及简单使用
2.1、下载源码并解压
下载地址:
- https://www.haproxy.org/download/2.3/src/haproxy-2.3.14.tar.gz
- https://git.haproxy.org (所有版本都有)
tar -xvzf haproxy-2.3.14.tar.gz
2.2、make编译源码并安装
如果不自带make工具,可自行搜索安装。
windows环境下,可通过安装Cygwin来模拟类UNIX环境。
1.编译:
make TARGET=[内核] PREFIX=[安装路径]
可通过 uname -r查看内核,常见内核:
系统版本 | 内核 |
---|---|
Linux 2.2 | linux22 |
Linux 2.2 | linux22 |
Linux 2.6.28, 3.x, and above | linux2628 |
FreeBSD 5 to 10 | freebsd |
NetBSD | netbsd |
Mac OS/X | osx |
OpenBSD 5.7 and above | openbsd |
Cygwin | cygwin |
any other OS or version | generic |
2.安装:
make install PREFIX=[安装路径]
2.3、创建配置文件并编写
任意路径下创建配置文件haproxy.cfg, 编写简单配置:
global #全局配置
daemon #以daemon方式在后台运行
maxconn 1024 #最大支持1024个连接
defaults #默认配置
mode http #http模式
timeout connect 60s #客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms
timeout server 30s #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms
timeout client 30s #设置haproxy与客户端的最长非活动时间,默认单位ms
frontend http1 #前端服务http1
bind *:8080 #监听8080端口
default_backend servers1 #请求转发至名为"servers1"的服务集群
backend servers1 #服务集群servers1,两台机器1:1负载
server server1 127.0.0.1:8001 weight 1 #本机8001端口的服务
server server2 127.0.0.1:8002 weight 1 #本机8002端口的服务
2.4、启动
检查配置文件语法:
haproxy -c -f /etc/haproxy/haproxy.cfg
以配置文件启动:
haproxy -f /etc/haproxy/haproxy.cfg
3、了解配置文件
Haproxy的配置文件可以分为5部分:
- 全局配置:global
- 默认(公共)配置:defaults
- 前端服务配置:frontend
- 后端服务配置:backend
- frontend+backend的组合配置:listen
注意点:
- 配置文件对缩进没有要求,但为了良好的可读性,建议缩进对齐。
- 配置参数以键值对的方式,至少一个空格来隔开键和值。
3.1、global
该部分主要配置,进程及安全配置相关的参数、性能调整相关参数、Debug参数。
3.2、defaults
该部分的配置参数,默认会被引用到下面的frontend、backend、listen部分中。如果某些参数属于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,defaults部分参数对应的值自动被覆盖。
3.3、frontend
frontend是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。forntend可以根据ACL规则直接指定要使用的后端backend。
3.4、backend
用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器。
3.5、listen
常用于状态页面监控,以及后端server检查,是Fronted和backend的组合体。haproxy 1.3版本之前,仅能通过listen配置前后端参数。