文档章节

haproxy——配置

hncscwc
 hncscwc
发布于 2014/02/12 17:23
字数 919
阅读 7482
收藏 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
粉丝 66
博文 70
码字总数 76137
作品 0
杭州
程序员
加载中

评论(3)

lurespo
lurespo
这么快地区就变成杭州了。
lurespo
lurespo
厉害。
哪一天
哪一天
支持一个
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双机高可用方案之HAProxy+Keepalived

HAProxy双机高可用方案之HAProxy+Keepalived 一、keepalived高可用 Keepalived 的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的w...

lee_ypp
2014/07/26
0
4
LVS、Nginx、HAProxy网络负载均衡方法比较

现在网络中常见的的负载均衡主要分为两种:一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,也有类似于LVS、Nginx、HAproxy的基于Linux...

蓝狐乐队
2014/05/22
0
0
使用Haproxy及Nginx搭建Web群集

什么是HAProxy? HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,可以运行于大部分主流的Linux操作系统上。 本次实验使用...

cchenyz
06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
1
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部