Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿
Posted 同方有云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿相关的知识,希望对你有一定的参考价值。
用了这么久以 HAProxy 为 Device Driver 的 Neutron LBaaS v2 ,你真的了解 HAProxy 吗?
本文将介绍负载均衡器的缘起和如何配置 HAProxy ,最后介绍 HAProxy 中的两种透明代理模式。
负载均衡器的缘起
从代理说起
代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。
其工作原理如图所示:
PC1 无法直接访问 PC2,但是可以通过访问 Proxy(代理服务器)的方式间接访问 PC2,这样的方式就称为『代理』。
常见的代理技术
常见的代理技术分为正向代理,反向代理和透明代理。
正向代理
正向代理是一个位于客户端和真实服务器之间的服务器,为了从原始服务器取得内容,用户 A 向代理服务器 Z 发送一个请求并指定目标(服务器 B ),然后代理服务器 Z 向服务器 B 转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
工作原理如下:
正向代理就是代理服务器替代访问方【PC 1】去访问目标服务器【 PC 2】。我们常说的『翻墙』使用的就是这种技术。
反向代理
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。
客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(真实服务器)转交请求,并将获得的内容返回给客户端。
工作原理如下:
透明代理
和反向代理类似,透明代理也是客户端先和代理服务器建立连接,代理服务器在和真实服务器建立连接。
HAProxy 简介
在介绍了各种代理模式后,介绍一下 HAProxy 的工作模式。
HAProxy 是一款高性能的反向代理软件,可以基于四层或七层进行反向代理。同时也支持上述的透明代理模式,HAProxy 可通过两种方式进行透明代理。
HAProxy 的配置
HAProxy 的配置大体分为两部分:全局配置和代理配置。
全局配置
全局配置为 global 配置中的参数,有进程管理及安全相关的参数。
daemon:以守护进程方式运行
maxconn:该 HAProxy 允许的最大连接数(所有监听器的最大连接数不应超过此值)
代理配置
default
用于为所有其它配置段提供默认参数
frontend
bind:定义监听的套接字(IP:Port)
mode:该监听器的工作模式,TCP 或者 HTTP
default_backend:设置该监听器的资源池
option forwardfor:开启 X-Forward-For(仅限 HTTP)
backend
mode:该资源池的工作模式,TCP 或者 HTTP
balance:负载均衡算法,其中包括:roundrobin(轮询),static-rr(根据权重的轮询),leastconn(最小连接数),source(源 IP )等
option forwardfor:开启 X-Forward-For(仅限 HTTP)
timeout check :超时(健康检查)
server:定义后端一个 Real Server,格式:<name> <address> <port> <*params>
常用的 params:weight(权重) 66 check inter(检查间隔) 10s fall 3(尝试次数)
HAProxy 的工作模式
HAProxy 的工作模式通过监听器(Listener)区分,不同的监听器可以工作在不同的工作模式下。通过 mode 字段确定,如:
HTTP 的工作模式:
TCP 的工作模式:
TCP工作模式
TCP 工作模式下的监听器比较简单,需要特别说明的是 HTTP 工作模式下的监听器。
HTTP工作模式
HAProxy 透明代理之 X-Forwarded-For 方式
HAProxy 透明代理之 TProxy 方式
需要标记外部对负载均衡器监听端口的请求,例如一个负载均衡器两个监听器分别监听了 80 和 8000 端口,通过 iptables 的 mark属性将数据流打上相应的 mark,如:
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket --dport 80 -j DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket --dport 8000 -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
在后面还有手动制作路由环路即可,如:
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
这种透明模式带来的问题是:
2、后端 Real Server 的安全组需要放开对应端口源为任意 IP (0.0.0.0/0)的 ingress 访问,否则流量会被丢弃。
云计算-OpenStack-开源
关注“UnitedStack有云”
了解开源云资讯
精品技术库:https://www.ustack.com/about/blog/
企业联系人:marketing@unitedstack.com
有云,世界更精彩
以上是关于Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章
Neutron中Linux bridge与Open vSwitch两种plugin优劣势对比