一、负载均衡,你真的懂吗?
负载均衡(Load Balance,简称LB),是一种将特定业务(如web服务、网络流量等)分配给多个后端服务器或设备的技术,从而提高业务并发处理能力、保证业务高可用性,并方便后期扩展。
1.1 什么是负载均衡?
简单来说,负载均衡就是通过一种机制,将进入系统的请求分发到多个服务器上,使得每个服务器都能均匀地承担负载。
1.2 为什么用负载均衡?
使用负载均衡主要有以下几个原因:
- 提高业务并发访问及处理能力,解决单服务器瓶颈问题
- 节约公网IP地址,降低IT支出成本
- 隐藏内部服务器IP,提高内部服务器安全性
- 配置简单,固定格式的配置文件
- 功能丰富,支持四层和七层,支持动态下线主机,性能较强
1.3 负载均衡类型
负载均衡主要分为以下几种类型:
- 硬件负载均衡器:如F5、Netscaler、Array等
- 四层负载均衡:如Ivs、Nginx、Haproxy等
- 七层负载均衡:如Nginx、Haproxy等
1.3.1 硬件负载均衡器
硬件负载均衡器通常由专门的硬件设备组成,具有高性能和高可靠性的特点。
1.3.2 四层负载均衡
四层负载均衡主要基于IP地址和端口号进行流量分发。
1.3.3 七层负载均衡
七层负载均衡主要基于应用层信息进行流量分发,如URL、Cookie、HTTP header等。
1.3.4 四层和七层的区别
四层和七层负载均衡的主要区别在于工作层次和功能上:
- 四层负载均衡在传输层及以下,七层负载均衡在应用层及以下
- 四层负载均衡架构无需解析报文消息内容,在网络吞吐量与处理能力上较高
- 七层可支持解析应用层报文消息内容,识别URL、Cookie、HTTP header等信息
二、HAProxy简介
HAProxy是一款开源的、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性、自动故障切换、支持正则表达式及web状态统计等功能。
三、HAProxy的安装和服务信息
3.1 HAProxy使用结构
HAProxy的配置文件由两大部分组成,分别是:
- global:全局配置段,包括进程及安全配置相关的参数、性能调整相关参数、Debug参数等
- proxies:代理配置段,包括defaults、frontend、backend、listen等配置
3.1.1 global配置
global配置主要包括以下参数:
- chroot:全局锁定运行目录
- daemon:全局以守护进程运行
- user, group, uid, gid:全局运行HAProxy的用户身份
- stats socket:全局套接字文件
- nbproc:全局开启的HAProxy worker进程数
- nbthread:全局指定每个HAProxy进程开启的线程数
- cpu-map:全局绑定HAProxy worker进程至指定CPU
- maxconn:全局每个HAProxy进程的最大并发连接数
- maxsslconn:全局每个HAProxy进程ssl最大连接数
- maxconnrate:全局每个进程每秒创建的最大连接数量
- spread-checks:全局后端server状态check随机提前或延迟百分比时间
- pidfile:全局指定pid文件路径
- log:全局定义全局的syslog服务器
3.1.2 多进程和线程
HAProxy支持多进程和线程配置,可以提高并发处理能力。
3.1.3 HAProxy的状态界面
HAProxy支持状态界面,可以查看HAProxy的运行状态和统计信息。
3.2.1 proxies配置
proxies配置主要包括以下参数:
- defaults:为frontend、backend、listen提供默认配置
- frontend:前端,相当于nginx中的server {}
- backend:后端,相当于nginx中的upstream {}
- listen:同时拥有前端和后端配置,配置简单,生产推荐使用
3.2.2 Proxies配置 - defaults
defaults配置主要包括以下参数:
- mode:HAProxy实例使用的连接协议
- log:指定日志地址和记录日志条目的syslog/rsyslog日志设备
- option:配置选项
- retries:连接后端服务器失败次数
- timeout:设置连接超时时间
- maxconn:设置最大并发连接数
3.2.3 Proxies配置 - frontend
frontend配置主要包括以下参数:
- bind:指定HAProxy的监听地址
- mode:指定负载协议类型
- use_backend:调用backend的名称
3.2.4 Proxies配置 - backend
backend配置主要包括以下参数:
- mode:指定负载协议类型
- option:配置选项
- server:定义后端real server
3.2.5 Proxies配置 - listen
listen配置主要包括以下参数:
- bind:指定监听地址和端口
- mode:指定负载协议类型
- option:配置选项
- server:定义后端real server
3.3 socat工具
socat是一个多功能的网络工具,可以用于调整HAProxy的配置。
四、HAProxy的算法
HAProxy的调度算法分为静态和动态调度算法。
4.1 静态算法
静态算法按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等。
4.1.1 static-rr:基于权重的轮询调度
static-rr算法不支持运行时利用socat进行权重的动态调整。
4.1.2 first:根据服务器在列表中的位置进行调度
first算法根据服务器在列表中的位置,自上而下进行调度。
4.2 动态算法
动态算法基于后端服务器状态进行调度适当调整,新请求将优先调度至当前负载较低的服务器。
4.2.1 roundrobin:基于权重的轮询动态调度算法
roundrobin算法支持权重的运行时调整,支持慢启动。
4.2.2 leastconn:加权的最少连接的动态调度算法
leastconn算法根据当前连接最少的后端服务器进行优先调度。
4.3 其他算法
其他算法即可作为静态算法,又可以通过选项成为动态算法。
4.3.1 source:源地址hash
source算法基于用户源地址hash,并将请求转发到后端服务器。
4.3.2 uri:基于对用户请求的URI的左半部分或整个URI做hash
uri算法基于对用户请求的URI的左半部分或整个URI做hash,再将hash结果对总权重进行取模后,根据最终结果将请求转发到后端指定服务器。
4.3.3 url_param:对用户请求的URL中的params部分中的一个参数key对应的value值作hash计算
url_param算法对用户请求的URL中的params部分中的一个参数key对应的value值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器。
4.3.4 hdr:针对用户每个http头部请求中的指定信息做hash
hdr算法针对用户每个http头部请求中的指定信息做hash,然后由服务器总权重取模以后派发至某挑出的服务器。
五、高级功能及配置
5.1 基于cookie的会话保持
基于cookie的会话保持可以实现在多个服务器之间保持用户的会话信息。
5.2 HAProxy状态页
HAProxy状态页可以显示当前HAProxy的运行状态和统计信息。
5.3 IP透传
IP透传可以将客户端的真实IP地址透传到后端服务器。
5.4 ACL
ACL(访问控制列表)可以用于控制访问权限。
5.5 自定义HAProxy错误界面
自定义HAProxy错误界面可以自定义各种错误页面。
5.6 HAProxy四层负载
HAProxy四层负载可以用于处理除HTTP以外的TCP协议应用服务访问。
5.7 HAProxy https实现
HAProxy支持https协议,可以实现证书安全。
小结与拓展
本文详细介绍了HAProxy的安装、配置和使用,包括负载均衡、调度算法、高级功能等。如果你对HAProxy还有其他疑问,可以关注我们的网站了解更多内容。
——顺亿,趣航编程网资深编辑
