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 转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。


工作原理如下:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿

正向代理就是代理服务器替代访问方【PC 1】去访问目标服务器【 PC 2】。我们常说的『翻墙』使用的就是这种技术。


反向代理

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。


客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(真实服务器)转交请求,并将获得的内容返回给客户端。


工作原理如下:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿


透明代理

和反向代理类似,透明代理也是客户端先和代理服务器建立连接,代理服务器在和真实服务器建立连接。



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 的工作模式:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿

TCP 的工作模式:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿

TCP工作模式

 

TCP 工作模式下的监听器比较简单,需要特别说明的是 HTTP 工作模式下的监听器。


HTTP工作模式

 


HAProxy 透明代理之 X-Forwarded-For 方式


Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿


Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿


HAProxy 透明代理之 TProxy 方式


需要标记外部对负载均衡器监听端口的请求,例如一个负载均衡器两个监听器分别监听了 80 和 8000 端口,通过 iptables 的 mark属性将数据流打上相应的 mark,如:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿
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

 

在后面还有手动制作路由环路即可,如:

Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿

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 访问,否则流量会被丢弃。



END



云计算-OpenStack-开源

关注“UnitedStack有云”

了解开源云资讯

精品技术库:https://www.ustack.com/about/blog/

企业联系人:marketing@unitedstack.com

有云,世界更精彩





以上是关于Neutron社区每周记(11.28-12.2)| HAProxy 里的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章

Neutron中Linux bridge与Open vSwitch两种plugin优劣势对比

[机器学习]第二周记录

Java学习周记week02

CA周记-.NET MAUI in GCR 月报(2022年8月)

暑假第四周周记

活着不是spark,活着就是活着本身|情绪周记Vol.15