目录
HAProxy的一些关键特点:
-
负载均衡:HAProxy能够均衡分配网络负载到多台服务器,提高应用程序的性能和可靠性。
-
高可用性:通过健康检查和自动故障转移,HAProxy可以确保服务的高可用性。
-
协议支持:支持多种协议,包括HTTP、HTTPS、SMTP、POP3、IMAP、RADIUS、MySQL、PostgreSQL等。
-
会话持久性:HAProxy支持多种会话持久性机制,如cookie、SSL、IP等,可以保持用户会话的连续性。
-
安全特性:提供SSL卸载功能,减少服务器负载,并支持各种安全特性,如用户认证、SSL加密等。
-
易于配置:HAProxy的配置文件清晰易懂,支持多种配置选项,易于管理和维护。
-
性能优化:HAProxy优化了TCP和HTTP协议的处理,提供高性能的网络代理服务。
-
监控和日志:HAProxy提供详细的日志和监控功能,方便管理员监控服务器状态和性能。
-
跨平台支持:HAProxy可以在多种操作系统上运行,包括Linux、Unix和Windows。
一、实验环境的部署
安装 haproxy
yum inst haproxy -y
配置一台主机 172.100
两台副机 172.10 和 172.20
注:所有的火墙关闭
global 指对于所有的设定
defaults 对于代理的设定
设定一个前端:
配置 地址和监听
二、日志分离
三、常用配置参数
disable
maxconn
haproxy 热跟新方法:
四、算法
1)静态算法
按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。
不支持热处理
不支持慢启动
first
2)动态算法
-
基于后端服务器状态进行调度适当调整:HAProxy会根据后端服务器的健康状况来动态调整其调度策略,确保新请求被分配到当前负载较低的服务器上,以提高服务的性能和稳定性。
-
新请求将优先调度至当前负载较低的服务器:当有新请求到来时,HAProxy会根据当前各服务器的负载情况,将新请求优先调度到负载较低的服务器上,这样可以有效减少延迟和错误的发生。
-
权重可以在haproxy运行时动态调整无需重启:HAProxy的权重设置可以在运行过程中动态地进行调整,而无需重新启动或关闭服务,这使得负载均衡器的配置和管理更加灵活和高效。
总的来说,HAProxy通过实时监控和服务器状态调整,实现了高效的负载均衡和资源优化,从而提高了网络服务的可靠性和性能。
roundrobin
谁闲了给谁
基于负载
least'conn
谁的链接少给谁
1)leastconn加权的最少连接的动态 2)支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接) 3)比较适合长连接的场景使用,比如: MySQL等场景。
3)其他算法
既可以算作动态算法
又能通过为动态算法
source
默认情况下是静态算法
1.map-base
2.hash
uri
1.rul_param
可以指定id
对uid进行取模
权重都设置为1 或者一样,
使用取名的方式
链接不能断开 尽量不用数字
建议使用
name=lee
name=test
2.hdr
针对用户每个http头部(header)请求中的指定信息做hash,此处由 name 指定的http首部将会被取出并做hash计算然后由服务器总权重取模以后派发至某挑出的服务器,如果无有效值,则会使用默认的轮询调度。
-v 查看报文
五、高级功能及配置
haproxy状态页监控
状态页的设定
通过web界面,显示当前HAProxy的运行状态
-
stats enable
:启用HAProxy的状态页面。默认情况下,它会使用默认的参数来设置。 -
stats hide-version
:在状态页面中隐藏HAProxy的版本信息。出于安全考虑,有时候不希望外界知道正在使用的HAProxy版本。 -
stats refresh <delay>
:设置状态页面的自动刷新时间间隔。<delay>
是一个变量,需要替换为实际的延迟时间,例如10s
代表每10秒刷新一次。如果没有设置,则默认不会自动刷新。 -
stats uri <prefix>
:允许自定义访问状态页面的URI。<prefix>
是一个变量,需要替换为实际的URI前缀。默认的URI是/haproxy?stats
。 -
stats auth <user>:<password>
:设置访问状态页面时的认证信息。<user>
和<password>
是变量,需要替换为实际的用户名和密码。可以定义多个用户,每行指定一个用户。如果不设置,默认情况下是没有认证的。 -
stats admin { if | unless } <cond>
:启用了状态页面中的管理功能。{ if | unless } <cond>
是一个条件语句,用于指定在什么条件下启用管理功能。<cond>
是一个变量,需要替换为实际的条件。
启用状态页
iP透传
web 服务器中需要记录客户端的真实ip地址,用于做访问统计,安全防护,行为分析,区域排行等场景。
1)七层透析
2)4层透析
则是把httpd 改为tcp
ACL
访问控制列表(ACL)是一种基于包过滤的访问控制技术,它可以根据设定的条件对经过服务器传输的数据包进行过滤,即对接收到的报文进行匹配和过滤。ACL基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配,并执行进一步操作,比如允许其通过或丢弃。
ACL在网络安全领域中扮演着重要的角色,它能够有效地管理和控制网络资源的访问,保护敏感信息不被非法访问,提高网络的安全性和稳定性。
-v 查看数据报文
base
就是一长串 或者在名字里面 或者在路径里面
-
base_beg: prefix match
- 前缀匹配,匹配URL的开始部分。 -
base_dir: subdir match
- 子目录匹配,匹配URL中的子目录。 -
base_dom: domain match
- 域名匹配,匹配请求的域名。 -
base_end: suffix match
- 后缀匹配,匹配URL的结束部分。 -
base_len: length match
- 长度匹配,根据URL的长度进行匹配。 -
base_reg: regex match
- 正则表达式匹配,使用正则表达式匹配URL。 -
base_sub: substring match
- 子字符串匹配,匹配URL中的任意部分
基于源地址的访问控制
基于ip或子网调度访问
浏览器类型
动静分离
基于路径实现动静分离
基于路径的一个访问
自定义haproxy错误页面
-
使用errorfile指令:指定一个错误文件,当服务器遇到特定类型的错误时,将显示这个错误文件。例如,可以创建一个404错误页面(
errorfile 404 /path/to/your/404.html
),当用户尝试访问不存在的页面时,服务器将显示这个404页面。 -
使用errorloc指令:指定一个错误位置,当服务器遇到特定类型的错误时,将显示该位置的页面。这允许您根据不同的错误类型在不同的文件夹中创建自定义错误页面。
通过这两种方法,可以创建一个更加用户友好的错误处理机制,使得在遇到错误时看到的不再是简单的错误代码,而是自定义的、有用的错误信息提醒页面
首先 停止 httpd 和 nginx
基于http定向到网站上
四层负载
既能做4层也能做7层
证书制作
制作证书的密钥
创建