跳转到: 导航, 搜索

Neutron/Metering/Bandwidth

概述

想法是在 L3 路由器级别进行计量。目的是允许操作员配置 IP 范围并为它们分配标签。例如,我们将能够设置两个标签;一个用于内部流量,另一个用于外部流量。每个标签将测量特定 IP 范围的流量。然后,带宽测量将被发送到 Oslo 通知系统,并可以由 Ceilometer 收集。

Blueprints

https://blueprints.launchpad.net/neutron/+spec/bandwidth-router-label

https://blueprints.launchpad.net/neutron/+spec/bandwidth-router-measurement

https://blueprints.launchpad.net/ceilometer/+spec/ceilometer-quantum-bw-metering

实现概述

可以通过在每个 l3 命名空间上设置一些 IPtables 规则来实现带宽计量。

  1. 为每个路由器的 FORWARD 链添加一个全局规则进行计量。
  2. 为我们想要测量的每个流量添加规则到计量链。
  3. 这些规则将指向一个特定的链,用于收集流量(数据包、字节)。该链将代表计量标签。
  4. 添加一个代理来从 IPtables 链获取带宽信息。该代理将使用 Oslo 通知机制填充带宽使用信息作为增量。

技术实现

数据模型

MeteringDataModel.jpg

Iptables 链模型

MeteringIptablesModel.jpg

通知格式

{
   'first_update':1377529521,
   'bytes':14616,
   'host':'Metering1',
   'last_update':1377529545,
   'label_id':u'740fa929-974a-4e84-81ec-ce801c09814c',
   'time':24,
   'pkts':174
}
值格式 笔记
first_update 整数 第一次测量的的时间戳
bytes 整数 两次 measure_interval(见配置)之间测量的字节数
host 字符串 代理的主机名
last_update 整数 最后一次测量的的时间戳
label_id uuid-str 标签的 UUID
time 整数 最后一次测量和当前测量之间的时间
pkts 整数 两次 measure_interval(见配置)之间测量的包数

实施计划

此扩展的实现遵循以下计划

  1. 实现计量服务插件
  2. 实现计量代理
  3. 基于 IPTables 实现第一个计量驱动程序
  4. 数据库模型和 API 修改
  5. 在路由器创建时添加计量代理通知
  6. 向 CLI 添加新命令

CLI

引入 python-neutronclient 的命令 

 meter-label-create             Create a metering label for a given tenant.
 meter-label-delete             Delete a given metering label.
 meter-label-list               List metering labels that belong to a given tenant.
 meter-label-show               Show information of a given metering label.
 meter-label-rule-create        Create a metering label rule for a given label.
 meter-label-rule-delete        Delete a given metering label.
 meter-label-rule-list          List metering labels that belong to a given label.
 meter-label-rule-show          Show information of a given metering label rule.

示例

创建计量标签 

# neutron meter-label-create NAME

为特定租户创建计量标签

# neutron meter-label-create --tenant-id TENANT-ID NAME

向此标签添加一些规则 

# neutron meter-label-rule-create METERING_LABEL_ID REMOTE_IP_PREFIX --direction egress --excluded

授权

只有管理员用户将被授权操作计量标签/规则。

插件支持

此扩展将作为服务插件实现。

审查

  1. https://review.openstack.org/#/c/33075/
  2. https://review.openstack.org/#/c/35655/
  3. https://review.openstack.org/#/c/36813/
  4. https://review.openstack.org/#/c/33611/

如何测试(草案)

将计量插件添加到 neutron.conf

[DEFAULT]
service_plugins = neutron.services.metering.metering_plugin.MeteringPlugin

重启 neutron-server…

编辑 /etc/neutron/metering_agent.ini

[DEFAULT]                                                                                       
# Show debugging output in log (sets DEBUG log level output)                                    
debug = True                                                                                                                                                                                    

driver = neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver                                                                                              
 
# Interval between two metering measures                                                        
measure_interval = 30                                                                                                                                                                  

# Interval between two metering reports                                                         
report_interval = 300   

interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

use_namespaces = True

在每个 L3 代理主机上启动计量代理

neutron-metering-agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/metering_agent.ini

Devstack 设置

将以下行添加到您的 localrc

ENABLED_SERVICES+=,q-metering

然后运行 stack.sh

stack.sh 完成后,您将能够通过 CLI 工具管理您的计量标签和规则