haproxy:

4层:并不涉及到用户空间,也就不需要完成模式转换,不需要套接字注册等.

lvs

7层:

nginx

haproxy

ats

实例:

haproxy 双网卡: eth0:172.16.0.192 eth1:192.168.30.2

web1:192.168.30.131

web2:192.168.30.129

web1和web2的网关为haproxy的eth1的ip地址:

web1/web1 :route add default gw 192.168.30.1

配置由两部分组成:

global settings:对haproxy进程自身属性设定.

proxies:对代理的设定

default:默认配置

frontend:前端配置

backenbd:后端的设定

listen:监听

URL

http://host:port/path?queries#fragment

配置实例:

frontend server *:80//定义前端frontend name为server 监听80端口default_backend servers//定义默认的backend server为servers
backend servers      //定义后端的backend name为serversbalance roundrobin//负载均衡算法server  node1   192.168.30.129:80       check//后端的节点:80一定要添加(尝试不添加会报错,1.4版本的貌似继承上面frontend的端口),开启健康检查server  node2   192.168.30.131:80       check

浏览器访问:http://192.168.30.130/   刷新可以看到负载均衡轮训

开启haproxy log:

haproxy.cfg提示开启haproxy.log 需要在/etc/sysconfig/syslog增加

local2.*                       /var/log/haproxy.log

操作:

vim /etc/rsyslog.conf

1、开启udp协议514端口

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
2、新增:
local2.*                                                /var/log/haproxy.log

3、重启syslog和haproxy服务:

service rsyslog restart
/etc/init.d/haproxy restart

4、测试查看日志:

tail -f /var/log/haproxy.log

bind参数:bind [<adresses>]:<port_range> [,...]

例子:

bind   :80,:443
bind 10.10.0.1:10080,10.10.0.1:10043
可以使用在listen和frontend模块中:
frontend server
bind *:80
default_backendservers
backend servers
balanceroundrobin
servernode1192.168.30.129:80check
servernode2192.168.30.131:80check

balance参数:

roundrobin 加权轮训,wgight不指默认为1,后续backend新增的server node会自动识别,慢加载方式加载,

static-rr  静态轮训,新增的node节点除非重启haproxy否则不会自动识别;基于check健康检查下线的机器再次上线会自动识别;不会慢启动,新增的服务器立即加入服务器轮训列表,所有的请求都会立即到这台服务器.

leastconn  保持会话连接,常用的LDAP,SQL,TSE,ect...动态的。http协议时无状态的,获取到资源即断开所以不适用次算法.

source     保持会话session,基于ip地址做hash算法,同一个用户的请求将发往同一台服务器.

会话保持机制:

IP层:source

位于同一个NAT服务器背后的多个请求都会顶向至同一个upstream server;不利于均衡。

应用层:cookie

有更好的负载均衡效果;

source:一般只有不支持使用cookie插入又需要保持会话时使用.

url:用于后端服务器时cache server的场景,保证缓存命中率的.

cookie:

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]

[ postonly ] [ preserve ] [ httponly ] [ secure ]

[ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]

frontend server

bind *:80

default_backendservers

backend servers

cookie node insert nocache

balancesource

servernode1192.168.30.129:80check

servernode2192.168.30.131:80check

backend下使用cookie cookie名称为node,客户端每次访问都插入cookie,一般insert会与nocache同时使用,防止后端缓存服务器缓存cookie降低缓存命中率.

cookie绑定:

基于cookie绑定,访问后端node节点

frontend server

bind *:80

default_backendservers

backend servers

cookie node insert nocache

balance roundrobin//做轮训

servernode1192.168.30.129:80checkcookie node1#定义node1的cookie为node1

servernode2192.168.30.131:80checkcookie node2#定义node2的cookie为node2

访问浏览器:http://192.168.30.130/index.html

发现并未做轮训,因为绑定了cookie信息,同一客户端的访问,请求将会被发往同一个后台node节点.

指定HAProxy的工作模式:

mode { tcp|http|health }

tcp:mysql、ldap

tcp为HAProxy的默认模式,haproxy在客户端和选定的upstream server之间建立一个全双工的连接;不会对应用层协议做任何检查;

SSL/Mysql/SSH等都应该使用此模式.

http:web

http协议

对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制;

health:健康检查

指定日志:

log global

log <address> [len <length>] <facility> [<level> [<minlevel>]]

no log

defaults、frontend、backend、listen四项都可以使用.

log global:使用全局配置中定义的日志服务器;

log <address> [len <length>] <facility> [<level> [<minlevel>]]

frontend server

log 127.0.0.1local3#日志服务器,在rsyslog.conf中定义,指定的frontend日志.

bind *:80

default_backendservers

backend servers

cookie node insert nocache

balance roundrobin

servernode1192.168.30.129:80checkcookie node1

servernode2192.168.30.131:80checkcookie node2

rsyslog.conf的配置:

local3.*                                                /var/log/haproxyweb.log

捕获请求首部和相应首部:

capture request header <name> len <length>

capture response header <name> len <length>

定义默认后端服务器:在listen或frontend中指定使用的默认后端:

default_backend <backend>

use_backend <backend> [{if | unless} <condition>]

在listen或frontend中,定义指明使用哪个后端服务器.

server <name> <address>[:[port]] [param*]

为backend或listen定义各服务器.

默认server的参数:

backup:设定备用服务器,仅在负载均衡场景中的其他server均不可用于启用此server;

check:启动对次server执行健康状态检查,其可以借助与额外的其他参数完成更精细的设定.

inter:设定健康状态检查时间间隔,单位为毫秒,默认为2000,也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟.

rise <count>:设定健康状态检查中,某离线的server从离线转换至正常状态需要成功检查的次数.

fall <count>:确认server从正常状态转换为不可用状态需要检查的次数.

maxconn <maxcoon>:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数高于此值,其将被放置于请求队列,以等待其他连接被释放.

maxqueue <maxqueue>:设定请求队列的最大长度.

observer <mode>:通过观察服务器的通信状况来判断其健康状态,默认为禁用,其支持的类型有4层和layer7,"layer7"仅能在http代理场景下使用。

redir <prefix>:启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码相应;需要注意的是,在prefix后面不能使用/,且

不能使用相对地址,以免造成循环;例如:server srv1 172.16.0.110 redir http://www.example.com

weight<weight>:权重,默认为1,最大为256,0表示不参与权重.

check对后端的服务器做健康状态检测;

扩展参数:option httpchk

option httpchk

option httpchk <uri>

option httpchk <method> <uri>

option httpchk <method> <uri> <version>

stats启用默认设置统计表:

stats enable

四项都可以使用:defaults、frontend、listen、backend

如果启用此配置,不自己

This statement enables statistics reporting with default settings defined

at build time. Unless stated otherwise, these settings are used :

- stats uri   : /haproxy?stats    默认的url,可以自己指定

- stats realm : "HAProxy Statistics" 描述和提示

- stats auth  : no authentication默认的认证,铭文密码隔开

- stats scope : no restriction指定访问位置的

浏览器访问haproxy代理:http://192.168.30.130/haproxy?stats

haproxy的status的访问控制:

stats http-request { allow | deny | auth [realm <realm>] }

[ { if | unless } <condition> ]

stats refresh <delay> 指定stats多久自动刷新

stats hide-version  隐藏haproxy版本.

stats auth <user>:<passwd> 认证

stats admin { if | unless } <cond> 启动管理接口

stats admin if LOCALHOST 表示本机

stats admin if TRUE 表示认证通过

实例:

backend servers

cookie node insert nocache

balance roundrobin

stats enable

stats refresh 20s

stats hide-version

stats admin if TRUE

stats auth admin:admin

stats uri /hastatus

server  node1   192.168.30.129:80       check   cookie node1

server  node2   192.168.30.131:80       check   cookie node2

自定义错误页面:

errorfile

errorloc302

errorloc303

errorfile <code> <file>

http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |

add-header <name> <fmt> | set-header <name> <fmt> |

del-header <name> | set-nice <nice> | set-log-level <level> |

replace-header <name> <match-regex> <replace-fmt> |

replace-value <name> <match-regex> <replace-fmt> |

set-tos <tos> | set-mark <mark> |

add-acl(<file name>) <key fmt> |

del-acl(<file name>) <key fmt> |

del-map(<file name>) <key fmt> |

set-map(<file name>) <key fmt> <value fmt>

}

[ { if | unless } <condition> ]

haproxy封装客户端ip,新增x-forward-for,避免总是记录haproxy,转而记录client ip。

option forwardfor [ except <network> ] [ header <name> ] [ if-none ]

keepalive 关闭有两种原因:

1、当前服务器的连接数达到上限。

2、连接超时.

timeout queue <timeout> 默认为1m

请求在队列中等待的最大时间长,一直得不到服务的响应,客户端重新发送请求.

timeout connect <timeout> 默认为10s

通常指haproxy将请求转发至后台upstream server时,所等待的超时时常.

timeout client <timeout>

客户的最大非活动连接的最大时长,指定时长后将断开连接.

timeout server <timeout>

连接已经建立,但是服务端没有任何数据传输的超时时长。

timeout http-keep-alive <timeout>

定义保持连接模式的超时时长

timeout check <timeout>

定义健康状态检测的超时时长

option http-server-clone

定义了keepalive功能,客户端和服务器端之间的会话连接超时,允许server主动关闭.

客户端可服务器端建立连接时,就开始记录日志。(通常都是服务器端相应完成才记录日志,方便记录服务器的相应时间),如果打开此项,会提前记录日志.

option logasap

no option logasap

Enable or disable early logging of HTTP requests

客户端和服务器端连接建立,但是没有任何的数据传输,即空连接,此项为不记录空连接日志.

option dontlognull

no option dontlognull

Enable or disable logging of null connections

HAProxy Acl定义:

支持的值大概有四种:

整数或整数范围/字符串/正则表达式/ip地址或者网络地址

4层访问控制:

tcp-request content <action> [{if | unless} <condition>]

tcp-request inspect-delay <timeout>

7层访问控制:

http-request { allow | deny | tarpit | auth [realm <realm>] | redirect <rule> |

add-header <name> <fmt> | set-header <name> <fmt> |

del-header <name> | set-nice <nice> | set-log-level <level> |

replace-header <name> <match-regex> <replace-fmt> |

replace-value <name> <match-regex> <replace-fmt> |

set-tos <tos> | set-mark <mark> |

add-acl(<file name>) <key fmt> |

del-acl(<file name>) <key fmt> |

del-map(<file name>) <key fmt> |

set-map(<file name>) <key fmt> <value fmt>

}

[ { if | unless } <condition> ]

了解HAProxy原理及参数相关推荐

  1. Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:六点半起床 juejin.im/post/685654110 ...

  2. Spring Validation 最佳实践及其实现原理,参数校验没那么简单!

    之前也写过一篇关于Spring Validation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂Spring Validation.本文会详细介绍Spring Validation各种场景下 ...

  3. bean validation校验方法参数_Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 顺便再给大家推荐一套Spring ...

  4. 压敏电阻原理、参数、选型

    大家好,我是记得诚. 今天聊一聊压敏电阻. 压敏电阻并不是普通的电阻,而是一种具有瞬态电压抑制功能的元件,效果同TVS.这篇博客介绍压敏电阻的一些基本知识,包括参数.选型.应用等. 文章目录 1. 命 ...

  5. 奈克斯特定理_天气雷达基本工作原理和参数.ppt

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp电子工程/通信技术&nbsp>&nbsp天线/微波/雷达 天气雷达基本工作原理和参数.ppt ...

  6. 1.1.2半导体二极管的结构、工作原理、参数、伏安特性;

    1.结构 内部实际上是一个PN结,将电极引线和其封装在一起就构成了二极管 拓展:点接触型二极管,面接触型二极管 2.工作原理 3.参数(以肖特基二极管SS56为例) MAX Forward Volta ...

  7. 晶振工作原理及参数详解

    本文转载于:https://www.cnblogs.com/sunshine-jackie/p/8137293.html 晶振工作原理及参数详解(最透彻) 晶振工作原理及参数详解(最透彻) 原文链接点 ...

  8. rfid sim卡 android,RFID-SIM卡门禁系统方案介绍:原理,参数,功能..

    原标题:RFID-SIM卡门禁系统方案介绍:原理,参数,功能.. RFID-SIM卡门禁系统方案原理 用户将持有RFID-SIM卡的手机接近多奥RFID-SIM卡门禁系统读头,同时将RFID-SIM卡 ...

  9. Golang 侧数据库连接池原理和参数调优

    Golang 侧数据库连接池原理和参数调优 文章目录 Golang 侧数据库连接池原理和参数调优 数据库连接池 数据库连接池的设计 Go 的数据库连接池 Go 数据库连接池的设计 建立连接 释放连接 ...

最新文章

  1. 服务器上tomcat修改内存,修改Tomcat运行内存
  2. Codeforces 793b B. Igor and his way to work 觉得大神写的3维bfs太复杂,突然发现这题是连连看算法。
  3. OpenCV学习笔记之 ( 三 ) MFC显示Mat图片
  4. HTML期末作业-美食网站
  5. 主机与虚拟机桥接出现ping不通解决方案
  6. 不能错过!简单易懂的哈希表总结
  7. oracle查询:分组查询,取出每组中的第一条记录
  8. Python List相关函数使用实例
  9. 【算法导论】第5章,概率分析和随机算法
  10. CKEditor 实例
  11. 无法获取有关 Windows NT 组/用户 'WIN-*******\********' 的信息,错误代码 0x534。 [SQLSTATE 42000] (错误 15404))....
  12. 什么是代码评审(Code Review)
  13. 微信小程序+ColorUI
  14. 核心内参: TDR原理及常见问题
  15. ISA-95/B2MML教程 : 从用例到XML消息的整合实践
  16. python 聚类 客户细分_【火炉炼AI】机器学习027-项目案例:用聚类算法建立客户细分模型...
  17. 采集淘宝网的10个经典方法
  18. 缓存插件 EHCache
  19. Microsoft Edge 中的ie浏览器图标、右击新标签页打开功能的关闭方法
  20. excel切片器联动

热门文章

  1. 技术领导力实战笔记一
  2. javac,使用-d .与省略-d的区别
  3. python四十二:类和对象
  4. 人工智能是如何改变IT运维和DevOps的?
  5. ListView setOnItemClickListener无效原因分析
  6. maven学习(中)- 私服nexus搭建
  7. 解决android.permission.WRITE_APN_SETTINGS
  8. shell脚本 逐行读取文本并且 进行字符串的截取
  9. careercup-树与图 4.9
  10. 2006.08.10