Haproxy配置文件详解

Haproxy配置文件详解阅读:316次时间:2012-07-14 12:16:07 字体:[大中小]写在前面的话,《Haproxy配置文件详解》文档部分信息来自网络,同时参考过官方的架构指南,在此非常感谢zero提供的文档,以及在学习Haproxy过程中的帮助。

1.#/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /var/run/haproxy.pid`2. ####################全局配置信息########################3. #######参数是进程级的,通常和操作系统(OS)相关#########4.global5. maxconn 20480 #默认最大连接数6. log 127.0.0.1 local3 #[err warning info debug]7. chroot /var/haproxy #chroot运行的路径8. uid 99 #所属运行的用户uid9. gid 99 #所属运行的用户组10. daemon #以后台形式运行haproxy11. nbproc 1 #进程数量(可以设置多个进程提高性能)12. pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件13. ulimit-n 65535 #ulimit的数量限制14.15.16. #####################默认的全局设置######################17. ##这些参数可以被利用配置到frontend,backend,listen组件##18.defaults19. log global20. mode http #所处理的类别 (#7层 http;4层tcp )21. maxconn 20480 #最大连接数22. option httplog #日志类别http日志格式23. option httpclose #每次请求完毕后主动关闭http通道24. option dontlognull #不记录健康检查的日志信息25. option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip26. option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器27. option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接28. stats refresh 30 #统计页面刷新间隔29. retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置30. balance roundrobin #默认的负载均衡的方式,轮询方式31. #balance source #默认的负载均衡的方式,类似nginx的ip_hash32. #balance leastconn #默认的负载均衡的方式,最小连接33. contimeout 5000 #连接超时34. clitimeout 50000 #客户端超时35. srvtimeout 50000 #服务器超时36. timeout check 2000 #心跳检测超时37.38. ####################监控页面的设置#######################39.listen admin_status #Frontend和Backend的组合体,监控组的名称,按需自定义名称40. bind 0.0.0.0:65532 #监听端口41. mode http #http的7层模式42. log 127.0.0.1 local3 err #错误日志记录43. stats refresh 5s #每隔5秒自动刷新监控页面44. stats uri /admin?stats #监控页面的url45. stats realm itnihao itnihao #监控页面的提示信息46. stats auth admin:admin #监控页面的用户和密码admin,可以设置多个用户名47. stats auth admin1:admin1 #监控页面的用户和密码admin148. stats hide-version #隐藏统计页面上的HAproxy版本信息49. stats admin if TRUE #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)50.51.52. errorfile 403 /etc/haproxy/errorfiles/403.http53. errorfile 500 /etc/haproxy/errorfiles/500.http54. errorfile 502 /etc/haproxy/errorfiles/502.http55. errorfile 503 /etc/haproxy/errorfiles/503.http56. errorfile 504 /etc/haproxy/errorfiles/504.http57.58. #################HAProxy的日志记录内容设置###################59. capture request header Host len 4060. capture request header Content-Length len 1061. capture request header Referer len 20062. capture response header Server len 4063. capture response header Content-Length len 1064. capture response header Cache-Control len 865.66. #######################网站监测listen配置#####################67. ###########此用法主要是监控haproxy后端服务器的监控状态############68.listen site_status69. bind 0.0.0.0:1081 #监听端口70. mode http #http的7层模式71. log 127.0.0.1 local3 err #[err warning info debug]72. monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回50373. acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true74. acl site_dead nbsrv(server_blog) lt 275. acl site_dead nbsrv(server_bbs) lt 276. monitor fail if site_dead #当满足策略的时候返回503,网上文档说的是500,实际测试为50377. monitor-net 192.168.16.2/32 #来自192.168.16.2的日志信息不会被记录和转发78. monitor-net 192.168.16.3/3279.80. ########frontend配置############81. #####注意,frontend配置里面可以定义多个acl进行匹配操作########82.frontend http_80_in83. bind 0.0.0.0:80 #监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似84. mode http #http的7层模式85. log global #应用全局的日志配置86. option httplog #启用http的log87. option httpclose #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式88. option forwardfor #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP89. ########acl策略配置#############90. acl itnihao_web hdr_reg(host) -i ^(|)$91. #如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写92. acl itnihao_blog hdr_dom(host) -i 93. #如果请求的域名满足返回true -i是忽略大小写94. #acl itnihao hdr(host) -i 95. #如果请求的域名满足返回true -i是忽略大小写96. #acl file_req url_sub -i killall=97. #在请求url中包含killall=,则此控制策略返回true,否则为false98. #acl dir_req url_dir -i allow99. #在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false100. #acl missing_cl hdr_cnt(Content-length) eq 0101. #当请求的header中Content-length等于0时返回true102.103. ########acl策略匹配相应#############104. #block if missing_cl105. #当请求中header中Content-length等于0阻止请求返回403106. #block if !file_req || dir_req107. #block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求108. use_backend server_web if itnihao_web109. #当满足itnihao_web的策略时使用server_web的backend110. use_backend server_blog if itnihao_blog111. #当满足itnihao_blog的策略时使用server_blog的backend112. #redirect prefix code 301 if itnihao113. #当访问的时候,用http的301挑转到http://192.168.16.3 114. default_backend server_bbs115. #以上都不满足的时候使用默认server_bbs的backend116.117.118.119.120. ##########backend的设置##############121. #下面我将设置三组服务器 server_web,server_blog,server_bbs122.###########################backend server_web######################### ####123.backend server_web124. mode http #http的7层模式125. balance roundrobin #负载均衡的方式,roundrobin平均方式126. cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义127. option httpchk GET /index.html #心跳检测的文件128. server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1129. #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,130. #fall 3是3次失败认为服务器不可用,weight代表权重131. server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2频率rise 3是3次正确认为服务器可用,133. #fall 3是3次失败认为服务器不可用,weight代表权重134.135.###################################backend server_blog################ ###############################136.backend server_blog137. mode http #http的7层模式138. balance roundrobin #负载均衡的方式,roundrobin平均方式139. cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义140. option httpchk GET /index.html #心跳检测的文件141. server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight1142. #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight 代表权重143. server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight2144. #服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight 代表权重145.146.###################################backend server_bbs################# ##############################147.148.backend server_bbs149. mode http #http的7层模式150. balance roundrobin #负载均衡的方式,roundrobin平均方式151. cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义152. option httpchk GET /index.html #心跳检测的文件153. server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1 154. #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight 代表权重155. server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight 代表权重以上为基本的配置文件,下面会对这个配置一一说明和应用。

