六月学习之Haproxy Proxies配置
  eHipUjOuzYYH 2023年11月02日 27 0

5、Haproxy Proxies配置

代理相关配置
frontend <name>:用于定义一系列监听的端口,这些端口可接受客户端请求并与之建立连接
backend <name>:用于定义一系列后端服务器,代理将会将对应客户端的请求转发至这些服务器
listen <name>:通过关联"前端"和"后端"定义了一个完整的代理

5.1、mode参数

mode概念:设置haproxy实例运行的协议
mode语法:mode { tcp|http }
tcp:实例运行于TCP模式,不对7层报文做任何检查;通常用于SSL、SSH、MYSQL等应用
http:实例运行于HTTP模式,客户端请求服务端,服务端重新封装请求报文,请求后端真实节点

mode示例
#listen中定义mode
listen www *:8089
    mode tcp
    server web1 172.16.1.7:8080
#frontend中定义mode
frontend shop *:80
    mode http
    use_backend webcluster

5.2、bind参数

bind概念:设置haproxy实例运行的端口
bind语法:bind [<address>]:<port_range> [, ...] interface <interface>
<address>:可选选项,其可以为主机名、IPV4地址、IPV6地址或*;将其指定为*或0.0.0.0时,将监听当前系统的所有IPV4地址
<port_range>:可以是一个特定的TCP端口,也可是一个端口范围,如8080-9090
<interface>:指定物理接口名称,仅能在Linux系统上使用;其不能使用接口别名,只有管理有权限指定绑定的物理接口

bind示例
#listen中定义bind
listen proxy.qingchen.com
    bind *:80 #单个端口
    mode tcp
    server web1 172.16.1.7:8080
#frontend中定义bind
frontend proxy.qingchen.com
    bind *:88999-9090
    mode tcp
    use_backend webcluster

5.3、maxconn参数

maxconn概念:设定一个前端的最大并发连接数,对于大型站点来说,应该尽可能提高此值,从而避免haproxy无法应答用户请求,当然,此值最大值不能超出global段中的定义
maxconn注意:haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间,这意味着经过适当优化后,1GB的可用RAM空间将能维护40000-50000并发连接
maxconn语法: maxconn <conns>
<conns>:如果为<conns>指定了一个过大值,极端场景下,其最终占据的空间可能会超出当前主机的可用内存,这可能会带来意想不到的结果,因此,将其设定了一个系统可接受值

maxconn示例
#Global settings(定义全局,最大不能超过4000并发连接数)
global
    maxconn 4000
#defaults settings(当frontend没定义则使用默认,最大不能超过3000并发连接数)
defaults
    maxconn 3000
#frontend settings(定义每个站点的最大连接数,所有站点并发值加起来不能超过Global中的设定)
frontend proxy.qingchen.com
    mode http
    maxconn 2000
frontend ha.qingchen.com
    mode http
    maxconn 2000

5.4、server参数

为后端声明一个server节点信息,因此,不能用于defaults和frontend区段
server语法: server <name> <address>[:port] [param*]
<name>:为此服务器指定标识名称,会出现在日志文件中
<address>:填写节点的IPV4地址,也支持使用可解析的主机名称
[:port]:指定将连接所发往节点的目标端口,如未设定,则使用客户端请求的端口
[param*]:为此服务器设定的一系列参数,其可用的参数非常多,下面仅说明几个常用的参数

5.4.1、backup

backup设定为备用服务器
在负载均衡场景中,所有的正常server均不可用时,此backup节点则会顶替提供服务
backend webcluster
    server web1 172.16.1.7:80 backup #当8与9都节点异常,则启用7节点
    server web2 172.16.1.8:80
    server web3 172.16.1.9:80

5.4.2、check

check:对此server进行TCP的健康状态检查
backend webcluster
    server web1 172.16.1.7:80 backup #当8与9都节点异常,则启用7节点
    server web2 172.16.1.8:80 check port 80 #检测tcp的80端口
    server web3 172.16.1.9:80 check port 80

5.4.3、inter

inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为2000毫秒
backend webcluster
    server web1 172.16.1.7:80 backup
    server web2 172.16.1.8:80 check inter 3000
    server web3 172.16.1.9:80 check inter 3000

5.4.4、rise

rise <count>:设置离线状态转换至正常状态需要成功检查的次数
backend webcluster
    server web1 172.16.1.7:80 backup
    server web2 172.16.1.8:80 check inter 3000 rise 2
    server web3 172.16.1.9:80 check inter 3000 rise 2

5.4.5、fall

fall <count>:设置正常状态节点转换为不可用状态,需要检查的次数
backend webcluster
    server web1 172.16.1.7:80 backup
    server web2 172.16.1.8:80 check inter 3000 rise 2 fall 3
    server web3 172.16.1.9:80 check inter 3000 rise 2 fall 3

5.4.6、maxconn

maxconn <maxconn>:指定此服务器接受的最大并发连接数
如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放
backend webcluster
    server web1 172.16.1.7:80 backup
    server web2 172.16.1.8:80 check inter 3000 rise 2 fall 3 maxconn 2000
    server web3 172.16.1.9:80 check inter 3000 rise 2 fall 3 maxconn 3000

5.4.7、maxqueue

maxqueue <maxqueue>:设定请求队列的最大长度
当请求超过maxconn设定的数值,剩余请求进入排队状态,排队的最大长度由maxqueue决定
#节点总共能处理的并发连接之和不能超过global设定的maxconn
backend webcluster
    balance roundrobin
    server web1 172.16.1.7:80 check maxconn 2000 maxqueue 200
    server web2 172.16.1.8:80 check maxconn 2000 maxqueue 200

5.4.8、weight

weight <weight>:服务器节点权重,默认为1,最大值为256
0表示不参与负载均衡,等同于将该节点进行下线处理(可以通过脚本实现滚动上线于下线)
backend webcluster
    server web1 172.16.1.7:80 backup
    server web2 172.16.1.8:80 check inter 3000 rise 2 fall 3 maxconn 2000 maxqueue 200 weight 2
    server web3 172.16.1.9:80 check inter 3000 rise 2 fall 3 maxconn 3000 maxqueue 200 weight 2

5.5、使用子配置管理

当业务众多时,将所有配置都放在一个配置文件中,会造成维护困难
可以考虑按业务分类,将配置信息拆分,放在不同的自配置文件中,从而达到方便维护的目的

5.5.1、创建子配置文件

#创建子配置文件,注意,必须为cfg后缀
mkdir /etc/haproxy/conf.d/
vim /etc/haproxy/conf.d/app.qingchen.net.cfg
frontend app_web
    bind *:8899
    mode http
    use_backend app_servers
    
backend app_servers
    balance roundrobin
    server web1 172.16.1.7:8888 check inter 3000 fall 2 rise 5
    server web2 172.16.1.8:8888 check inter 3000 fall 2 rise 5

5.5.2、修改unit配置

#添加子配置目录到unit文件中,使其能加载子目录配置
vim /usr/lib/systemd/system/haproxy.service
Description=HAProxy Load Balancer
After=network-online.target
Wants=network-online.target

[Service]
EnvironmentFile=-/etc/sysconfig/haproxy
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"

#定义配置文件路径变量
Environment="CONFIG_D=/etc/haproxy/conf.d/"
#启动或停止使用-f调用CONFIG_D
ExecStartPre=/usr/sbin/haproxy -f $CONFIG -f $CONFIG_D -c -q $OPTIONS
ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -f $CONFIG_D -p $PIDFILE $OPTIONS
ExecReload=/usr/sbin/haproxy -f $CONFIG -f $CONFIG_D -c -q $OPTIONS
##
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
SuccessExitStatus=143
Type=notify

[Install]
WantedBy=multi-user.target

5.5.3、重载服务

systemctl daemon-reload
systemctl restart haproxy

netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8899            0.0.0.0:*               LISTEN      112435/haproxy
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: DB-Engines Ranking 下一篇: nginx 负载均衡
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Yoru5qB4TSKM   2023年12月10日   39   0   0 服务器重启IP
  9JCEeX0Eg8g4   2023年12月11日   26   0   0 mysql配置文件