好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

OpenStack手动从数据库中删除实例 - ugyn109的专栏 - 博客频道 - CSDN.NE

1.数据库中与删除实例相关的表

数据库中与删除实例相关的表如下: fixed_ips记录给实例分配的fixed ip,floating_ips显然与实例分配的floating ip有关,但我在实验中一直没有使用过floating故不作评断,instance_actions我这里是空的不管,instance_faults记录与实例有关的错误不管,instance_info_caches与实例的网络设置缓存有关,instance_metadata实例的元数据有关不管,instance_type_extra_specs与instance_types与flavor设置有关不管,instances显然是实例的主表,volumes与实例的volumes有关。我的实验中没有floating ip也没有volumes故我只关注fixed_ips,instance_info_caches,instances三个表。

2.OpenStack的删除策略

通过观察发现Nova中的表中基本都有如下字段: OpenStack在删除对象时并不删除数据库中的记录,只是修改deleted_at和deleted字段。

3.操作数据库

删除实例的操作主要集中在instances,instance_info_caches,fixed_ips三个表。

3.1操作instances表 下图是我的数据库中曾经删除了的test3(右边)与现在无法删除的test3(左边)的对比: 因此我的操作如下:

[sql] view plaincopy

update ?instances? set deleted_at?=?updated_at,??? deleted?=?1,??? power_state?=?0,??? vm_state?=?"deleted",??? terminated_at?=?updated_at,??? root_device_name?=?NULL,??? task_state?=?NULL where ?id?=?9;??

3.2操作instance_info_caches和fixed_ips

这两个操作简单,在前一步操作后已经在dash中看不到被删除的实例了,这两步操作主要是释放被删除实例所占用的网络资源,直接上代码:

[sql] view plaincopy

update ?instance_info_caches? set deleted_at?=?updated_at,??? deleted?=?1??? where ?id?=?9;?? ? update ?fixed_ips? set instance_id?=?NULL,??? allocated?=?0,??? virtual_interface_id?=?NULL where ?id?=?7;??

OK,如法炮制又删除了另一个实例,总算在dash中不用看那两个讨厌的实例了。

OpenStack手动从数据库中删除实例 - ugyn109的专栏 - 博客频道 - CSDN.NET

标签:

查看更多关于OpenStack手动从数据库中删除实例 - ugyn109的专栏 - 博客频道 - CSDN.NE的详细内容...

  阅读:47次