lazybios

由Haproxy简单配置文件到几个基本概念

本篇通过一个简单的haproxy配置文件范例进行说明Hapraxy的一些基本概念,下面是完整的配置文件
“`bash

全局配置

global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy maxconn 20000 user haproxy group haproxy daemon

默认配置 在后面的设置中对应字段默认配置参数可由“defaults”设定

defaults log global mode http option httplog option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http

Haproxy状态信息

listen stats 0.0.0.0:1936 mode http stats enable stats hide-version stats realm Haproxy\ Statistics stats uri /admin stats auth admin:admin

前端配置

frontend dispatch bind *:80 default_backend relay_group

后端配置

backend relay_group balance roundrobin mode http server relay1 11.11.1.22:80 check server relay2 11.11.1.23:80 check ”`

前端(Frontend)

暴露给用户访问的机器,即haproxy所在的机器,用户的请求通过该前端机根据相应负载均衡算法分发到对应的后端机 “`bash

frontend 定义系列监听套接字

frontend dispatch

定义前端的监听地址和端口

bind *:80

默认后端为 relay_group

default_backend relay_group ”` 上面没有配置访问控制列表(ACL),一般在这里可以通过ACL访问控制设置符合特定要求的特定路径转发,详细的ACL后面会专门开一篇记一下

后端(Backend)

处理前端机分发过来得请求的后端server,即真正执行程序的地方,可以是若干个server服务组合 “`bash

backend 定义后端服务器设置

backend relay_group

负载均衡算法类型设置为 roundrobin

balance roundrobin

mode 指定协议

mode http

server ip:port check 设置服务地址和端口,并设置健康检查

server relay1 11.11.1.22:80 check server relay2 11.11.1.23:80 check ”` 上面设置了一个后端组relay_group,会根据前端机满足的分发要求,根据设置好的负载算法选择合适的server进行分发,其中check字段代表server健康检查,用于自动检测server健康状态,如果发现不可达会自动将其从group重删除出去,以防影响到正常服务

Haproxy的状态信息

# listen <name>:通过关联“前端”和“后端”定义了一个完整的代理
listen stats 0.0.0.0:1936
# mode 执行协议类型
mode http
# 开启状态统计
stats enable
# 启用统计报告并隐藏HAProxy版本报告,不能用于“frontend”区段
stats hide-version
# 统计页面密码框上提示文本,不能用于“frontend”区段
stats realm Haproxy\ Statistics
# 访问状态信息页面路径 http://localhost:1936/admin
stats uri /admin
# 启用带认证的统计报告功能并授权一个用户帐号,不能用于“frontend”区段
stats auth admin:admin

负载均衡算法

Haproxy支持很多负载算法,这里罗列出常用的3种

roundrobin

基于权重进行轮询,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整生效,,Haproxy默认就是这个

leastconn

新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,可以在运行时调整其权重。

source

hash算法,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性

-完-

微信关注「日拱一卒」公众号