文档章节

haproxy——配置

hncscwc
 hncscwc
发布于 2014/02/12 17:23
字数 919
阅读 7597
收藏 120

1. maxconn设置

大家都知道haproxy启动时可以通过命令行参数-n, -N设置连接数,在配置文件也可以在global段,default段,listen段中分别对maxconn进行设置,然而这些设置都启什么作用,优先级又是怎样的?

 

haproxy -f haproxy.cfg -n 60000 -N 50000

haproxy.cfg

global
maxconn 40000

default
maxconn 30000

listen test1
bind 0.0.0.0:50000
maxconn 20000
server srv-test1... maxconn 10000 check

listen test2
bind 0.0.0.0:6000
server srv-test2 ... maxconn 10000 check

 

以上图为例:

global段中的maxconn:  设置进程的最大连接数,等同于命令行参数 -n

default段中的maxconn:  设置默认代理段的最大连接数, 等同于命令行参数 -N

listen段中的maxconn:  设置该代理的最大连接数,等同于命令行参数-N

server中的maxconn:  设置该后台服务的最大连接数

其优先级为:

(1) 命令行参数-n指定的连接数 > global中通过maxconn设置的连接数

(2) listen段中的maxconn > default段中的maxconn > 命令行参数-N指定的连接数

根据上面的总结,如果按照前面的命令行参数和配置文件运行haproxy,那么

haproxy的最大连接数为60000

侦听端口为50000的代理段,最大连接数为20000

侦听端口未60000的代理段,最大连接数为30000(使用了default中maxconn的值)

其后端真正的服务最大连接数为10000

实际运行结果为:

2. ulimit

聊到最大连接数,那么必然会涉及到ulimit的设置,是否还需要对haproxy进行ulimit -n的设置?不进行设置的话那真正的限制数是多少?上图中 maxsock=120015又是怎么来的?

官网的文档中看到可以通过ulimit-n进行设置,然而并不推荐手动进行设置,因为haproxy自身会进行调整。

具体计算方式为:

maxsock = 10(默认值) + global.maxconn * 2 + global.maxpipes * 2 + bind数量 + check数量

其中maxconn对应global中maxconn或者命令行参数-n设置的值

maxpipes对应global中maxpipes的值

bind对应为bind的个数

check对应于对后台真正服务进行健康检测的个数

还是以前面的例子说明:

maxconn的值为60000;maxpipes没有进行设置,其值为0;在50000,60000进行bind(实际还在1080端口进行了bind,以供管理员通过web查看haproxy的相关信息,上面的配置文件中并没有列出来),那么bind的值等于3;对后台服务srv-test1,srv-test2均进行了check,因此check的值为2

maxsock = 10 + 60000*2 + 0 + 3 + 2 = 120015

这个maxsock也就是最终的限制数,通过查看/proc/PID/limits可以验证

如果在配置文件中配置了 ulimin-n,其值应该大于通过计算后得出的maxsock的值。

设置ulimit-n 130000的运行情况为

3. bind interface

通常,作为后台服务的代理,haproxy会配置多网段的地址,比如在不同的网卡上分别绑定移动,联通,电信,内网等地址。那么如果业务需要区分来自不同网段的客户端时,可以考虑在bind中增加interface配置项来解决。例如:

listen 电信
bind 0.0.0.0:60000 interface eth0
server  ...

listen 联通
bind 0.0.0.0:60000 interface eth1
server  ...

listen 内网
bind 0.0.0.0:60000 interface eth2
server  ...

简单翻了下代码,发现haproxy对此的大概实现为:在解析配置文件的bind时,记录interface指定的网卡名,然后通过

setsockopt(fd,SOL_SOCKET,SO_BINDTODEVICE,listener->interface,strlen(listener->interface)+1)来实现。

注意: 这种方式仅在linux下有效,且需要root权限。

© 著作权归作者所有

共有 人打赏支持
hncscwc
粉丝 67
博文 70
码字总数 76137
作品 0
杭州
程序员
私信 提问
加载中

评论(3)

lurespo
lurespo
这么快地区就变成杭州了。
lurespo
lurespo
厉害。
哪一天
哪一天
支持一个
HAproxy 打印 log 的问题

haproxy 可以把 log 打印到 syslog 去,但是,如果单纯地在 haproxy 的配置上写了这句: log 127.0.0.1 local0 是不够的,即使你在 syslog 的配置里也写上了这句: local0.* /var/log/haprox...

鉴客
2011/10/26
3.7K
0
最大化的利用 HAProxy

HAProxy是一个我们在Twilio上广泛使用的神奇软件。今天我们回过头看一下我们的HAProxy配置并解释其中的一些设置。但首先,是我们使用HAProxy历史的一个小故事。 最开始的时候,我们的创始人创...

oschina
2013/10/17
2.4K
0
RedHat 7配置keepalived实现HAproxy群集

在之前的博文中,我搭建了一个1台HAproxy+2台Apache的WEB负载均衡测试环境,然而1台HAproxy终归存在单点故障的风险,如果能使用2台HAproxy做高可用,形成主备群集,对外提供一个VIP在两台HAp...

jianlong1990
06/26
0
0
负载均衡之Haproxy安装配置篇

目前市场上,有关实现负载均衡的软件,使用比较多的是haproxy、nginx和lvs。 首先,介绍一下:什么是负载均衡?负载均衡一般通过两种方式来实现:基于操作系统的负载实现和基于第三方应用的负...

优果馥思
07/02
0
0
真正零停机 HAProxy 重载

Yelp 础设施团队的主要目标之一就是尽可能的让网站响应接近零停机时间。那也就是说当用户访问www.yelp.com 作出动作的时候,网站的响应速度必须尽可能的快。一种方法是使用 HAProxy 负载均衡...

oschina
2015/04/14
15.5K
10

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
50分钟前
2
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
9
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
6
0
I2C EEPROM驱动实例分析

上篇分析了Linux Kernel中的I2C驱动框架,本篇举一个具体的I2C设备驱动(eeprom)来对I2C设备驱动有个实际的认识。 s3c24xx系列集成了一个基于I2C的eeprom设备at24cxx系列。at24cxx系列芯片包...

yepanl
昨天
6
0
设计模式之工厂模式

本篇博文主要翻译这篇文章: https://www.journaldev.com/1392/factory-design-pattern-in-java 由于翻译水平有限,自认为许多地方翻译不恰当,欢迎各位给出宝贵的建议,建议大家去阅读原文。...

firepation
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部