负载均衡介绍

负载均衡(Load Balancing)是一种将网络流量或工作负载分发到多个服务器或计算资源的技术,旨在提高系统的性能、可靠性和可扩展性。它在现代计算机网络和服务器架构中扮演着重要角色,特别是在处理大量用户请求或高并发访问的情况下。 主要目标: 性能优化:通过将工作负载均匀地分散到多台服务器上,避免某一台服务器负载过重,提高整体的响应速度和吞吐量。 可靠性提高:如果有一台服务器发生故障,负载均衡器可以将流量自动转发到其他正常工作的服务器,确保服务的连续性和高可用性。 扩展性增强:通过增加服务器的数量,负载均衡可以轻松地扩展系统以适应日益增长的流量和用户需求。 常见的软件型负载均衡有:nginx(四层、七层)、haproxy(四层、七层)、lvs(四层)

HAproxy介绍

HAProxy是一种免费且开源的高性能TCP/HTTP负载均衡器和代理服务器。它的主要作用是将传入的网络流量分发到多台服务器(例如Web服务器、应用服务器),以提高Web应用程序或服务的性能、可靠性和可扩展性。HAProxy代表High Availability Proxy,意为高可用性代理。 HAProxy的主要特点包括: 负载均衡:HAProxy可以使用各种算法(如轮询、最小连接数、基于源IP等)将传入的流量分发到后端服务器。这确保每个服务器都能公平地处理负载,防止某一台服务器过载。 代理:HAProxy充当客户端(用户或应用程序发出请求)和后端服务器之间的中间人。它接收传入的请求,将其转发到适当的服务器,然后将响应传递回客户端。 高可用性:HAProxy支持主动-被动故障转移配置,以确保高可用性。如果一台服务器或后端不可用,HAProxy可以将流量路由到备用服务器,保持服务的连续性。 SSL终止:HAProxy可以处理SSL/TLS加密和解密,减轻后端服务器的SSL处理负担。这对于卸载与SSL相关的任务非常有用。 会话保持:有时称为“粘性会话”,HAProxy可以在后续请求期间将用户的会话保持在同一后端服务器上。这对于需要有状态连接的应用程序或需要从同一服务器始终访问用户数据的情况非常重要。 健康检查:HAProxy可以定期检查后端服务器的健康状况,以确保它们正常运行并能够处理请求。不健康的服务器可以被暂时排除在轮询之外,直到它们恢复正常。 日志和监控:HAProxy提供了广泛的日志和监控功能,允许管理员跟踪流量、性能指标,并识别潜在问题。

HAproxy的安装及配置

apt安装 apt install haproxy 编译安装

yum install libtermcap-devel ncurses-devel libevent-devel readline-devel  
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz #lua不能低于5.3版本,安装haproxy
tar xvf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
tar xvf haproxy-2.0.4.tar.gz
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel
systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof
tcpdump wget ntpdate
#HAProxy 1.8及1.9版本编译参数:
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1
USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
#HAProxy 2.0编译参数:
# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1
USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.3.5/src/
LUA_LIB=/usr/local/src/lua-5.3.5/src/ PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# cp haproxy /usr/sbin/

image.png image.pngimage.png

基础配置

image.png HAPrpxy的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分。 global:全局配置段

log:设置日志配置,指定日志文件的路径和日志级别。
chroot:指定HAProxy进程的根目录。在HAProxy启动后,进程将被chroot到这个目录,增强安全性。
stats socket:配置用于与HAProxy统计和管理接口通信的Unix套接字的路径。
user / group:指定HAProxy进程的运行用户和用户组。
daemon:使HAProxy以守护进程(后台)模式运行。
maxconn:设置HAProxy支持的最大并发连接数。
nbproc:设置HAProxy实例使用的处理器核心数。
cpu-map:指定处理器核心与进程的映射关系。
tune:配置各种性能相关的参数,例如调整系统缓冲区大小等
maxconnrate #每个进程每秒创建的最大连接数量
spread-checks #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间
pidfile #指定pid文件路径

