Neutron/Metering/Bandwidth
< Neutron
目录
概述
想法是在 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 规则来实现带宽计量。
- 为每个路由器的 FORWARD 链添加一个全局规则进行计量。
- 为我们想要测量的每个流量添加规则到计量链。
- 这些规则将指向一个特定的链,用于收集流量(数据包、字节)。该链将代表计量标签。
- 添加一个代理来从 IPtables 链获取带宽信息。该代理将使用 Oslo 通知机制填充带宽使用信息作为增量。
技术实现
数据模型
Iptables 链模型
通知格式
{
'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(见配置)之间测量的包数 |
实施计划
此扩展的实现遵循以下计划
- 实现计量服务插件
- 实现计量代理
- 基于 IPTables 实现第一个计量驱动程序
- 数据库模型和 API 修改
- 在路由器创建时添加计量代理通知
- 向 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
授权
只有管理员用户将被授权操作计量标签/规则。
插件支持
此扩展将作为服务插件实现。
审查
- https://review.openstack.org/#/c/33075/
- https://review.openstack.org/#/c/35655/
- https://review.openstack.org/#/c/36813/
- 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 工具管理您的计量标签和规则