一:背景 Haproxy是一款优秀的负载均衡软件,相比于Nginx来说,Haproxy可以承受的负载能力更强,这些都要归功于Haproxy的一些实现机制,单缓冲,splice系统调用,单进程、事件驱动模型,Zero-copy forwarding,树形存储等等,所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。 基于以上事实,公司最近采购了CoreMail邮件系统来构建一个高大上的邮件系统架构。前端负载均衡就是使用了Haproxy来使用。但是方案实施工程中也发现了一些问题,最明显的就是用户通过Haproxy来访问邮件系统后真正达到邮件系统的地址都是Haproxy的地址,这就导致了一个问题,在垃圾邮件过滤的时候就无法实现基于IP的过滤,并且也无法记录IP地址信息。为了解决这个问题我google了很多方案,可以使用硬负载,硬负载可以实现全透明代理让后端邮件服务器获取到用户的真实IP,还有一种解决方案就是Haproxy的全透明代理。接下来将会介绍下Haproxy的全透明代理的部署。 二:实验拓扑 <ignore_js_op style="word-wrap: break-word;"> 主要是让Haproxy的设备变成一个网桥设备,借助tpproxy来实现Haproxy的全透明代理。 三:方案部署 设置HAproxy的网卡为桥接模式(桥接模式原理请参考其他博文) 到此桥接模式就设置好了,接在桥接设备上的机器都可以获取公司的内网IP地址。逻辑上是和公司内网是一个网络。原理和虚拟机中的桥接模式一样。 brctl addif 就相当于给这个桥接设备添加可用的端口。 我们还可以将地址信息写入配置文件中./etc/sysconfig/network-scripts/ifcfg-br0中 接着开始配置Haproxy 到此HAproxy配置完成。限制于环境这里我使用tcp协议的ssh来完成实验。 下面是HAproxy 的一个代理ssh的配置文件 到此为止一个支持TProxy的HAproxy配置完成。 配置TProxy代码如下 上面的代码目的是为了让所有进入网桥设备的mangle表的包都打上标记,然后新增一条路由规则将这些打了标记的数据包发送至本地回环接口进行处理。 配置内核参数支持IP转发和对源地址进行检查: 给CoreMail服务器设置默认路由 设置默认路由的原因就在于要将所有的流量都返回到haproxy,让haproxy修改其源地址为haproxy的地址。 到此为此基于TProxy的Haproxy全透明代理完成了。 HAproxy的全透明代理还有第二种方法实现,那就是把两台CoreMail服务器单独划一个子网由HAproxy做网关,CoreMail的默认网关指向Haproxy,并且HAproxy要实现NAT,将返回的数据包源地址修改成自己的地址。限于篇幅这里就不介绍HAPROXY的实现TPROXY的第二种方法了。 国内关于HAproxy的全透明模式的博文很少很少,大多数都是在问这个问题。本文我也有很多地方是一知半解,只是实现了全透明的功能,后期将会介绍下网桥模式的一些理论。 |
- 浏览: 323919 次
- 性别:
- 来自: 南昌
最新评论
-
j_bird:
你好,想探讨下滑动窗口是怎么计算的,一条群发短信发出去,滑动窗 ...
协议研发 中移动CMPP2.0协议API -
andyliulin:
楼主,现在的magicode 生成器工具的 官网,http: ...
Mgicode 生成器正式发布 -
huazai_wow:
楼主 你只是分析了 在jquery 中 有使用到 jQu ...
jquery event trigger 分析 -
dengkanghua:
CMPP2.0中出现流量控制错误是什么引起的。有什么解决办法吗 ...
协议研发 中移动CMPP2.0协议API -
JohnHust:
[flash=200,200][/flash][url][/u ...
Jquery源码分析(一)
相关推荐
- **全透明代理**:HAProxy支持全透明代理模式,在某些Linux内核版本中通过打补丁实现。这意味着可以通过客户端IP或其他地址连接后端服务器,而不需改变服务器地址。 - **MySQL负载均衡**:HAProxy经常被用于MySQL...
5. **全透明代理**:HAProxy可以在不改变服务器地址的情况下,根据客户端IP或其他标识连接后端服务器,简化网络架构。 6. **高性能调度**:使用高效的调度算法,如动态加权轮询,以优化资源分配,提高吞吐量。 7. **...
2. **全透明代理**:在Linux内核补丁支持下,HAProxy可以以客户端IP或任何其他地址连接后端服务器,保持服务器地址不变。 3. **高性能优化**:利用O(1)事件检查器、单缓冲机制、splice()系统调用实现零复制转发、...
5. **全透明代理**:在某些情况下,HAproxy可以使用客户端IP地址或自定义地址连接后端服务器,实现无感知的代理服务。 6. **效率优化**:通过内核TCP拼接等技术提高吞吐量,降低CPU使用率,提供高速处理能力。 7. ...
* 支持连接拒绝、全透明代理等独特的功能 * 强大的 ACL 支持,用于访问控制 * 独特的弹性二叉树数据结构 * 支持客户端的 keepalive 功能 * 支持 TCP 加速、零复制功能 * 支持响应池(response buffering) * 支持 ...
- **IP透明代理模型(IP Transparency Model)**:客户端可以直接看到后端服务器的IP地址,提高系统的透明性和可扩展性。 ### 4. LVS的使用步骤 1. 安装LVS软件包,如`ipvsadm`工具。 2. 配置调度器,设置虚拟服务...
- 通过设置MySQL代理(如ProxySQL或HAProxy),将读请求路由到只读副本,写请求发送至主库,以减轻主库压力,提高系统并发能力。 c. Cache(缓存) - 使用Memcached或Redis作为缓存层,可以显著减少对数据库的...
- 从中心化治理到服务网格:经历了HAProxy、Nginx、Tengine等传统代理技术,再到Dubbo、Thrift、gRPC等服务框架,最后向Service Mesh转变。 - Service Mesh的挑战:包括控制面板的边界定义、能力下沉导致的新问题...