HAPROXY反向代理与负载均衡
Haproxy可以根据工作模式的不同,工作在OSI模型的四层(mode TCP)或者七层(mode http),来实现调度
基本的功能如下:
官方文档的地址:https://cbonte.github.io/haproxy-dconv/
Haproxy的配置组成
默认的端口为5000,但是在实现正常的代理功能之后,就会根据frontend中设置的监听端口进行变换
主配置文件:/etc/haproxy/haproxy.cfg(程序包为haproxy,服务名也为haproxy),主要分为两大配置段:
1.global 全局配置段
默认选项 值
nbproc NUMBER (指定haproxy工作进程数,默认为1,)
daemon (默认后台)
log IP FACILITH (结合/etc/rsyslog.conf日志配置文件,指定haproxy日志存放地址和设施类型,需要开启网络功能)
maxconn NUMBER (单个haproxy进程能接受的最大的并发连接数,默认为4000)
chroot /PATH (实现haproxy进程的禁锢,默认路径/var/lib/haproxy)
2.proxies 代理配置段
defaults:默认的配置段(对下面的三个配置段都默认)
mode http 工作模式的定义(默认情况下haproxy提供的就是web服务,作为http的反向代理服务)
option forwardfor except 127.0.0.0/8 将客户端请求报文转发给后端RS时,加入其地址至首部信息中,除haproxy本机外
frontend:面对Client的前端服务器配置段
frontend F_NAME (自定义前端的服务名称)
bind IP:PORT1,:PORT2 (绑定提供给Client服务的IP地址与端口,可监听多个端口)
default_backend B_NAME (调度给的后端设置的服务名称)
backend:面对RS的后端服务器配置段
backend B_NAME (自定义后端的服务名称)
balance ALGORITHM (指定调度算法)
default-server OPTIONS (定义server后的默认参数设置)
server S_NAME RS_IP:PORT OPTIONS (指定后端RS的IP地址和服务端口,自定服务名,便于日志查看)
listen:适用于1对1的前端与后端环境,是两者集合
listen NAME
bind IP:PORT1,:PORT2
balance ALGORITHM
server S_NAME RS_IP:PORT
balance配置对应的调度算法
1.roundrobin
基于权重的轮询,支持权重运行时的动态修改生效,慢启动(则是在均匀平和的情况下,进行负载的调整)
2.static-rr
静态的基于权重的轮询
3.leastconn
根据后端RS的连接数,较小的优先调度,相等后进入轮询
4.first
根据列表顺序进行调度,在第一个RS负载满载之后,才调度给下一个RS
5.source
根据原地址hash运算进行调度,第一次按照权重比列调度,后续实现绑定
6.uri
根据访问的uri路径做hash运算,并除以RS的总权重取模,挑选出RS,实现绑定
7.hdr(NAME)
根据Client的请求报文的主机头部做hash运算,实现指定调度
后端主机server后可跟的OPTIONS参数选项
1.weight NUMBER
权重,默认为1
2.maxconn NUMBER
后端server的最大并发连接数,默认是default配置段里的3000
3.backup
设定备用服务器sorry server,建议使用haproxy担当
4.check
对于后端提供服务的RS做健康性检查
5.disabled
指定server处于宕机状态,一般应用于服务的升级,称为灰度发布
6.redir URL
重定向新的URL地址,注意URL地址需要是客户端能够直接访问的地址
7.cookie VALUE
不同的server有不同的cookie,在客户端发来的请求报文中则会根据设定的cookie值来进行调度,举列如下:
backend websrvs
cookie WEBSRV insert nocache
server srv1 172.16.0.6:80 weight 2 check rise 1 fall 2 maxconn 3000 cookie srv1
server srv2 172.16.0.7:80 weight 1 check rise 1 fall 2 maxconn 3000 cookie srv2
Haproxy实现网页界面的统计管理
可在独立的listen配置段进行设置(保证安全性)
加入选项:stats enable,并且访问默认uri:/haproxy?stats,即可在网页界面查看到当前所有服务的状态信息
stats uri /PATH 重新定义访问uri
stats hide-version 可隐藏haproxy版本
stats refresh TIME 设定自动刷新时间,默认单位为秒
通过以下两项可以设定指定验证用户可以访问统计页面
stats realm <realm> 显示输入用户、密码的提示标题,示例:stats realm HAproxy\ Statistics(\是为了转义空格)
stats auth USER:PASSWORD 用户、密码设定
stats admin if true 启用页面管理功能
ACL:访问控制列表的设定
基本acl条件设定格式如下:
acl <aclname> <criterion> [flags] [operator] [<value>] ...
<criterion>条件有如下:
src IP 指定源IP
src_port 指定源端口
dst IP 指定目标IP
dst_port 指定目标端口
acl作为条件时有三种逻辑关系:
与 if ACL_NAME-1 ACL_NAME-2
或 if ACL_NAME-1 || ACL_NAME-2
非 if ! ACL_NAME
block if acl 表示当符合acl条件时,阻止访问
基于acl实现动静分离的实验: