为 ipam 模块引入分布式锁¶
https://blueprints.launchpad.net/neutron/+spec/introduce-distributed-locks-to-ipam RFE:https://bugs.launchpad.net/neutron/+bug/1836834
在 ipam 模块中引入 OpenStack tooz 分布式锁。在大型端口创建场景下,避免 ip 分配超过最大重试限制失败,并提高 ip 分配效率。
问题描述¶
当前的端口创建存在失败的可能性。
当虚拟机批量创建时,nova 会并发调用 neutron API 创建端口。如果存在 ip 分配冲突,端口创建将失败,请参阅 [1]。
批量创建端口也存在类似的问题,当在同一子网上同时调用多个“create_port_bulk” API 时,尽管这种场景使用频率较低。
并发创建端口时,neutron 服务器 CPU 利用率增加,分配效率降低。
当 ip 分配冲突导致无法提交数据库时,会抛出
DB ERROR异常。Create_port会捕获上述异常,并在retry_interval=0.1后重试,并重新调用create_port直到超过max_retries=10。 当超过max_retries=10次后,“Create_port” 将失败。当并发量大且冲突加剧时,重复调用 create_port 会增加 CPU 负担并降低分配效率。调整retry_interval和max_retries只能降低出现问题的概率,但无法彻底解决它们。
提议的变更¶
此解决方案通过引入分布式锁来实现一个新的 ipam 驱动程序,以彻底解决 ip 地址分配冲突导致失败的问题。
对于分布式锁,我们将使用 OpenStack tooz [2],它支持许多后端驱动程序,例如 Zookeeper、Memcached、Redis、Mysql 等,并且是一个 OpenStack 原生项目。 我们将在 neutron.conf 中支持 tooz 后端驱动程序的配置,例如添加 [tooz] 配置项。
新的 IPAM 分配 ip 流程图。
备选方案¶
如果无法实现新的 ipam 驱动程序,我们可以修改当前的 ipam 驱动程序以引入分布式锁来解决上述问题。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
操作员可以使用 neutron.conf 中的 [tooz] 配置块配置 tooz 的后端驱动程序。
[tooz] # Tooz backend connection string. backend_url = file://$state_path # Number of seconds between heartbeats for distributed coordination. heartbeat = 1.0 # Number of seconds to wait after failed reconnection to Tooz backend. initial_reconnect_backoff = 0.1 # Maximum number of seconds between sequential reconnection retries to Tooz backend. max_reconnect_backoff = 60.0
操作员可以通过在 neutron.conf 中设置“ipam_driver”来切换到我们新的 ipam 驱动程序。
[default] # Neutron IPAM (IP address management) driver to use. By default, the reference # implementation of the Neutron IPAM driver is used. (string value) ipam_driver = ipam_with_dlm
性能影响¶
在使用 rally 并发测试创建虚拟机或端口或类似场景时。
优点
解决了由于 ip 分配冲突导致创建虚拟机或端口失败的问题,并提高了成功率。
减少了创建虚拟机或端口的平均时间。
创建虚拟机或端口的时间分布更平滑。
轻微影响
创建虚拟机或端口的最小时间略有增加,并且在非并发场景下创建端口的时间也会略有增加。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
qinhaizhong
- 其他贡献者
zhouhenglc
工作项¶
创建一个新的 ipam 驱动程序。
支持解析 [tooz] 后端驱动程序,封装分布式锁模块,并实现分布式锁初始化、加锁、解锁等。
使“create_port”支持新的 ipam 驱动程序。
使“bulk_create_port”支持新的 ipam 驱动程序。
文档工作。
依赖项¶
无
测试¶
单元测试、功能测试。
文档影响¶
无