合集下载

2,haproxy的配置文件说明

2,haproxy的配置文件说明

2,haproxy的配置⽂件说明实验环境也很简单:HAProxy IP:192.168.4.192 Centos5.5-64bitWeb1 IP:192.168.4.45 Centos5.4-64bitWeb2 IP:192.168.21.45 FreeBSD8.0-64bithaproxy 的⽇志需要⾃⼰去rsyslog.conf 配置1 haproxy.cfg配置⽂件下⾯只是写了部分需要记住的配置:global log 127.0.0.1:514 local0 info # local3是指接收设备,指定使⽤127.0.0.1:514的syslog服务中的local0⽇志设备,514是指syslog chroot /application/haproxy-1.8.4/var/chroot #出现漏洞,这个会起到安全防护作⽤ pidfile /var/run/haproxy.pid #存放启动进程的进程号 user haproxy #设置服务运⾏的⽤户和组 group haproxy daemon #守护进程运⾏ maxconn 20480 #定义每个进程的最⼤连接数listen www 10.0.0.7:80 #www监听的名字,第⼆个为监听的ip和端⼝ mode http #模式 stats enable #激活webjiemian stats uri /admin?stats #web界⾯的uri stats auth proxy:oldboy #⽤户和密码 server www01 10.0.0.9:80 check server www02 10.0.0.80:80 check# ⼀个listen 就把他看做是⼀个虚拟主机。

Haproxy配置项及配置实例-Haproxy入门教程

Haproxy配置项及配置实例-Haproxy入门教程

