HAPROXY反向代理与负载均衡

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实现动静分离的实验:



猜你喜欢

转载自blog.csdn.net/Ruixycowboy/article/details/82558804
今日推荐