[转][笔记] 2. HAProxy 配置文件详解

转自(可能有一定的修改):
http://freeloda.blog.51cto.com/2033581/1294094

1.配置文件的格式


HAProxy的配置处理3类来主要参数来源:

  • 最优先处理的命令行参数;
  • “global”配置段,用于设定全局配置参数;
  • proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”;

2.支持的时间格式


一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。

us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分钟(minutes);
h:小时(hours);
d: 天(days);

3.简单案例


下面的例子配置了一个监听在所有接口的 80 端口上 HTTP proxy服务,它转发所有的请求至后端监听在 127.0.0.1:8000上 的"server"。

global
     daemon 
     maxconn 25600
 defaults
     mode http 
     timeout connect 5000ms 
     timeout client 50000ms 
     timeout server 50000ms
 frontend http-in
     bind *:80 
     default_backend servers
 backend servers
     server server1 127.0.0.1:8080 maxconn 32

执行如下命令检查配置:

sudo haproxy -f configuration.conf -c

4.全局配置


注,“global”配置中的参数为进程级别的参数,且通常与其运行的OS相关。

(1).进程管理及安全相关的参数


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 服务器,最多可以定义两个;
什么时候发生日志给定义的 syslog 服务器?1.HAProxy 启动和退出时;2.定义了 log global 的代理也会发送
日志给全局定义的 syslog 服务器。

<address>: 
    IPv4 + : + UDP 端口,默认端口为 514;
    指向一个 Unix domain socket 的文件路径(位于 chroot 内,有可写权限)
<facility>: 如下其中之一
    kern   user   mail   daemon auth   syslog lpr    news
    uucp   cron   auth2  ftp    ntp    audit  alert  cron2
    local0 local1 local2 local3 local4 local5 local6 local7

日志等级:默认发送所有日志信息,略 --> 详;
     emerg  alert  crit   err    warning notice info  debug

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

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

pidfile:将所有进程的 pid 写入文件,启动进程的用户必须有权限访问此文件

uid:以指定的 UID 身份运行haproxy进程;

ulimit-n:设定每个进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;

user:同 uid,但使用的是用户名;

stats:

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

description:当前实例的描述信息;

(2).性能调整相关的参数


maxconn <number>:设定每个 haproxy 进程所接受的最大并发连接数,其等同于命令行选项“n”;
“ulimit n” 自动计算的结果正是参照此参数设定的;

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.2528系列的内核上,tcp 重组功能有bug存在;

spreadchecks <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:

(3).Debug相关的参数


debug
quiet

5.代理


代理相关的配置可以如下配置段中,

defaults <name>
frontend <name>
backend <name>
listen <name>

“defaults”段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定。

“frontend”段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。

“backend”段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。

“listen”段通过关联“前端”和“后端”定义了一个完整的代理,也就是直接在 listen 组合定义了前端和后端,通常用于定义 TCP 流量。例如:

listen main *:80
    balance roundrobin
    server s1 192.168.0.71:80
    server s1 192.168.0.72:80

注,所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分字母大小写。更详细的配置信息,请查阅官方文档

HAProxy 的工作模式:

HAProxy 主要支持两种代理:tcp(4层) 和 http(7层)。

在7层代理模式中,HAProxy 可以解析 HTTP 报文,对请求和响应报文的任意部分做 增加、修改、删除 操作。
对报文可 允许、拒绝、转发。解析报文,重新封装。

在 4 层代理模式中,直接在 TCP 层调度,在客户端和服务器端之间建立全双工的连接。(分别与客户端和服务端建立
连接,并将两个连接合并到一起,转发 TCP 流量)

注意 https 与 http 协议是两回事,使用 https 协议也只能使用 tcp 模式。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 互联网架构基础知识 一、网站常见架构 负载层 页面缓存层 web层 数据层 二、运维法则 缓存为王 尽量在前端(缓...
    魏镇坪阅读 4,817评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 目录: HAProxy是什么 HAProxy的核心能力和关键特性 HAProxy的安装和运行 使用HAProxy搭...
    kelgon阅读 79,842评论 9 159
  • (印度)克里希那穆提 著 张春城 唐超权 译 九州出版社 2015.11.6 我看不懂这本书,今天把它放下,等到缘...
    杨珍红阅读 795评论 0 0
  • 评分往往是绝对的 比如豆瓣电影评分 一个影评人的评分对一个不怎么看电影的人来说并不可靠 相对评分是指A对于F电影的...
    crf1028阅读 412评论 0 0