Haproxy配置项及配置实例-Haproxy⼊门教程常⽤配置选项:OPTION 选项:option httpclose :HAProxy会针对客户端的第⼀条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。

如果避免这种情况配置此选项,防⽌产⽣多余的cookie信息。

option forwardfor :如果服务器上的应⽤程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段。

option originalto :如果服务器上的应⽤程序想记录发起请求的原⽬的IP地址,需要在HAProxy上配置此选项,这样HAProxy 会添加"X-Original-To"字段。

option dontlognull :保证HAProxy不记录上级负载均衡发送过来的⽤于检测状态没有数据的⼼跳包。

BALANCE 选项:balance source :如果想让HAProxy按照客户端的IP地址进⾏负载均衡策略,即同⼀IP地址的所有请求都发送到同⼀服务器时,需要配置此选项。

balance roundrobin :HAProxy把请求轮流的转发到每⼀个服务器上,依据每台服务器的权重,此权重会动态调整。

最常见的默认配置。

COOKIE 选项:cookie JSESSIONID prefix :如果客户端只⽀持⼀个cookie,并且服务器上的应⽤程序已经对返回设置了cookie,HAProxy设置此选项可以改写应⽤程序设置的cookie信息,把服务器的信息添加到原cookie中去。

cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。

haproxy参数

haproxy参数

haproxy参数HAProxy是一款高性能、开源的负载均衡软件,支持TCP和HTTP 应用场景,它能够快速并且可靠地转发请求,将负载分散到多个服务器上,从而提高整体性能和可用性。

在使用HAProxy的过程中,不同的场景和需求需要使用不同的参数进行配置。

本文将从HAProxy的各个参数维度介绍相关的配置参数。

一、全局配置参数全局配置参数是一些全局的设置,包括进程数、用户账户、日志等级等,这些设置会影响整个HAProxy的行为。

具体的参数如下:1. daemon:设为1后HAProxy将在后台运行;2. nbproc:指定HAProxy使用的进程数;3. user/group:指定HAProxy运行的用户账号和组;4. chroot:指定HAProxy的chroot目录;5. log:指定运行HAProxy时的日志级别;6. maxconn:指定HAProxy对客户端的最大连接数;7. pidfile:指定HAProxy的pid文件;8. ulimit-n:指定HAProxy进程的最大打开文件数;9. stats socket:该参数允许您通过UNIX或TCP套接字控制HAProxy的运行。

二、默认配置参数所有frontend和backend的配置信息都可以包含在默认部分中。

这些信息在frontend或backend部分没有特别声明的情况下将应用于所有的部分。

默认配置参数还包括全局的一些设置(如timeout等)。

具体的参数如下:1. timeout connect:指定建立与后端服务器连接的超时时间;2. timeout client:指定客户端连接的超时时间;3. timeout server:指定从服务器接收数据的超时时间;4. timeout http-request:指定HTTP请求的超时时间;5. timeout http-keep-alive:指定HTTP keep-alive持续时间;6. timeout check:指定后端服务器健康检查的超时时间。

HAProxy配置文件详解

HAProxy配置文件详解

HAProxy配置⽂件详解⼀、HAProxy简介1.HAProxy 是⼀款提供⾼可⽤性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应⽤的代理软件,⽀持虚拟主机,它是免费、快速并且可靠的⼀种解决⽅案。

2.HAProxy 实现了⼀种事件驱动、单⼀进程模型,此模型⽀持⾮常⼤的并发连接数。

3.HAProxy ⽀持全透明代理(已具备硬件防⽕墙的典型特点): 可以⽤客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使⽤. 这个特性也使得为某特殊服务器处理部分流量同时⼜不修改服务⼆、HAProxy⼯作原理HAProxy由前端(frontend)和后端(backend),前端和后端都可以有多个。

也可以只有⼀个listen块来同时实现前端和后端。

这⾥主要讲⼀下frontend和backend⼯作模式。

前端(frontend)区域可以根据HTTP请求的header信息来定义⼀些规则,然后将符合某规则的请求转发到相应后端(backend)进⾏处理。

