前面配置负载均衡的示例中,使用了一个简单的配置文件
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:7000
default_backend neo4j
backend neo4j
server s1 127.0.0.1:8080 maxconn 32
server s2 127.0.0.1:8081 maxconn 32
listen admin
bind *:7080
stats enable
通过这个配置文件,我们来了解一下HAProxy配置文件结构
HAProxy配置文件主要由5个部分组成:
(1)global 部分
全局配置参数,属于进程级的配置,通常和操作系统配置有关
(2)defaults 部分
默认参数的配置部分,在此部分设置的参数值,默认会自动引用到下面的frontend、backend和listen部分中,如果在下面部分中也配置了与defaults部分一样的参数,那么defaults参数自动被覆盖
(3)frontend 部分
用于设置接收用户请求的前端虚拟节点,frontend可以根据ACL规则直接指定要使用的后端backend
(4)backend 部分
用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求
(5)listen 部分
此部分是frontend部分和backend部分的结合体。在HAProxy 1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。为了保持兼容性,HAProxy新的版本仍然保留了listen组件的配置方式。目前在HAProxy中,两种配置方式任选其一即可
详细参数说明
global
daemon
maxconn 256
daemon:设置HAProxy进程进入后台运行。这是推荐的运行模式
maxconn:设定每个HAProxy进程可接受的最大并发连接数
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
mode:设置HAProxy实例默认的运行模式,主要有tcp、http
tcp模式:在此模式下,工作在4层,客户端和服务器端之间将建立一个全双工的连接,不会对七层报文做任何类型的检查,默认为tcp模式
http模式:在此模式下,工作在7层,客户端请求在转发至后端服务器之前将会被深度分析
timeout connect:成功连接到一台服务器的最长等待时间,默认单位是毫秒
timeout client:连接客户端发送数据时最长等待时间,默认单位是毫秒
timeout server:服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒
frontend http-in
bind *:7000
default_backend neo4j
定义了一个名为“http-in”的前端虚拟节点
bind:此选项只能在frontend和listen部分进行定义,用于定义一个或几个监听的套接字
bind的使用格式为: bind [<address>:<port_range>] interface <interface>
address为可选选项,其可以为主机名或IP地址,如果将其设置为“*”或“0.0.0.0”,将监听当前系统的所有IPv4地址。port_range可以是一个特定的TCP端口,也可是一个端口范围,interface为可选选项,用来指定网络接口的名称
default_backend:指定默认的后端服务器池,也就是指定一组后端真实服务器,而这些真实服务器组将在backend段进行定义
backend neo4j
server s1 127.0.0.1:8080 maxconn 32
server s2 127.0.0.1:8081 maxconn 32
这个部分通过backend关键字定义了一个名为neo4j的后端真实服务器组
server:这个关键字用来定义多台后端真实服务器,不能用于defaults和frontend部分。
使用格式为:server <name> <address>[:port] [param*]
<name>:为后端真实服务器指定一个名称,随便定义一个即可
<address>:后端真实服务器的IP地址或主机名
<port>:指定连接请求发往真实服务器时的目标端口。在未设定时,将使用客户端请求时的同一端口
[param*]:为后端服务器设定的一系列参数
listen admin
bind *:7080
stats enable
listen定义了一个名为“admin”的实例,其实就是定义了一个HAProxy的监控页面
bind 指定一个或几个监听的套接字
stats enable 设置为开启状态