分配openstack浮动IP,同时确保不会从其他服务器中删除它

时间:2016-04-08 10:23:20

标签: cloud openstack floating-ip

(我正在使用openstack4j通过REST API与OpenStack交谈)

我想重用一些在我的租户中分配的未分配的浮动IP(分配给新配置的服务器)。但是,似乎@extends('layouts.master') @section('title', 'Forum team') @section('content') <div class="container" id="forum-container"> @foreach($roles as $role) <div class="col-md-12"> <div class="thread-box"> <div class="thread-title">{{ $role->name }}</div> @if($role->id) <div class="forum-body"> <div class="forum-user"> <div class="user">Username <div class="{{ XenioNode\User::find(2)->isOnline() ? 'online' : 'offline' }}"></div></div> <img src="#" class="img-responsive img-circle" alt="Cinque Terre"> <div class="user-status" style="background-color:blue;">Role name</div> </div> <div class="forum-thread-body"> <div class="thread-body"> <p>The user's bio.</p> </div> </div> </div> @endif </div> </div> @endforeach </div> @endsection 操作在分配未使用的浮动IP和从服务器到服务器重新分配之间没有区别。

我想自动化这个过程,但我害怕跟随竞争条件:一个客户端检查特定的IP是免费的,在它设法将它与服务器A关联之前,其他客户端将它与服务器B关联起来。第二个客户端,关联的浮动IP可以在成功关联后的任何后续点中删除。

还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

可能的解决方法是:

  • 仅删除并创建浮动IP。正如你所说,这是首选方式。通过小型VM可以从内部定期清理不再使用的浮动IP。但应优先考虑API客户端从外部清理。因此,每个客户都应该集成这个功能,但是必须注意这是用户的意图,至少它们会丢失一些重要的东西。示例:用于删除VM的Web UI可能会询问是否还应删除关联的浮动VM。 Openstack Heat(通过模板进行编排)会自动执行此操作。 CLI客户端可以在删除VM后删除已释放的资源。
  • 使用支持同步的内容进行协调。示例:具有事务支持的etcd,数据库(SQL或非数据库),可确保传递完成一次的队列(例如OpenStack Zaqar及其声明功能)。
  • 使用时间推移进行同步:读取,更改,等待特定时间,最后再次阅读以检查是否有人覆盖了更改。如果此更改耗时太长,请在特定等待时间之前中止。如果更改被覆盖,则使用不同的浮动ip重试。这很难做到,因为有许多极端情况,特别是很快就能正确中止,这可能会导致失败。例如,如果不是每个改变通过的地方确保不会发生这种情况,那么高负荷可能会使改变成功中止。

其他OpenStack API也存在同样的问题,例如: updating security groups。通常,可以通过向API添加修订计数器来避免这种情况,例如kubernetes (resourceVersion from ObjectMeta)etcd (modifiedIndex in v2,v3中的mod_revision)这样做。

即使对于实现无种族变化选项的API,大多数人类用户界面可能只会将其用于种族检测而不是避免,因为用户界面会告诉他们有种族和覆盖的内容优先于需要他们每次比赛发生时重试他们的行动。

答案 1 :(得分:0)

所面临的挑战涉及计算服务的浮动IP扩展(现已不推荐使用)的使用,该扩展将浮动IP分配分为两个步骤:分配(/os-floating-ips端点)和分配(addFloatingIp服务器操作)。

当前支持的方法是通过Neutron服务来操纵浮动IP,该服务允许在一个请求(POST/v2.0/floatingips)中创建和关联浮动IP。至少从理论上讲,这消除了希望重用浮动IP的客户端将某个客户端同时关联的可能性。如果所有客户都同意使用这种浮动IP分配模式,则可以安全地将未关联的浮动IP作为悬挂实体进行处理。