三、HAProxy性能HAProxy借助于OS上⼏种常见的技术来实现性能的最⼤化,所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚⾄于在⾮常⾼的负载场景中,5%的⽤户空间占⽤率和95%的系统空间占⽤率也是⾮常普遍的现象,这意味着HAProxy进程消耗⽐系统空间消耗低20倍以上。

因此,对OS进⾏性能调优是⾮常重要的。

即使⽤户空间的占⽤率提⾼⼀倍,其CPU占⽤率也仅为10%,这也解释了为何7层处理对性能影响有限这⼀现象。

由此,在⾼端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。

在⽣产环境中,在7层处理上使⽤HAProxy作为昂贵的⾼端硬件负载均衡设备故障故障时的紧急解决⽅案也时长可见。

硬件负载均衡设备在“报⽂”级别处理请求,这在⽀持跨报⽂请求(request across multiple packets)有着较⾼的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。

HAProxy详解

HAProxy详解

HAProxy详解1. HAProxy概述1.1 HAProxy简介HAProxy提供负载均衡以及基于TCP和HTTP应⽤的代理HAProxy只是http协议的反向代理,不提供缓存功能,但额外⽀持对tcp层对基于tcp通信的应⽤做LBhttp协议的反向代理tcp层的LBHAProxy的特性:HAProxy实现了⼀种事件驱动、单⼀进程模型,此模型⽀持⾮常⼤的并发连接数HAProxy中保存了数据的数据结构为弹性⼆叉树结构代理服务器的调度算法:取模法⼀致性哈希算法LB负载均衡器:TCP:lvs,haproxy,nginxapplication layer:http:haproxy,nginx,ats,apachemysql:mysql-proxy1.2 HAProxy性能上的优势单进程、事件驱动模型显著降低了上下⽂切换的开销及内存占⽤O(1)事件检查器(event check)允许其在⾼并发连接中对任何连接的任何时间实现即时探测在任何可⽤的情况下,单缓冲(single buffering)机制能以不复制任何数据的⽅式完成读写操作,这会节约⼤量的CPU时钟周期及内存带宽借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调⽤,HAProxy可以实现零复制转发(Zero-copy forwarding)在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting)内存分配器在固定⼤⼩的内存池中可以实现即时内存分配,这能够显著减少创建⼀个会话的时长树型存储:侧重于使⽤弹性⼆叉树,实现了以O(log(N))的低开销来保持计数器命令、保持运⾏队列命令及管理轮询及最少连接队列优化的HTTP⾸部分析:优化的⾸部分析功能避免了在HTTP⾸部分析过程中重读任何内存区域精⼼地降低了昂贵的系统调⽤,⼤部分⼯作都在⽤户空间完成,如时间读取、缓冲聚合及⽂件描述符的启⽤和禁⽤等1.3 负载均衡器的性能评估1. 会话率:会话建⽴的速率2. 会话并发能⼒:整体服务器的会话并发能⼒3. 数据率:在所有会话上数据传输速率1.4 正向代理与反向代理正向代理中,proxy和client同属⼀个LAN,对server透明反向代理中,proxy和server同属⼀个LAN,对client透明1.5 代理和缓存的作⽤代理的作⽤:web缓存(加速)、反向代理、内存路由(根据流量及内容类型等将请求转发⾄特定服务器)、转码器有些CDN会在代理服务器上添加Via⾸部缓存的作⽤:减少冗余内容传输节省带宽、缓解⽹络瓶颈降低了对原始服务器的请求压⼒降低了传输延迟2. HAProxy配置⽂件详解2.1 配置⽂件格式2.1.1 配置⽂件配置⽂件:/etc/haproxy/haproxy.cfg主程序:/usr/sbin/haproxyHAProxy的配置处理3类来主要参数来源:最优先处理的命令⾏参数,global配置段,⽤于设定全局配置参数proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”2.1.2 简单的配置格式:frontend # 前端,指明它要监听在某个地址的某个端⼝上,能够接受客户端的请求的use_backend # 指明所调⽤的后端组default_backend # 指明的默认的后端组backend # 后端,定义后端服务器组balance # 指定调度算法server # 指定主机serverlisten:# 指明监听的地址和端⼝server # 然后直接指明地址default # 默认的2.1.3 简单的配置⽰例配置⼀个监听在所有接⼝的80端⼝上HTTP Proxy服务,它转发所有的请求⾄后端监听在127.0.0.1:8000上的"server" globaldaemonmaxconn 25600defaultsmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http-inbind *:80 # 监听在80端⼝上default_backend servers # 默认转发到后端的servers组内backend servers # 定义后端的servers组server server1 127.0.0.1:8080 maxconn 322.2 global配置内容详解2.2.1 简单的global配置# 这⾥⽇志只是转交给本地的local2设备,要在rsyslog中添加上local2的设备条⽬,记录到指定的⽂件中log 127.0.0.1 local2chroot /var/lib/haproxy # 切换根⽬录,haproxy是被切换到这个⽬录下以安全模式运⾏的pidfile /var/run/haproxy.pid # pid⽂件的保存位置maxconn 4000 # 最⼤连接数,这⾥⽐较保守,可以按需调整user haproxy # 进程启动时以haproxy⽤户的⾝份运⾏group haproxydaemon # 启动为守护进程# turn on stats unix socketstats socket /var/lib/haproxy/stats # 本地访问统计数据时可以基于共享内存的⽅式进程通信注意:记录⽇志时,要开启rsyslog服务,开启514/tcp和514/udp端⼝然后要加上对应设备的条⽬,以记录⽇志到指定的⽂件中:local2.* /var/log/haproxy.log2.2.2 global配置进阶进程管理及安全相关的参数:chroot <dir>修改haproxy的⼯作⽬录⾄指定的⽬录在放弃权限之前执⾏chroot()操作,可以提升haproxy的安全级别要确保指定的⽬录为空⽬录且任何⽤户均不能有写权限daemon:让haproxy以守护进程的⽅式⼯作于后台log <address> <facility> [max level [min level]]定义全局的syslog服务器,最多可以定义两个nbproc:指定启动的haproxy进程的个数,只能⽤于守护进程模式的haproxy默认只启动⼀个进程,鉴于调试困难等多⽅⾯的原因,⼀般只在单进程仅能打开少数⽂件描述符的场景中才使⽤多进程模式ulimit-n:设定每进程所能够打开的最⼤⽂件描述符数⽬,默认情况下其会⾃动进⾏计算,因此不推荐修改此选项性能调整相关的参数:maxconn <number>设定每个haproxy进程所接受的最⼤并发连接数,其等同于命令⾏选项 “-n”“ulimit -n” ⾃动计算的结果正是参照此参数设定的spread-checks <0..50, in percent>在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统⼀对众服务器进⾏健康状况检查可能会带来意外问题此选项⽤于将其检查的时间间隔长度上增加或减⼩⼀定的随机时长0到50是百分⽐,可以选择向前百分之五⼗或者向后百分之五⼗2.3 代理配置详解代理相关的配置可以如下配置段中defaults <name>“defaults”段⽤于为所有其它配置段提供默认参数,这配置默认配置参数可由下⼀个“defaults”所重新设定frontend <name>“frontend”段⽤于定义⼀系列监听的套接字,这些套接字可接受客户端请求并与之建⽴连接backend <name>“backend”段⽤于定义⼀系列“后端”服务器,代理将会将对应客户端的请求转发⾄这些服务器listen <name>“listen”段通过关联“前端”和“后端”定义了⼀个完整的代理,通常只对TCP流量有⽤Fronted和backend的组合体,⽐如haproxy实例状态监控部分配置组合的⽅式直接定义frontend及相关的backend代理名称的使⽤规则:所有代理的名称只能使⽤⼤写字母、⼩写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)ACL名称会区分字母⼤⼩写3. HAProxy配置⽂件中的关键字详解3.1 balance3.1.1 ⽤法balance <algorithm> [ <arguments> ]balance url_param <param> [check_post [<max_wait>]]3.1.2 作⽤定义负载均衡算法,可⽤于“defaults”、“listen”和“backend”<algorithm>⽤于在负载均衡场景中挑选⼀个server其仅应⽤于持久信息不可⽤的条件下或需要将⼀个连接重新派发⾄另⼀个服务器时指明调度算法:动态:权重可动态调整静态:调整权重不会实时⽣效3.1.3 ⽀持的算法roundrobin:动态基于权重进⾏轮询,动态算法,权重可以在运⾏时进⾏调整每个后端主机最多⽀持4128个连接static-rr:静态基于权重进⾏轮询,静态算法,在运⾏时调整其服务器权重不会⽣效每个后端主机⽀持的数量⽆上限leastconn:动态新的连接请求被被派发⾄具有最少连接数⽬的后端服务器较长时间会话的场景中推荐此算法,如LDAP,SQL等其不适⽤于较短会话的应⽤层协议,如HTTPsource:将请求的源地址进⾏hash运算,并由后端服务器的权重总数相除后发⾄某匹配的服务器这可以使得同⼀个客户端IP的请求始终被发派⾄特定的服务器但当服务器权重总数发⽣变化时,如果某服务器宕机,许多客户端的请求可能会被派发⾄与此前请求不同的服务器常⽤于负载均衡⽆cookie功能的基于TCP的协议其默认为静态,不过也可以使⽤hash-type修改此特性,hash-type如果是map-based则就是静态的,consistent则为动态使⽤⽰例:balance sourceserver web1 172.16.100.68:80 check weight 1server web2 172.16.100.69:80 check weight 3uri:对URI的左半部分或整个URI进⾏hash运算,并由服务器的总权重相除后派发⾄某匹配的服务器这可以使得对同⼀个URI的请求总是被派发⾄特定的服务器,除⾮服务器的权重总数发⽣了变化此算法常⽤于代理缓存或反病毒代理以提⾼缓存的命中率此算法仅应⽤于HTTP后端服务器场景其默认为静态算法,不过也可以使⽤hash-type修改此特性使⽤⽰例:balance urihash-type consistenturl_param:通过argument为Url指定的参数在每个HTTP GET请求中将会被检索如果找到了指定的参数且被赋予了⼀个值,那么此值将被执⾏hash运算并被服务器的总权重相除后派发⾄匹配的服务器在url中添加⼀个参数,然后把url中的url_param指定的那个参数的值做hash运算,并处除以总权重此算法可以通过追踪请求中的⽤户标识进⽽确保同⼀个⽤户ID的请求将被送往同⼀个特定的服务器,除⾮服务器的总权重发⽣了变化如果某请求中没有出现指定的参数或其没有有效值,则使⽤轮叫算法对相应请求进⾏调度此算法默认为静态的,不过可以使⽤hash-type修改此特性hdr(<name>):对于每个HTTP请求,通过<name>指定的HTTP⾸部将会被检索(根据请求报⽂中指定的http⾸部的值来进⾏调度,把指定的header的值做hash计算)如果相应的⾸部没有出现或其没有有效值,则使⽤轮叫算法对相应的请求进⾏调度此算法默认为静态的,不过其也可以⽤hash-type修改此特性使⽤⽰例:balance hdr(User-Agent)hash-type consistent3.2 hash-type3.2.1 ⽤法hash-type <method>3.2.2 作⽤定义⽤于将hash码映射⾄后端服务器的⽅法其不能⽤于frontend区段可⽤的⽅法有map-based和consistent,在⼤多数场景下推荐使⽤默认的map-based⽅法3.2.3 可⽤的⽅法map-based:(其实就是取模算法)hash表是⼀个包含了所有在线服务器的静态数组。

