OpenStack neutron Lbaas v2 源码分析文档

1、基础知识

·LBaas

Load Balancing as a Service,在openstack平台上,LB被作为一种服务提供给用户,用户可以按需获取可配置的业务负载分担方案。

·loadbalancer

负载均衡服务的跟对象,一般为虚机,用户基于此对负载均衡进行配置和操作。

·VIP

与LB关联的IP地址,作为外部访问后端服务的入口。

·Listener

监听器,用户可通过其配置外部对VIP访问的端口,算法,类型等等。

·Pool

负责后端的虚拟机池。在Haproxy为driver的情况下,一个Pool对应着一个独立的network namespace中运行的HaProxy进程中管理的backend。

一个VIP只会有一个Pool。

·Member

Member 对应的是 pool 里面处理网络请求的一个 OpenStack Nova 虚机。

·Health monitor

它用来检测pool里面的member的状态,支持很多种检测方法,在neutron里面是可选的。

 

2、修改driver配置

driver配置就是指向lbaas的api调用的实际负责负载均衡的代码或者进程,使其生效

[root@control ~]# vim /etc/neutron/neutron.conf 


# SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and
# SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some
# distributions. (string value)
#version = <None>

# Sets the list of available ciphers. value should be a string in the OpenSSL
# cipher list format. (string value)
#ciphers = <None>
[service_providers]
service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.hyyproxy.hyyload.HaproxyOnHostPluginDriver:default
#service_provider=LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default

service_providers 下的配置为指向具体的文件及类 以LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default为例指向文件为

/usr/lib/python2.7/site-packages/neutron_lbaas/drivers/haproxy/plugin_driver.py 文件中的HaproxyOnHostPluginDriver类

 

3、Lbaas api代码位置

3.1 python代码位置

/usr/lib/python2.7/site-packages/neutron_lbaas/services/loadbalancer/plugin.py

比如 pool, 无论是ui界面还是命令行的OpenStack 创建pool的命令  都会请求plugin.py下的create_pool方法

api函数中对于lbaas来说最重要的就是driver这个方法:

每个lbaas接口api中 都会调用此方法来使用driver创建负载均衡,(对应2、的neutron.conf配置文件的service_providers配置)

3.2 前端代码位置

如果有自己安装ui界面,那么就会知道前端代码路径在: /usr/share/openstack-dashboard  下面

static目录主要存放一些静态图片和js文件等;

在openstack_dashboard里面有个themes文件夹,每个主题都放在这个地方,然后再改目录下的settings.py里进行主题的添加,即可在右上角的设置里面看到添加的主题了;

修改完static或者 themes ,可能需要再/usr/share/openstack_dashboard下执行python manage.py compress命令进行缓存;

3.3 命令行代码路径

一般linux命令行运行neutron命令,help或者错误都会有提示信息,此处就是源码返回,修改路径:

/usr/lib/python2.7/site-packages/neutronclient/neutron/v2_0/lb/v2/

如pool的create:

vim /usr/lib/python2.7/site-packages/neutronclient/neutron/v2_0/lb/v2/pool.py

再轮询算法中添加了一个hyuy字符串,

 

命令行执行(代码生效需要重启neutron,systemctl restart neutron-server.service)

4、lbaas 和 Octavia 分析

Neutron中 LBaaS v2有两种实现方式,

一是:使用HAproxy作为负载均衡器,在网络节点上运行LBaaS agent,agent会完成节点上的Haproxy 的创建和配置工作。这也是目前较为成熟的使用方式。

二是:使用Octavia 作为负载均衡器,Octavia是在LBaaS v2中加入到openstack中的,官方对它的定位不是要代替HAproxy在neutron中的地位,而是作为一个可选开源的LB服务提供者,类似LVS+F5等。Octavia的架构是全新设计的,而且在一开始就立志成为运营级的负载均衡解决方案。只是目前Octavia还是远谈不上成熟,官方推荐只在Devstack中使用。

HAproxy + keepalive

比较常用的开源负载均衡器有LVS、Nginx、HAproxy,其中LVS只能做到四层的负载均衡,即只能依据IP+端口的方式进行转发,不支持L7的转发策略,Nginx不仅能做Web服务器,同时也能作为负载均衡器使用;HAproxy 和Nginx都能基于L7策略进行转发。LVS也经常和HAproxy、Nginx混用,在大流量的集群中,先由LVS将流量分摊到不同的Nginx/HAproxy集群,再由Nginx/HAproxy做L7转发。除此之外Neutron也支持Ctrix、F5、Radware等公司的插件,从而通过专用的负载均衡硬件来实现。

 

之所以称之为 lbaas v2,是因为Neutron的负载均衡的模型有过一次如上图的进化,在v2的版本中,neutron 对负载均衡的架构有了一次非常大的调整,v2版本变得更符合行业标准,且驱动和功能扩展变得更为简单,除此之外新版本还允许一个负载均衡器下添加多组 Listener 监听服务,以及加入了TLS。Lbaas v2无法和lbaas v1同时运行,开启lbaas v2需要停止lbaas v1。

改进后的LBaaS v2经过了更为全面的测试,并且加入了更多的HTTP层代理的特性。并开始支持Active-Standby部署模式,后续版本中将进一部支持Active-Active。

 

5、相关图例

5.1 lbaas v1  v2 对比

5.2 负载均衡原理

5.3  Octavia  api交互流程

5.4  octavia 基础流程

5.5 基础架构

5.6 数据结构

 

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值