设为首页 收藏本站
查看: 2776|回复: 1

[经验分享] HAProxy配置文件详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-9 09:54:24 | 显示全部楼层 |阅读模式
  HAProxy的配置文件分为两个部份,第一部份为全局配置段(Global setting),第二部份为代理配置段(Proxies)。   全局配置段设置haproxy运行工作的一些特性,这一部份主要有与进程管理和安全相关的指令,与性能调整的指令和与调试相关的指令。而代理配置段又可以分为四个部份,一是"defaults <name>",这一部份设置的指令代表公共配置,即如果在后边的配置中没有显式的指定某个参数及值时,默认时就采用defaults中设置的值;二是"frontend <name>",这是定义一个面向客户端的配置,定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接;三是"backednd <name>",这是定义上游服务器组,定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器;四是"listen <name>",通过关联“前端”和“后端”定义了一个完整的代理,通常只对TCP流量有用,这是一个可以替代frontend和backend的指令,即可以把前端与后端都定义在一个listen中。所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号),此外,ACL名称会区分字母大小写。
    下面对全局配置段中的部份指令作一个简单介绍:
与进程管理和安全相关的指令:
chroot <jail dir>
修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;

daemon
让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;

gid <number>
以指定的GID运行haproxy,建议使用专用于运行haproxy的GID,以免因权限问题带来风险;

group <group name>
同gid,不过指定的组名;

log  <address> <facility> [max level [min level]]
定义全局的syslog服务器,最多可以定义两个;

log-send-hostname [<string>]
在syslog信息的首部添加当前主机名,可以为“string”指定的名称,也可以缺省使用当前主机名;

nbproc <number>
指定启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;

pidfile <pidfile>
pid文件路径;

uid <number>
以指定的UID身份运行haproxy进程;

user <user name>
同uid <number>,只是这里指定的是用户名称;
ulimit-n <number>
设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;

stats socket <path>
定义统计信息保存位置

node <name>
定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时;

description <text>
当前实例的描述信息。

这些与进程管理与安全相关的指令大多都不用指定,只作了解即可。

与性能调整相关的指令:
maxconn <number>
设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项“-n”,在“进程管理与安全相关的指令”中的"“ulimit-n”的值会根据maxconn自动调整;
maxpipes <number>
haproxy使用pipe完成基于内核的tcp报文重组,此选项则用于设定每进程所允许使用的最大pipe个数;每个pipe会打开两个文件描述符,因此,“ulimit -n”自动计算时会根据需要调大此值;默认为maxconn/4,其通常会显得过大;
noepoll
在Linux系统上禁用epoll机制;
nokqueue
在BSE系统上禁用kqueue机制;
nopoll
禁用poll机制;
nosepoll
在Linux禁用启发式epoll机制;
nosplice
禁止在Linux套接字上使用内核tcp重组,这会导致更多的recv/send系统调用;不过,在Linux 2.6.25-28系列的内核上,tcp重组功能有bug存在;
spread-checks <0..50, in percent>
在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长,这是对健康检测的一种优化;
tune.bufsize <number>
设定buffer的大小,同样的内存条件小,较小的值可以让haproxy有能力接受更多的并发连接,较大的值可以让某些应用程序使用较大的cookie信息;默认为16384,其可以在编译时修改,不过强烈建议使用默认值;
tune.chksize <number>
设定检查缓冲区的大小,单位为字节;更大的值有助于在较大的页面中完成基于字符串或模式的文本查找,但也会占用更多的系统资源;不建议修改;
tune.maxaccept <number>
设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大的吞吐率,默认在单进程模式下为100,多进程模式下为8,设定为-1可以禁止此限制,一般不建议修改;
tune.maxpollevents  <number>
设定一次系统调用可以处理的事件最大数,默认值取决于OS;其值小于200时可节约带宽,但会略微增大网络延迟,而大于200时会降低延迟,但会稍稍增加网络带宽的占用量;
tune.maxrewrite <number>
设定为首部重写或追加而预留的缓冲空间,建议使用1024左右的大小;在需要使用更大的空间时,haproxy会自动增加其值;
tune.rcvbuf.client <number>
定义在客户端内核套接字接收缓冲区的大小,单位为字节,建议不要调整此值;
tune.rcvbuf.server <number>
设定内核套接字中服务端接收缓冲的大小,单位为字节;强烈推荐使用默认值;
tune.sndbuf.client
定义在客户端内核套接字发送缓冲区的大小,单位为字节,建议不要调整此值;
tune.sndbuf.server:
定义在服务端内核套接字发送缓冲区的大小,单位为字节,建议不要调整此值;

上边的这些指令大多也是作为了解即可,在实际中并不常会调整这些参数。

与调试相关的指令:
debug
在调度haproxy时可以启用此参数,但在生产环境不应该启用;
quiet
haproxy启动后不会显示任何相关信息,这与在命令行启动haproxy时加上参数“-q”相同
与代理相关的配置涉及太多,官方文档中用了一个章节来介绍,在各代理配置段的各个部份都有相应的可用指令,请参考http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#4,这里我以一个配置文件实例来简单介绍。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
[iyunv@nod0 haproxy]# cat haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
#设置把haproxy的日志发往本地的rsyslog服务
    log         127.0.0.1 local2