HAProxy日志输出及配置

HAProxy日志输出及配置

HAProxy⽇志输出及配置正所谓,没有软件敢说没有bug,⼈⽆完⼈,software is not perfect software。

是软件就可能存在bug,那么如果出现bug,我们就要分析对我们业务的影响及可能如何避免bug的再现。

HAProxy也不例外,也可能在特殊场景下出现bug,因此我们就有必要记录下必要的⽇志信息。

今天来聊下HAProxy的⽇志输出及对应参数配置。

HAProxy⽀持两种主要的代理模式:"tcp"也即4层(⼤多⽤于邮件服务器、内部协议通信服务器等),和7层(HTTP)。

在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。

7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)⾥指定内容来控制协议,这种操作要基于特定规则。

说到四层模式及七层模式,我们就要回忆下,在RabbitMQ集群搭建过程中,有没有使⽤到四层模式呢?答案是有的,使⽤TCP协议进⾏双向的通信代理使⽤的就是四层协议。

HAProxy配置⽂件可以分为五部分,在上次RabbitMQ集群搭建也简单聊了下,1global: 全局配置参数段,主要⽤来控制Haproxy启动前的进程及系统相关设置2 defaults: 配置⼀些默认参数,如果frontend,backend,listen等段未设置则使⽤defaults段设置3 listen:监听配置4 frontend: ⽤来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理5 backend: 定义后端服务器集群,以及对后端服务器的⼀些权重、队列、连接数等选项的设置HAProxy的安装我们不再介绍,在安装完毕以后,进⾏的⽇志输出配置:根据实际需求,更改配置⽂件,我的配置如下global #全局设置log 127.0.0.1 local3 #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的⽇志级别#log loghost local0 infomaxconn 4096 #最⼤连接数chroot /usr/local/haproxyuid 99 #所属运⾏的⽤户uidgid 99 #所属运⾏的⽤户组daemon #以后台形式运⾏haproxynbproc 2 #启动2个haproxy实例pidfile /usr/local/haproxy/haproxy.pid #将所有进程写⼊pid⽂件#debug#quiet defaults #默认设置#log globallog 127.0.0.1 local3 #⽇志⽂件的输出定向mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OKoption httplog #⽇志类别,采⽤httplogoption dontlognulloption forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ipoption httpclose #每次请求完毕后主动关闭http通道,haproxy不⽀持keep-alive,只能模拟这种模式的实现retries 3 #3次连接失败就认为服务器不可⽤,主要通过后⾯的check检查option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器maxconn 2000 #最⼤连接数stats uri /stats #haproxy 监控页⾯的访问地址 浏览器中输⼊haproxy监控地址:http://10.10.100.39/stats查看状态contimeout 5000 #连接超时时间clitimeout 50000 #客户端连接超时时间srvtimeout 50000 #服务器端连接超时时间stats auth admin:admin #设置监控页⾯的⽤户和密码:Frankstats hide-version #隐藏统计页⾯的HAproxy版本信息frontend http-in #前台bind *:80mode httpoption httploglog globalacl web1 hdr(host) -i #acl后⾯是规则名称,-i是要访问的域名,如果访问 这个域名就分发到下⾯的webserver1 的作⽤域。