roxies 是用于定义代理配置段的部分。代理配置段用于设置和配置后端服务器组,也被称为"backend"。每个代理配置段定义一个后端服务器组,并设置该组的负载均衡策略、后端服务器列表以及其他相关配置。

# 后端服务器组1
defaults [<name>] #默认配置项,针对以下的frontend、backend和lsiten生效,可以多个name也可以没有
name
frontend <name> #前端servername,类似于Nginx的一个虚拟主机 server。
backend <name> #后端服务器组,等于nginx的upstream
listen <name> #将frontend和backend合并在一起配置

defaults 配置参数:

option redispatch #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接,关闭
option http-keep-alive #开启与客户端的会话保持
option forwardfor #透传客户端真实IP至后端web服务器
mode http #设置默认工作类型
timeout http-keep-alive 120s #session 会话保持超时时间,范围内会转发到相同的后端服务器
timeout connect 120s #客户端请求从haproxy到后端server的最长连接等待时间(TCP之前)
timeout server 600s #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP之后)
timeout client 600s #设置haproxy与客户端的最长非活动时间
timeout check 5s #对后端服务器的默认检测超时时间

frontend配置参数

bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中
bind [<address>]:<port_range> [, ...] [param*]
listen http_proxy #监听http的多个IP的多个端口和sock文件
bind :80,:443,:8801-8810
bind 10.0.0.1:10080,10.0.0.1:10443
bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
listen http_https_proxy #https监听
bind :80
bind :443 ssl crt /etc/haproxy/site.pem
生产示例:
frontend WEB_PORT
bind :80,:8080
bind 192.168.7.102:10080,:8801-8810,192.168.7.101:9001-9010
mode http/tcp #指定负载协议类型
use_backend backend_name #调用的后端服务器组名称

backend配置参数

mode http/tcp #指定负载协议类型
option #配置选项
server #定义后端real server
注意:option后面加httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更多应用层
检测功能
check #对指定real进行健康状态检查,默认不开启
addr IP #可指定的健康状态监测IP
port num #指定的健康状态监测端口
inter num #健康状态检查间隔时间,默认2000 ms
fall num #后端服务器失效检查次数,默认为3
rise num #后端服务器从下线恢复检查次数,默认为2
weight #默认为1,最大值为256,0表示不参与负载均衡
backup #将后端服务器标记为备份状态
disabled #将后端服务器标记为不可用状态
redirect prefix http://www.magedu.net/ #将请求临时重定向至其它URL,只适用于http模式
maxconn <maxconn>:当前后端server的最大并发连接数
backlog <backlog>:当server的连接数达到上限后的后援队列长度
配置负载均衡

image.png

option httpchk:指定对后端服务器进行健康检查的HTTP请求路径。HAProxy会周期性地向后端服务器发送这个HTTP请求来检查服务器的健康状态。
option redispatch:当后端服务器失效(down)时,HAProxy将会重新分配请求给其他可用的服务器。这个选项确保请求不会被丢弃,而是重新分发给其他服务器。
option forwardfor:在HTTP请求中添加 X-Forwarded-For 头部,以告知后端服务器请求的真实客户端IP地址。
option http-server-close:在每个请求后关闭后端服务器的连接,而不是保持持久化连接。
option http-keep-alive:保持后端服务器和客户端之间的HTTP持久连接,以提高性能。
option http-use-proxy-header:使用代理的HTTP请求头部,用于告知后端服务器请求的真实客户端IP地址和端口。
option tcp-check:配置对后端服务器进行TCP层面的健康检查。
option ssl-hello-chk:配置对后端服务器进行SSL/TLS握手的健康检查。
option allbackups:将所有服务器标记为备份服务器,只有在主服务器不可用时才会使用备份服务器。
option prefer-last-server:偏好使用最后一个服务器,使得在服务恢复时先使用后添加的服务器。

image.pngimage.png