haproxy——配置

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权限。

转载于:https://my.oschina.net/hncscwc/blog/199152

### 关于在 Windows 上配置 HAProxy 代理 Tomcat #### 安装 HAProxy on Windows HAProxy 主要用于 Linux 平台,但在特定情况下也可以运行于 Windows。对于 Windows 用户来说,通常建议使用虚拟机或容器化解决方案来部署 HAProxy。然而,如果确实需要直接安装到 Windows,则可以考虑使用第三方编译好的版本或是通过 WSL (Windows Subsystem for Linux) 来实现[^1]。 #### 下载并解压 HAProxy 可以从官方 GitHub 或其他可信资源下载适用于 Windows 的预编译二进制文件。将压缩包中的 `haproxy.exe` 文件放置在一个合适的目录下,并创建一个新的配置文件夹用来保存后续所需的配置文件。 #### 编写基本的 HAProxy 配置文件 为了使 HAProxy 成功代理至 Tomcat 应用程序,需编写如下所示的基础配置: ```plaintext global log stdout format raw local0 defaults mode http option forwardfor # 获取客户端的真实 IP 地址 timeout connect 5s # 连接超时时间设置为5秒 timeout client 30m # 设置客户端连接的最大持续时间为30分钟 timeout server 30m # 同样也设定了服务端响应的时间限制 frontend tomcat_proxy bind *:80 # 绑定监听HTTP请求的IP和端口号 default_backend tomcatservers backend tomcatservers balance roundrobin # 使用轮询算法分发流量给后端服务器 server tomcat1 localhost:8080 check inter 2000 rise 2 fall 3 weight 1 maxconn 100 # 添加第一个Tomcat实例, 健康检查间隔2秒, 正常连续两次失败三次才认为不可用, # 单次最大连接数不超过100 ``` 此段脚本定义了一个简单的 HTTP frontend 和 backend 结构,其中前端负责接收来自外部网络的所有访问请求并将它们转发给名为 "tomcatservers" 的后端组;而后端则包含了至少一台实际提供 Web 内容的服务节点——即本地主机上的 Apache Tomcat 实例。 #### 测试与启动 HAProxy 完成上述步骤之后,可以通过命令提示符窗口执行以下指令来测试配置的有效性和语法正确性: ```shell .\haproxy.exe -f .\path_to_your_haproxy.cfg -c ``` 一旦确认无误,即可正式启用该进程: ```shell .\haproxy.exe -f .\path_to_your_haproxy.cfg ``` 此时应该能够在浏览器中输入目标机器的公网/局域网 IP 地址加上所设定的端口(默认为80),从而顺利浏览由 Tomcat 提供的内容页面了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值