HAproxy文档

HAproxy文档HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。

HAProxy还可以将后端的服务器与网络隔离,起到保护后端服务器的作用。

常用开源软件负载均衡器有:Nginx、LVS、Haproxy。

三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)LVS:1、抗负载能力强。

抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。

2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)3、应用范围比较广,可以对所有应用做负载均衡;4、不支持正则处理,不能做动静分离。

5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)6、配置复杂,对网络依赖比较大,稳定性很高。

Ngnix:1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;3、Nginx安装和配置比较简单,测试起来比较方便;4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。

6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。

8、不支持Session的直接保持,但能通过ip_hash来解决。

、对Big request header的支持不是很好,9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash (Ip哈希)10、Nginx还能做Web服务器即Cache功能。

haproxy透明代理配置

Haproxy使用tproxy实现透明代理实验环境Server1为代理服务器,有两个网卡eth0:192.168.1.55用于对外服务eth1:10.0.0.1gw10.0.0.254用于内网通讯Server2为应用服务器,一块网卡eth0:10.0.0.2gw10.0.0.1service的网关一定要配成service的内网IP准备工作1.检查系统内科是否已支持tproxy2.安装haproxy编译参数make TARGET=linux26USE_LINUX_TPROXY=1make install PREFIX=/usr/local/haproyx安装完成后,检查haproxy是否支持tproxyHaproxy.cfgglobaldaemonstats socket/var/run/haproxy.stat mode600log127.0.0.1local4maxconn40000ulimit-n80013pidfile/var/run/haproxy.piddefaultslog globalmode httpcontimeout4000clitimeout42000srvtimeout43000balance roundrobinlisten VIP-222bind192.168.1.222:80mode httpoption forwardforsource0.0.0.0usesrc clientipcookie SERVERID insert nocache indirectserver server110.0.0.2:80weight1cookie server1checkserver backup127.0.0.1:80backupoption redispatch在server1上配置网络、iptables及内核参数(可加入/etc/rc.local)net.ipv4.ip_forward=1net.ipv4.conf.all.send_redirects=1net.ipv4.conf.default.send_redirects=1net.ipv4.conf.all.forwarding=1iptables-t mangle-N DIVERT#在mangle中新建一条规则链DIVERTiptables-t mangle-A PREROUTING-p tcp-m socket-j DIVERT#凡进入PREROUTING链的报文都跳转去新定义的DIVERT链iptables-t mangle-A DIVERT-j MARK--set-mark1#凡进入DIVERT链的报文均使用mangle表的标记功能标记上1标记iptables-t mangle-A DIVERT-j ACCEPT#进入DIVERT链的报文均导入路由ip rule add fwmark1lookup100#添加100策略路由表,并将由iptables打了标记1的数据报文从100路由表规定路由流动可以在/etc/iproute2/rt_tables查看或者使用此命令查看ip rule sh本机的所有路由表ip route add local0.0.0.0/0dev lo table100#由于到达本地的数据包要想成功到达,必须要找到一条local路由(类型对即可,无需非要在local表),因此为路由表100确定默认路由,进入环流最后启动相关软件即可Linux路由查找流程在Linux中,内置了三张路由表:local,main,default,其中local路由表的优先级最高,并且不能被替换,在有数据包进来的时候,首先无条件的查找local路由表,如果找到了路由,则数据包就是发往本机的,如果找不到,则接着在其它的路由表中进行查找。

