配置文件整体结构
global-->defaults-->listen/frontend/backend
global | 全局配置,进程级配置,通常和操作系统配置有关 |
defaults | 默认引用到f/b/l中,若在f/b/l中有相同参数配置,defaults相同参数配置会被覆盖 |
listen | 1.3版本后就简单的设置个status查看页面 |
frontend | 前端虚拟节点,vip |
backend | 后端服务器集群,rip |
重要参数详解
global
log 127.0.0.1 local0 info | 全局日志配置,local0是日志设备,info表示日志级别(err、warning、info、debug 4中可选)。这个配置表示:使用127.0.0.1的rsyslog服务中的local0日志设备,记录日志等级为info。 vim /etc/rsyslog.cfg $ModLoad imudp $UDPServerRun 514 local0.* /var/log/haproxy.log vim/etc/sysconfig/rsyslog SYSLOGD_OPTIONS="-r -m 0 -c 2" /etc/init.d/rsyslogrestart | ||||
chroot /usr/share/haproxy | 修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限。 | ||||
user haproxy group haproxy | 设置运行Haproxy进程的用户和组,也可使用uid/gid代替。 | ||||
daemon | 设置Haproxy进程后台运行,默认运行模式。 | ||||
nbproc 2 | 设置Haproxy启动时可创建的进程数,此参数要求必须将Haproxy运行模式设置为daemon模式,默认情况下只启动一个进程。一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式!!使用多进程时建议小于cpu核心数,如:有两颗6核cpu,就<=2*6。创建多个进程,可减少每个进程的任务队列,但是过多的进程可能会导致进程崩溃。 | ||||
pidfile /var/run/haproxy.pid | 指定Haproxy进程的pid文件。启动进程的用户,必须有访问此文件的权限!! |
defaults
mode http | 设置Haproxy实例默认的运行模式(tcp、http、health三种模式可选) tcp模式:在此模式下客户端和服务器端之间将建立一个全双工的连接,不会对7层报文做任何类型的检查,默认为tcp模式,经常用于ssl、ssh、smtp等应用。 http模式:在此模式下,客户端请求在转发至后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。 health模式:此模式基本已废。 |
option httplog | 启用日志记录http详细请求,可以由此看到client请求的是backend的哪个rs,默认是不记录的。 |
option httpclose | disable keep-alive |
option abortonclose | 当服务器负载很高的时候,自动结束掉当前队列处理时间比较长的连接 |
option dontlognull | 启用该项,日志中将不会记录空连接,所谓空连接就是在上游的负载均衡或者监控系统为了探测该服务是否存活可用时需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否监听等动作被称为空连接。 官方提示:如果上游没有其他负载均衡器的话,建议不要使用该参数。 |
retries3 | 设置连接后端服务器的失败重试次数,如果连接失败的次数超过这里的设置值,Haproxy会将对应的后端服务器标记为不可用,次参数也可在后面部分进行设置。 |
option redispatch | 当使用了cookie时,haproxy将会将请求的后端服务器的serverID插入到cookie中,以保证会话的session持久性,而此时,后端服务器宕机,但是客户端的cookie不会刷新,设置此参数,将会将客户请求强制定向到另外一个后端server上,以保证服务的正常。 |
timeout connect 5000 | 成功连接到一台服务器的最长等待时间,默认单位为ms,也可用其他时间单位代替。 |
timeout client 50000 | 连接客户端发送数据时最长等待时间 |
timeout server 50000 | 服务器回应客户端数据发送的最长等待时间。 |
配置文件中的一些关键字详解
bind *:80 | 此指令仅能用于frontend和listen区段,用于定义一个或几个监听的套接字。 <address>:可选选项,其可以为主机名、IPv4地址、IPv6地址或*;省略此选项、将其指定为*或0.0.0.0时,将监听当前系统的所有IPv4地址;<port_range>:可以是一个特定的TCP端口,也可是一个端口范围(如5005-5010),代理服务器将通过指定的端口来接收客户端请求;需要注意的是,每组监听的套接字<address:port>在同一个实例上只能使用一次,而且小于1024的端口需要有特定权限的用户才能使用,这可能需要通过uid参数来定义;<interface>:指定物理接口的名称,仅能在Linux系统上使用;其不能使用接口别名,而仅能使用物理接口名称,而且只有管理有权限指定绑定的物理接口; |
maxconn 2048 | 设定一个前端的最大并发连接数,因此,其不能用于backend区段。对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,从而避免无法应答用户请求。当然,此最大值不能超出“global”段中的定义。此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间。这意味着经过适当优化后,有着1GB的可用RAM空间时将能维护40000-50000并发连接。 如果为<conns>指定了一个过大值,极端场景下,其最终占据的空间可能会超出当前主机的可用内存,这可能会带来意想不到的结果;因此,将其设定了一个可接受值方为明智决定。其默认为2000。 |
option forwardfor | HAProxy工作于反向代理模式,其发往服务器的请求中的客户端IP均为HAProxy主机的地址而非真正客户端的地址,这会使得服务器端的日志信息记录不了真正的请求来源,“X-Forwarded-For”首部则可用于解决此问题。HAProxy可以向每个发往服务器的请求上添加此首部,并以客户端IP为其value。 |
default_backend | 在没有匹配的”use_backend”规则时为实例指定使用的默认后端,因此,其不可应用于backend区段。在”frontend”和”backend”之间进行内容交换时,通常使用”use-backend”定义其匹配规则;而没有被规则匹配到的请求将由此参数指定的后端接收。 <backend>:指定使用的后端的名称; |
balance
--定义负载均衡算法,可用于“defaults”、“listen”和“backend”。用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。
支持的算法有:
roundrobin | 基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接;并支持慢启动。 |
static-rr | 基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;不支持慢启动,在高负荷的情况下,服务器重新上线时会立即被分配大量连接。 |
leastconn | 适用于长连接的会话,新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的, 可以在运行时调整其权重; |
source | 将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性; |
server<name><address>[:port][param*]
--为后端声明一个server,因此,不能用于defaults和frontend区段。
<name> | 为此服务器指定的内部名称,其将出现在日志及警告信息中;如果设定了”http-send-server-name”,它还将被添加至发往此服务器的请求首部中; |
<address> | 此服务器的的IPv4地址,也支持使用可解析的主机名,只不过在启动时需要解析主机名至相应的IPv4地址; |
[:port] | 指定将连接请求所发往的此服务器时的目标端口,其为可选项;未设定时,将使用客户端请求时的同一相端口; |
[param*] | 为此服务器设定的一系参数;其可用的参数非常多,具体请参考官方文档中的说明,下面仅说明几个常用的参数; 服务器或默认服务器参数: |
-->backup | 设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server; |
-->check | 启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如: |
---->inter<delay> | 设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟; |
---->rise<count> | 设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数; |
---->fall<count> | 确认server从正常状态转换为不可用状态需要检查的次数; |
-->cookie<value> | 为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能; |
-->maxconn<count> | 指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放; haproxy 有n个进程,每个支持m个连接,后端有x个服务器,每个最大支持y个连接,则 n*m <= x*y,如果后端服务器支持排队,则n*m <= x*(y+z),z为每个服务器的排队队列 |
-->maxqueue | 设定请求队列的最大长度; |
-->redir<prefix> | 启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应;需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以免造成循环 |
-->weight<count> | 权重,默认为1,最大值为256,0表示不参与负载均衡(不被调度) |
本文出自 “挨刀客” 博客,请务必保留此出处http://chboy.blog.51cto.com/9959876/1768170
原文地址:http://chboy.blog.51cto.com/9959876/1768170