#把haproxy进程限定在chroot指定的目录运行,此目录权限需要设定为除了haproxy用户有写权限限外其他的用户没有,并且是一个空目录
    chroot      /var/lib/haproxy
#pid文件的路径
    pidfile     /var/run/haproxy.pid
#设置proxy允许的最大并发连接数,如果在backend中没有指定server的maxconn的值,则可继承此值
    maxconn     4000
#运行haproxy的用户
    user        haproxy
#运行haproxy的组
    group       haproxy
#让haproxy以守护进程运行在后台
    daemon
    # turn on stats unix socket
#定义统计信息保存的位置
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
#默认设置
defaults
#设置haproxy的运行模式,有三种{http|tcp|health}
    mode                    http
#设置日志继承全局配置段的设置
    log                     global
#表示开始打开记录http请求的日志功能,详细的应查看官方文档的的关键字矩阵部分
    option                  httplog
#如果产生了一个空连接,那这个空连接的日志将不会记录
    option                  dontlognull
#打开http协议中服务器端关闭功能,使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录
    option http-server-close
#如果上游服务器上的应用程序想记录发起请求的客户端的IP地址,HAProxy会把客户端的IP信息发送给上游服务器,在HTTP请求中添加"X-Forwarded-For"字段,但当是haproxy自身的健康检测机制去访问上游服务器时是不应该把这样的访问日志记录到日志中的,所以用except来排除127.0.0.0,即haproxy身。
    option forwardfor       except 127.0.0.0/8
#当与上游服务器的会话失败(服务器故障或其他原因)时,把会话重新分发到其他健康的服务器上,当原来故障的服务器恢复时,会话又被定向到已恢复的服务器上。还可以用"retries"关键字来设定在判定会话失败时的尝试连接的次数,
    option                  redispatch
#当haproxy负载很高时,自动结束掉当前队列处理比较久的链接
    option    abortonclose
#向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用
    retries                 3
#客户端发送http请求的超时时间
    timeout http-request    10s
#当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中,timeout queue定义放入这个队列的超时时间。
    timeout queue           1m
#haproxy与后端服务器连接超时时间,如果在同一个局域网可设置较小的时间
    timeout connect         5s
#定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间
    timeout client          1m
#定义haproxy与上游服务器非活动连接的超时时间
    timeout server          1m
#设置新的http请求连接建立的最大超时时间,时间较短时可以尽快释放出资源,节约资源
    timeout http-keep-alive 10s
#健康检测的时间的最大超时时间
    timeout check           10s
#最大并发连接数
    maxconn                 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
#frontend  main *:5000
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#
#    use_backend static          if url_static
#    default_backend             app
#######监控统计页面设置############
listen stats
#监听端口
    bind 0.0.0.0:1088
#日志设置,级别有[emerg  alert  crit   err    warning notice info  debug]
    log 127.0.0.1 local3 err
#启用统计报告,是一个默认的参数
    stats enable
#隐藏统计页面上haproxy的版本信息
    stats hide-version
#统计页面刷新时间
    stats refresh 10s
#进入统计页面密码框上的提示文字
    stats realm Haproxy\ Stats
#进入统计页面输入的用户名及密码
    stats auth admin:admin
#统计页面的登陆uri地址
    stats uri /admin?admin
#当统计页面打开后再打开对后端服务器的管理功能
    stats admin if TRUE
####frontend配置######
frontend server1_80_in
#绑定任何地址的80端口
    bind *:80
#haproxy以http的方式运行
    mode http
#定义两个能实现匹配静态文件的acl
    acl is_static path_beg -i /static /image /javascript
    acl is_static path_end -i .html .png .jpg .gif .jpeg .css .js
#定义当匹配到is_static的acl后转发到static_servers这个后端服务器组
    use_backend  static_servers if is_static
#默认的转发规则
    default_backend app_servers
####backend配置#######
backend static_servers
#静态服务器组采用roundrobin算法
    balance roundrobin
#定义上游服务器及各个属性,对服务器每隔1500毫秒进行一次健康检测,如果连续3次无法联系服务器那就认为此服务器故障,如果连接连续检测到2次务都在线,那就认为此服务可用
    server nod2_static_192.168.0.202 192.168.0.202:80 minconn 10 maxconn 2000 check inter 1500 fastinter 1000 downinter 1000 rise 2 fall 3 weight 1
backend app_servers
#定义动态服务器的调度算法为source,并提供了hash-type参数,使source成为一个动态算法   
    balance source
    hash-type consistent
    server nod1_appserver_192.168.0.201 192.168.0.201:80 minconn 10 maxconn 200 check inter 1500 rise 3 fall 3 weight 1



这个配置文件实现了简单的动静分离的效果,各个配置行的意义都在配置文件中给出了注释。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-75393-1-1.html 上篇帖子: varnish详解 下篇帖子: HAProxy基础及案例演示 配置文件
累计签到:5 天
连续签到:1 天
发表于 2015-6-10 18:02:04 | 显示全部楼层
灰常详情 谢谢 !!!!!!!!!!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表