HAproxy均衡负载部署和配置文件详解

HAproxy均衡负载部署和配置文件详解HAproxy均衡负载部署和配置文件详解HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

根据官方数据,其最高极限支持10G 的并发。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。

并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

其支持从4层至7层的网络交换,即覆盖所有的TCP协议。

就是说,Haproxy甚至还支持Mysql 的均衡负载。

如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。

包括Nginx,ApacheProxy,lighttpd,Cheroke 等。

但要明确一点的,Haproxy 并不是Http 服务器。

以上提到所有带反向代理均衡负载的产品,都清一色是WEB 服务器。

简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。

而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。

其自身并不能提供http服务。

但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP 请求头内容做规则匹配,然后把请求定向到相关的backend。

另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:●内容交换: 可以根据请求(request)的任何一部分来选择一组服务器, 比如请求的URI , Host头(header) , cookie , 以及其他任何东西.当然,对那些静态分离的站点来说,对此特性还有更多的需求。

HA绝大部分配置解析及示例

proxies listen代替frontend+backend: listen WEB_PORT_80
bind 192.168.10.9:80 mode http option forwardfor server web1 192.168.10.10:8080 check inter 3000 fall 3 rise 5 server web2 192.168.10.11:8080 check inter 3000 fall 3 rise 5
liten http_https_proxy #https监听 bind :80 bind :443 ssl crt /etc/haproxy/site.pem
listen http_https_proxy_explicit #监听ipv6、 ipv4和unix sock文件 bind ipv6@:80 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem bind unix@ssl-frontend.sock user root mode 600 accept-proxy
listen external_bind_app1 #监听file descriptor bind "fd@${FD_APP1}"
backend web_prot_http_nodes mode http option forwardfor server 192.168.10.10:8080 check inter 3000 fall 3 rise 5 server 192.168.10.11:8080 check inter 3000 fall 3 rise 5
一致性hash: 该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度 结果影响是局部的,不会引起大的变动hash(o)modn listen web_host bind 192.168.10.9:80,:8801-8810,192.168.10.8:9001-9010 mode tcp
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档