Neutron 社区即将正式提供对 Tooz 的支持
早在 Austin Summit 上,社区讨论了正式支持 Tooz 的事项,特别是 Tooz 提供的锁系统。其实早在 5 月初的 Neutron 社区每周记:Neutron社区每周记(5.16~5.23)|一个并发引发的思考中,我们就与读者讨论过社区目前的锁机制和一些可行的方案。几 天前 John 在社区发表了一篇报告,对 DLM(分布式锁机制)做了大量的 Benchmark,包括 1个、3个、6个并发下无竞争与有竞争,Zookeeper 和 Etcd 的效果。
测试过程是这样的,创建一个 HA 路由器然后删掉它。怎么体现出来加锁呢?我们知道社区的 HA 路由器通过 VRRP协议实现,VRRP 中每个路由器会有一个唯一化的 VRID,这个 VRID 在分配时理应当加锁,但是事实上现在的代码实现(neutron.db.l3_hamode_db.L3_HA_NAT_db_mixin._allocate_vr_id)并没有真的加锁,因为一来这个发生冲突概率还是比较小的,一般来说每个 HA 只会起两到三个虚拟路由器,所以只需要两到三个 VRID 即可。而来社区在这部分代码中有 context 做事务,DBDuplicateEntry 做错误 catch,retry 机制做重试,所以一般不会有问题。
但严格的讲,在资源分配的过程中,是应当加锁以保护资源的,所以 John 写了两个 Patch,一个以 router_id 加锁,一个以 tenant_id 加锁,由于创建的虚拟路由器的 id 都各不相同,所以以 router_id 加锁不会引起竞争,而后者则会引起竞争。下面是通过 Rally 在 6 个并发线程创建 200 个 router 时的效果,单位为秒。
有兴趣的同学可以直接查看社区的邮件,这里只贴出了这一个结果,可以看到对性能的影响是比较小的,而且 Zookeeper 的效果略好于 Etcd。John 将 Patch、OpenStack 部署方法和 Zookeeper 与 Etcd 的配置方法以及 Rally 的配置都贴在了报告中,有兴趣的同学可以复现尝试一下。希望分布式锁系统的引入能够将 Neutron 变得更加健壮。
L3 HA 是否应该跟踪虚拟网卡的状态?
目前 L3 HA 只会跟踪 ha 口的状态(vrrp 配置文件的 track_interface),不会跟踪虚拟网卡(例如 qr、qg)的状态,UnitedStack有云向社区提交了一个 Patch,用来让 Neutron HA Router 跟踪虚拟路由器虚拟网卡的状态,见 https://review.openstack.org/#/c/346501