haproxy 是一款性能很高的负载均衡软件,虽然比不上F5的功能。但足以满足大部份企业需求
默认情况下Haproxy 做为负载均衡软件,后端服务器是看不到client ip 地址的,看到的全是HAPROXY 地址。比如:clinet(10.0.0.1)--->HAPROXY(100.100.100.100)---->server(100.100.100.200) 在server 上看到客户端请求IP地址是100.100.100.100。这会导致很多问题,比如说IP 签权,做数据分析都会有问题。虽然说可以通过X-FOWORD 这个字段插入源IP地址,但这需要后端应用程的调整。本篇文档就是为了解决这个问题
先决条件:
看内核是否支持,如果不支持就需要升级
[root@openstack ~]# grep TPROXY /boot/config-`uname -r`
CONFIG_NETFILTER_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
如果是HAproxy 1.5-dev 版默认编译就行了,如果是1.5.3 编译的时候需要(make TARGET=linux2628 USE_LINUX_TPROXY=1)加上红色的部份
haproxy 特别配置:
在配置里面要加上 source 0.0.0.0 usesrc clientip
在haproxy 上面要配置iptables
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 111
iptables -t mangle -A DIVERT -j ACCEPT
路由配置:
ip rule add fwmark 111 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
修改sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
server 这台服务器的网关指向haproxy
如果跨网段的情况,可以通过GRE 隧道,然后通过iptables 打tag 的方式把数据包指向haproxy 服务器,在后面的文档陆续分享。
阅读(2931) | 评论(0) | 转发(0) |