转载

理解Neutron之LBaaS

OpenStack提供的负载均衡服务:LBaaS,这个项目目前属于Neutron项目中,作为Neutron的一个Service Plugin。

负载均衡的功能想必不需要多解释了,无非就是把流量尽可能均衡的分配到后端的各台服务器上,现在流行的解决方案有很多,如硬件的 F5、软件的LVS、HAProxy、Nginx等。这些负载均衡手段虽然工作的层次有所不同,但根本目的都是一样的:让各个后端机器获得尽可能 均匀的复杂以提高集群整体的处理能力。

那么在云环境中负载均衡很自然的也是非常重要的技术,租户所创建的虚拟机之间也需要进行负载均衡。为什么不能直接使用更大的虚拟 机呢?好问题。一来虚拟机的纵向扩展将使服务出现Down time;二来纵向拓展是有上限的:不可能超过真实服务器的承受能力;三来如 果一直开着一台很大的低负载虚拟机,就租户而言从计费角度上不太划算,远不如按需的启动和关闭虚拟机来的划算。 根据负载均衡的特点,社区在OpenStack中把负载均衡抽象成下面的概念:

理解Neutron之LBaaS

其中最为核心的是Pool,代表负载后端的虚拟机池,Pool中包含想要进行负载均衡的虚拟机作为Member,并且要为Pool整体绑定一个VIP 作为所有Member的虚拟IP,所有访问虚拟IP的请求将根据设定的负载均衡规则分配到Pool中的Member虚拟机上。最后再为这个VIP对应的 Port绑定一个Floating IP,就可以从外网愉快的使用负载均衡下的虚拟机集群了~

实现的网络逻辑如下图所示:

理解Neutron之LBaaS

LBaaS利用Neutron的网络服务,将Floating IP绑定到Load Balancer的Port上,然后将这些流量通过内部网络均衡的分配给各个虚拟机。

很容易看出,最核心的部分就是Load Balancer的实现了,那么Load Balancer是怎么实现的呢?

答案是没有实现…OpenStack直接采用各种开源可用的负载均衡项目来完成负载均衡的任务,默认是HAProxy。LBaaS所做的任务就是根据 用户提出的负载均衡要求生成符合要求的HAProxy配置文件并启动HAProxy。

我在我的实验环境中为三台虚拟机(10.0.0.20, 10.0.0.21, 10.0.0.0.22)的80端口(HTTP)配置了负载均衡服务,使用10.0.0.23作为 VIP,果然发现了HAProxy进程:

$ ps aux | grep haproxy kongfy    3008  0.0  0.0 112612   740 pts/0    S+   11:42   0:00 grep --color=auto haproxy kongfy   12684  2.1  0.9 199700 35596 pts/14   S+   May05 253:32 python /usr/bin/neutron-lbaas-agent --config-file   /etc/neutron/neutron.conf --config-file=/etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini nobody   23906  0.0  0.0  49692  1300 ?        Ss   May09   0:20 haproxy -f /opt/stack/data/neutron/lbaas/49717bc1-  204c-42a8-9cc2-46db88a70365/conf -p /opt/stack/data/neutron/lbaas/49717bc1-204c-42a8-9cc2-46db88a70365/pid -sf 28415

顺藤摸瓜看看HAProxy使用的配置文件:

global  daemon  user nobody  group nobody  log /dev/log local0  log /dev/log local1 notice  stats socket /opt/stack/data/neutron/lbaas/49717bc1-204c-42a8-9cc2-46db88a70365/sock mode 0666 level user defaults  log global  retries 3  option redispatch  timeout connect 5000  timeout client 50000  timeout server 50000 frontend 8b1d4cd6-c07f-4b61-996b-8e72fb830eb9  option tcplog  bind 10.0.0.23:80  mode http  default_backend 49717bc1-204c-42a8-9cc2-46db88a70365  option forwardfor backend 49717bc1-204c-42a8-9cc2-46db88a70365  mode http  balance roundrobin  option forwardfor  server 4668dae7-3259-4e2c-9e9e-870d50e8ded6 10.0.0.20:80 weight 1  server 90f9f52b-ea36-4dfc-b9bc-c1d43a8310e5 10.0.0.21:80 weight 5  server 913ccb64-7034-4295-8c73-44b3d904b775 10.0.0.22:80 weight 1

——未完待续!

正文到此结束
Loading...